Code review, ¿de dónde es este código?


Desarrollo tech.lat dev

Code review, ¿de dónde es este código?

Code review, ¿de dónde es este código?

Johnbo

Una de las mejores prácticas para aprender a escribir buen código es leer lo que han escrito otros. Y si son ejemplos de éxito, todavía mejor; aunque del mal código también se puede aprender por lo menos a reconocer los patrones a evitar.

Por eso, queremos proponeros una nueva sección donde revisar el código fuente de algunos de los proyectos más conocidos del software libre. Y para hacerlo más entretenido, lo vamos a organizar a modo de concurso, mostrándoos parte del código fuente para ver quién es capaz de reconocerlo.

Las pistas

Como reconocer un código por su aspecto puede ser un poco duro, vamos a daros unas pistas con las que debería resultaros mucho más fácil.

Este código, escrito principalmente en C y algo de ensamblador, supuso uno de los grandes hitos del software libre, a pesar de que en principio no tenía muchas pretensiones de ser algo profesional, sino un mero entretenimiento con afán de aprendizaje.

En su primera versión, a principios de la década de los 90, contaba con poco más de 10.000 líneas. A día de hoy, el proyecto sigue vivo y recientemente ha superado la "versión π", con más de 10 millones de líneas de código.

El código

Las siguientes líneas corresponden a aquella primera versión 0.01:

/* * contains the low-level code for most hardware faults. * page_exception is handled by the mm, so that isn't here. This * file also handles (hopefully) fpu-exceptions due to TS-bit, as * the fpu must be properly saved/resored. This hasn't been tested. */.globl _divide_error,_debug,_nmi,_int3,_overflow,_bounds,_invalid_op.globl _device_not_available,_double_fault,_coprocessor_segment_overrun.globl _invalid_TSS,_segment_not_present,_stack_segment.globl _general_protection,_coprocessor_error,_reserved_divide_error: pushl $_do_divide_errorno_error_code: xchgl %eax,(%esp) pushl %ebx pushl %ecx pushl %edx pushl %edi pushl %esi pushl %ebp push %ds push %es push %fs pushl $0 # "error code" lea 44(%esp),%edx pushl %edx movl $0x10,%edx mov %dx,%ds mov %dx,%es mov %dx,%fs call *%eax addl $8,%esp pop %fs pop %es pop %ds popl %ebp popl %esi popl %edi popl %edx popl %ecx popl %ebx popl %eax iret_debug: pushl $_do_int3 # _do_debug jmp no_error_code_nmi: pushl $_do_nmi jmp no_error_code_int3: pushl $_do_int3 jmp no_error_code_overflow: pushl $_do_overflow jmp no_error_code_bounds: pushl $_do_bounds jmp no_error_code_invalid_op: pushl $_do_invalid_op jmp no_error_codemath_emulate: popl %eax pushl $_do_device_not_available jmp no_error_code_device_not_available: pushl %eax movl %cr0,%eax bt $2,%eax # EM (math emulation bit) jc math_emulate clts # clear TS so that we can use math movl _current,%eax cmpl _last_task_used_math,%eax je 1f # shouldn't happen really ... pushl %ecx pushl %edx push %ds movl $0x10,%eax mov %ax,%ds call _math_state_restore pop %ds popl %edx popl %ecx1: popl %eax iret_coprocessor_segment_overrun: pushl $_do_coprocessor_segment_overrun jmp no_error_code_reserved: pushl $_do_reserved jmp no_error_code_coprocessor_error: pushl $_do_coprocessor_error jmp no_error_code_double_fault: pushl $_do_double_faulterror_code: xchgl %eax,4(%esp) # error code <-> %eax xchgl %ebx,(%esp) # &function <-> %ebx pushl %ecx pushl %edx pushl %edi pushl %esi pushl %ebp push %ds push %es push %fs pushl %eax # error code lea 44(%esp),%eax # offset pushl %eax movl $0x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%fs call *%ebx addl $8,%esp pop %fs pop %es pop %ds popl %ebp popl %esi popl %edi popl %edx popl %ecx popl %ebx popl %eax iret_invalid_TSS: pushl $_do_invalid_TSS jmp error_code_segment_not_present: pushl $_do_segment_not_present jmp error_code_stack_segment: pushl $_do_stack_segment jmp error_code_general_protection: pushl $_do_general_protection jmp error_code

El reto

¿Lo habéis reconocido? Si es así, ¿seríais capaces de decirnos...

  • ...a qué fichero corresponde este fragmento de código?

  • ...qué comentario acompañó al commit o subida de este código?

  • ...quién es su autor?

Esperamos vuestras respuestas en los comentarios.

<!--

>--