compiler construction - significado - ¿Cómo se escribió el primer compilador?
historia de los compiladores (6)
Escuché sobre el pollo y el huevo, y sobre el arranque. Tengo algunas preguntas.
¿Qué escribió el primer compilador que convirtió algo en instrucciones binarias?
¿El ensamblaje está compilado o traducido en instrucciones binarias?
... Me cuesta creer que hayan escrito un compilador en binario.
¿Qué escribió el primer compilador que convirtió algo en instrucciones binarias?
Un humano lo hizo. Lea sobre el sistema A-0 A-0 :
En 1952, Grace completó su primer compilador para Sperry, conocido como el A-0. El Sistema A-0 era un conjunto de instrucciones que podían traducir el código matemático simbólico al lenguaje de la máquina. Al producir A-0, tomó todas las subrutinas que había estado recogiendo a lo largo de los años y las puso en cinta. Cada rutina recibió un número de llamada, para que la máquina pudiera encontrarlo en la cinta. "Todo lo que tenía que hacer era escribir un conjunto de números de llamada, dejar que la computadora los encontrara en la cinta, traerlos y hacer las adiciones. Este fue el primer compilador", según lo describe Grace.
Las instrucciones de ensamblaje son (generalmente) una asignación directa a los códigos de operación, que son valores de bytes múltiples de código de máquina que pueden ser interpretados directamente por el procesador. Es bastante posible escribir un programa en códigos de operación directamente al buscarlos desde una tabla (como esta para el microprocesador 6039 , por ejemplo) que los enumera con las instrucciones de ensamblaje correspondientes y determinar manualmente las direcciones / compensaciones de memoria para las cosas como saltos.
Los primeros programas se hicieron exactamente de esta manera: códigos de operación escritos a mano.
Sin embargo, la mayoría de las veces es más sencillo utilizar un ensamblador para "compilar" el código ensamblador, que realiza automáticamente estas búsquedas de código de operación, además de ser útil en el cálculo de direcciones / desplazamientos para etiquetas de salto con nombre, etcétera.
Los primeros ensambladores fueron escritos a mano. Esos ensambladores podrían usarse para ensamblar ensambladores más complicados, que luego se podrían usar para ensamblar compiladores escritos para lenguajes de nivel superior, y así sucesivamente. Este proceso de escribir iterativamente las herramientas para simplificar la creación del siguiente conjunto de herramientas se llama (como lo menciona David Rabinowitz en su respuesta) bootstrapping .
Lea acerca del bootstrapping y el historial de escritura del compilador
La idea es escribir un compilador muy simple directamente en código máquina, usarlo para escribir un compilador más sofisticado, usar el segundo para construir un tercero y así sucesivamente hasta que pueda tener un compilador completo.
Los huevos precedieron mucho a los pollos. La respuesta a la mayoría de los problemas de "pollo y huevo" es la misma: evolución. Algunas personas tienen problemas para creer en la evolución biológica también, pero la incredulidad no es un argumento (google argumentum ad ignorantiam).
Para responder directamente a su pregunta: el primer compilador fue escrito (por un ser humano) en un lenguaje ensamblador : un programa llamado ensamblador traduciría el lenguaje ensamblador a binario; este es un proceso mucho más simple que la compilación porque el lenguaje ensamblador es solo una forma simbólica de lenguaje de máquina que usa nombres de código de operación en lugar de números, representa direcciones con símbolos, etc. Muchos compiladores posteriores también se escribieron en un lenguaje ensamblador. Pero el primer compilador de C fue un compilador B modificado, que fue escrito en B El primer compilador de B fue escrito en TMG . El compilador TMG utilizado para compilar ese compilador B se escribió en el lenguaje ensamblador PDP-7.
Los primeros programas fueron escritos en código de máquina (no en lenguaje ensamblador) - números reales conectados a la memoria de la computadora usando interruptores. Hemos recorrido un largo camino ...
A veces, esto todavía sucede en una pequeña medida: parchear pequeños trozos de código o crear thunks. Recuerdo el troquelado de números en cadenas básicas que luego se ejecutaban como subrutinas pequeñas y rápidas en micros iniciales. También recuerdo cambiar los interruptores en el panel frontal de un PDP-11 para ingresar a un programa de cargador de arranque en su memoria para un curso universitario.
Estos programas algunas veces se usarían para procesar archivos de texto para crear otros programas y se crearon los lenguajes de programación.
Woz dijo en una de sus charlas públicas que, cuando comenzó, no podía permitirse un compilador, por lo que compiló en binario a mano en papel. Si quieres ver algo aún más salvaje, lee sobre las condiciones bajo las cuales Bill Gates y Paul Allen escribieron el BASIC para Altair 8800.
Con respecto a "escribir una computadora en binario", retroceda un paso de ser programador y piense en lo que eran las primeras computadoras. Las cosas de alto nivel aún no existían, pensaste en todo en el nivel bajo porque eso era todo. Tenías hardware que podía hacer lógica básica y aritmética que manipulaste a través de un código de máquina (que es solo ensamblado compilado - Amber explica por qué esta parte no es difícil de hacer a mano) y querías que este hardware realizara ciertas hazañas matemáticas. No se preocupó por el sistema operativo inexistente, simplemente le dijo al hardware (en ensamble) cómo manipular los números que alimenta. Fue una gran calculadora. La computadora de hoy se construyó una abstracción a la vez.
Si quiere derribar la barrera que hace que las computadoras se sientan mágicas, recomiendo leer el CÓDIGO de Charles Petzold y / o Los Elementos de los Sistemas de Computación . Con solo un conocimiento básico de programación, estos libros maravillosamente accesibles te permitirán comprender las computadoras de arriba a abajo. Obviamente, uno no puede obtener una comp. sci. o un grado de EE después de solo 2 libros, pero puedo decir que como programador autodidacta que se perdió la capacitación formal: ¡estos libros sacudieron mi mundo!