En el ensayo de USENET de Ed Nather de 1983 «The Story of Mel, a Real Programmer», Mel es el programador de Royal McBee Computer Corp., fabricante del LGP-30 y del más reciente RPC-4000, máquinas baratas de memoria de tambor. Mel, que desaprobaba los compiladores («Si un programa no puede reescribir su propio código, ¿de qué sirve?»), había escrito en hexadecimal puro el programa más popular de la empresa: un juego de blackjack que llenaba el stand del LGP-30 en cada feria de informática mientras los vendedores de IBM se quedaban por allí hablando entre ellos.
El arte de Mel era la sincronización. En una máquina de tambor, el código solo se ejecuta rápido si cada instrucción llega al cabezal de lectura justo cuando termina la anterior. Existía un ensamblador optimizador para esto, pero Mel lo rechazó porque sus colocaciones eran impredecibles y lo obligarían a usar constantes separadas. Conociendo el valor numérico de cada código de operación y asignando sus propias direcciones de tambor, podía tratar cualquier instrucción como una constante numérica: tomar una instrucción de suma anterior y multiplicar por ella.
Escribía primero los cuerpos de los bucles más internos para que ocuparan las ubicaciones óptimas del tambor, y colocaba retrasos deliberados justo después del cabezal de lectura para que dieran una revolución completa: lo «más pésimo». Nather comparó los programas optimizados a mano por Mel con el mismo código ejecutado mediante el ensamblador optimizador: «Los de Mel siempre corrían más rápido». El ensayo cierra con una solicitud de cambio en la que el departamento de ventas quería un interruptor de cambio para permitir que los clientes ganaran al blackjack.
Mel se resistió a la deshonestidad y luego accedió, pero escribió la prueba al revés, de modo que el interruptor hacía que la máquina hiciera trampa y ganara siempre. Declaró que su subconsciente era inconteniblemente ético y se negó a corregirlo, y el ensayo de Nather convirtió el episodio en una de las piezas de folclore informático más reimpresas.
Escribir primero los bucles más internos y colocar cada instrucción para encontrarse con el cabezal de lectura exactamente a tiempo, usando los valores numéricos de los códigos de operación como constantes para el código automodificable.
La latencia del tambor hacía que la colocación de las instrucciones marcara la diferencia entre código rápido y código lentísimo.
El ensamblador optimizador optimizaba la colocación, pero destruía el control del programador sobre ella.
Escribir primero los bucles más internos permitía que el código más caliente ocupara las mejores direcciones antes que cualquier otra cosa.
El código automodificable mediante aritmética de códigos de operación como constantes eliminaba por completo las constantes separadas.
La optimización real explota la física de la máquina, no la cadena de herramientas: quien conoce el valor numérico de cada código de operación puede convertir las constantes en código y la sincronización en material de diseño.
El ensayo se convirtió en una de las piezas de folclore informático más reimpresas, y «no del todo óptimo» entró en el vocabulario de los programadores gracias a la acuñación de Mel, «lo más pésimo»; el RPC-4000 y la propia Royal McBee desaparecieron hace mucho y se recuerdan principalmente por esta historia.
CONSULTA LAS PRUEBAS
Las fuentes
- The Story of Mel, a Real Programmer (Ed Nather, USENET, 21 May 1983) University of Utah folklore archive · users.cs.utah.edu ·