Del código al proceso

El código fuente es un texto para personas y la máquina ejecuta otra cosa. Qué hacen el compilador y el intérprete, y cómo una pila calcula 3 + 4 × 5.

4 min
Editar

El código fuente que escribe un programador no es lo que la máquina ejecuta: es un texto, escrito para ser leído por personas, y entre ese texto y la ejecución hay una traducción. La máquina solo entiende instrucciones elementales (mueve este valor a esta caja, suma estos dos, salta a esta línea si el resultado fue cero) y el programa que convierte el texto en esa lista de instrucciones se llama compilador o intérprete, según traduzca de una vez o sobre la marcha. Ese escalón es el que falta para cerrar el itinerario: los bits, las instrucciones, las cajas, los bucles y las condiciones existen de verdad, en el nivel de abajo, y el texto es solo su forma legible.

La figura de esta página muestra la traducción en la máquina más pequeña honesta: una máquina de pila. A la izquierda está el fuente; en medio, la lista de instrucciones a la que se traduce; a la derecha, la pila y la memoria:

resultado = 3 + 4 × 5

PUSH 3
PUSH 4
PUSH 5
MUL
ADD
GUARDAR resultado

PUSH pone un valor en la cima de la pila; MUL y ADD sacan los dos de arriba y dejan el resultado; GUARDAR vacía la pila en la caja con nombre. Ejecuta con «Un paso» y observa: la máquina no ve la expresión entera ni sabe qué es la precedencia, solo ejecuta la instrucción que le toca. Y ahora cambia el fuente a (3 + 4) × 5: la lista de instrucciones es otra, con ADD y MUL intercambiados, y el resultado es 35 en lugar de 23:

resultado = (3 + 4) × 5

PUSH 3
PUSH 4
ADD
PUSH 5
MUL
GUARDAR resultado

La precedencia de operadores, que en la escuela se memoriza como una norma, resulta ser una decisión del traductor sobre el orden de las instrucciones, y el paréntesis es la manera de cambiar esa decisión.

Interactivo Ejecuta las dos versiones paso a paso: mismos números, distinto orden de instrucciones, 23 contra 35. La pila crece con los PUSH y se vacía con cada operación.

Que el texto y la ejecución sean cosas distintas es una de las ideas más grandes del siglo XX, y tiene fecha y lugar: 1945, Princeton y Filadelfia. La idea del programa almacenado (que las instrucciones de la máquina vivan en la misma memoria que sus datos, escritas como números) aparece en el informe del EDVAC de von Neumann y en el Proposed Electronic Calculator de Turing, y la desarrollaron Burks, Goldstine y el propio von Neumann en el informe del IAS de 1946. La consecuencia es la que ves en la figura: si las instrucciones son datos, un programa puede escribir las instrucciones de otro programa. El compilador no es una herramienta más: es el programa que existe porque las instrucciones son números en memoria. Grace Hopper lo comprobó en 1952 con el A-0, el primer traductor, y contó después que nadie lo creía: tocaba explicar una y otra vez que la máquina podía escribir su propio código máquina.

El modelo de pila de la figura tampoco es un juguete didáctico. Edsger Dijkstra usó exactamente esa idea (una pila para los valores pendientes) para construir el traductor de ALGOL 60 del X1 en Ámsterdam, y las máquinas virtuales que ejecutan hoy Java o Python funcionan sobre el mismo principio. Cuando en la pila quedan tres valores y llega MUL, la máquina no pregunta de dónde salieron: toma los dos de arriba. Esa indiferencia es lo que hace al modelo universal (cualquier expresión, por larga que sea, se ejecuta con las mismas cuatro instrucciones) y lo que hace que los errores de pila sean los más oscuros de depurar: el valor equivocado no lleva etiqueta.

Con esto se cierra el recorrido. Un programa es un texto; el texto se traduce a instrucciones; las instrucciones mueven valores entre cajas, deciden por dónde seguir, repiten lo que cambia y se agrupan en máquinas con nombre. Todo lo que hace un ordenador (cada aplicación que has usado hoy) está hecho de esas piezas y de ninguna más. La pregunta siguiente ya no es cómo ejecuta la máquina sino cómo se organizan los datos para que la ejecución sea rápida: qué estructuras caben en esas cajas y qué cuesta buscar en cada una. De eso trata el itinerario «Estructuras de datos que se ven», que empieza midiendo en el navegador lo que este acaba de explicar.

§

Fuentes

  1. Alan M. TuringProposed Electronic CalculatorNational Physical Laboratory, Teddington1945
  2. Arthur W. Burks, Herman H. Goldstine y John von NeumannPreliminary Discussion of the Logical Design of an Electronic Computing InstrumentInstitute for Advanced Study, Princeton1946
  3. Grace Murray HopperThe Education of a ComputerProceedings of the 1952 ACM National Meeting, Pittsburgh1952
  4. Edsger W. DijkstraALGOL 60 Translation: An ALGOL 60 Translator for the X1Mathematisch Centrum, Ámsterdam1961
  5. John W. BackusThe History of FORTRAN I, II, and IIIACM SIGPLAN Notices 13(8)1978
Sarasola, Josemari (2025). "Del código al proceso". Ikusmira. Recuperado de https://ikusmira.org/p/del-codigo-al-proceso/

Una errata, un dato desfasado, un párrafo que falta: edítalo y la redacción revisa tu propuesta.

Sugerir una mejora →
Informática Del código al proceso