Escuché sobre el pollo y el huevo y el bootstrapping. Tengo algunas preguntas.
¿Qué escribió el primer compilador que convirtió algo en instrucciones binarias?
¿Se compila o traduce el ensamblaje en instrucciones binarias?
... Me resultaría difícil creer que escribieron un compilador en binario.
compiler-construction
machine-instruction
Shawn Mclean
fuente
fuente
Respuestas:
Las instrucciones de ensamblaje son (generalmente) una asignación directa a los códigos de operación, que son valores (múltiples) bytes del código de máquina que el procesador puede interpretar directamente. Es bastante posible escribir un programa en códigos de operación directamente buscándolos desde una tabla (como esta para el microprocesador 6039 , por ejemplo) que los enumera con las instrucciones de ensamblaje correspondientes y las direcciones de memoria / compensaciones para determinar las cosas a mano. como saltos
Los primeros programas se realizaron exactamente de esta manera: códigos de operación escritos a mano.
Sin embargo, la mayoría de las veces es más sencillo usar un ensamblador para "compilar" el código de ensamblaje, que realiza automáticamente estas búsquedas de código de operación, además de ser útil para calcular direcciones / compensaciones para etiquetas de salto con nombre, etc.
Los primeros ensambladores fueron escritos a mano. Esos ensambladores podrían usarse para ensamblar ensambladores más complicados, que luego podrían usarse 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 denomina arranque (como lo menciona David Rabinowitz en su respuesta) .
fuente
Lea sobre el arranque del compilador y la historia de la escritura del compilador
La idea es escribir un compilador muy simple directamente en el código de la 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 con todas las funciones.
fuente
Los huevos precedieron a las gallinas. La respuesta a la mayoría de los problemas de "la gallina y el huevo" es la misma: evolución. Algunas personas también tienen problemas para creer en la evolución biológica, pero la incredulidad no es un argumento (google argumentoum ad ignorantiam).
Para responder directamente a su pregunta: el primer compilador fue escrito (por un 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 del lenguaje máquina que utiliza 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 lenguaje ensamblador. Pero el primer compilador de C era un compilador B modificado, que fue escrito en B . El primer compilador B fue escrito en TMG . El compilador TMG solía compilar que el compilador B fue escrito en lenguaje ensamblador PDP-7.
fuente
Woz dijo en una de sus charlas públicas que cuando comenzó, no podía permitirse un compilador, así que compiló en binario a mano en papel. Si desea ver algo aún más salvaje, lea sobre las condiciones en que Bill Gates y Paul Allen escribieron el BASIC para el Altair 8800.
Con respecto a "escribir una computadora en binario", dé un paso atrás de ser un programador y piense en cuáles fueron 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ía un hardware que podía hacer lógica y aritmética básicas que manipulaba a través del 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ía que este hardware realizara ciertas hazañas matemáticas. No te preocupaste por el sistema operativo inexistente, solo le dijiste al hardware (en conjunto) cómo manipular los números que lo alimentas. Era una calculadora simplemente grande. La computadora de hoy se construyó una abstracción a la vez.
Si desea romper la barrera que hace que las computadoras se sientan mágicas, le recomiendo leer el CÓDIGO de Charles Petzold y / o The Elements of Computing Systems . Con solo un conocimiento básico de programación, estos libros maravillosamente accesibles lo harán comprender las computadoras de arriba a abajo. Obviamente, uno no puede obtener una compensación. sci. o título 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!
fuente
Un humano lo hizo. Lea sobre el sistema A-0 :
fuente
Los primeros programas se escribieron en código de máquina (no en lenguaje ensamblador): números reales conectados a la memoria de la computadora mediante interruptores. Hemos recorrido un largo camino ...
A veces esto todavía sucede en pequeña medida: parchear pequeños fragmentos de código o crear troncos. Recuerdo marcar números en cadenas básicas que luego se ejecutaron como subrutinas pequeñas y rápidas en los primeros micros. También recuerdo cambiar los interruptores en el panel frontal de un PDP-11 para ingresar un programa de cargador de arranque en su memoria para un curso universitario.
Estos programas a veces se utilizarían para procesar archivos de texto para crear otros programas, y se crearon lenguajes de programación voila.
fuente