Code review, ¿de dónde es este código?
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.
<!--
>--