¿Cómo se escribió el primer compilador de C?

2 minutos de lectura

avatar de usuario
Jakaran SP

¿Es cierto que el primer compilador de C se escribió en C? Entonces, ¿cómo se ejecutó y compiló? ¿O este compilador fue escrito en lenguaje ensamblador?

  • ¿Qué c-compilador?

    – nic

    8 de agosto de 2013 a las 12:01

  • arranque

    – PP

    8 de agosto de 2013 a las 12:01

  • Tarjetas perforadas. Es por eso int está implícito, por lo que ahorra agujeros.

    – KerrekSB

    8 de agosto de 2013 a las 12:03

  • @H2CO3 el huevo fue primero. Pero cuál fue primero, el pollo el huevo o la gallina? 😉

    – chux – Reincorporar a Monica

    8 de agosto de 2013 a las 12:06

  • ¡No sabes que está escrito en emacs lisp! Mx construir-c-compilador

    – Skizz

    8 de agosto de 2013 a las 12:28

avatar de usuario
Hans Passant

Está bastante bien descrito en El artículo de Dennis Ritchie de la historia del lenguaje C.

Dando solo un resumen de lo que escribió allí, use su artículo para los detalles más finos. C comenzó con el lenguaje BCPL, Ken Thomson tenía acceso a un compilador que se ejecutaba en su marco principal General Electrics 635. Descontento con el lenguaje, Thomson usó BCPL para escribir un compilador para el lenguaje B, un paso evolutivo más allá de BCPL que eliminó algunos de los problemas técnicos de BCPL.

Usaron B para crear programas en su minicomputadora PDP-7, aunque la mayoría de ellos eran poco más que programas de juguete, la máquina tenía capacidades de hardware muy restringidas. Un paso importante que dio Thomson fue reescribir el compilador B en B mismo. Un paso de arranque común.

Luego, ese compilador se ajustó gradualmente, a través de un paso intermedio de corta duración llamado NB (Nueva B) para comenzar a parecerse a C. La minicomputadora PDP-11 fue fundamental en ese paso, dándoles suficiente espacio para mejorar el lenguaje y el compilador.

  • Alguien puso una de las primeras versiones del PDP-11 de Dennis Ritchie en github para la posteridad: github.com/mortdeus/legacy-cc fuente

    – seje

    8 de agosto de 2013 a las 15:39


  • Guau. Parece un truco interesante 🙂 (Por un momento pensé que era señal de recolección de basura en el compilador efímero de C :<)

    – seje

    8 de agosto de 2013 a las 23:32

  • El enlace de arriba está roto; para la posteridad, creo que este es el mismo artículo: bell-labs.com/usr/dmr/www/chist.html

    – tonysdg

    21 de enero de 2016 a las 19:36

avatar de usuario
Belkacem REBBOUH

El primer compilador de C no se escribió en C, por lo general, cuando escribimos un compilador, usamos lenguaje ensamblador u otro lenguaje de programación, y es común que después de la primera compilación, el compilador se reescriba en su idioma nativo.

Hay muchos lenguajes de programación que se han escrito en C y luego se han reescrito en su idioma nativo: Java, por ejemplo, Ada…

  • En realidad, no sé cuándo fue la última vez que se escribió un compilador en ensamblador. Creo que pasó de moda rápidamente a mediados de la década de 1960. Si bien al menos varios de los compiladores de la década de 1950 se escribieron en ensamblador (el famoso primer compilador de Hopper para el lenguaje A-0 en 1952 e IBM (Backus et team) FORTRAN en 1957. En 1960 al menos un compilador, a saber, el compilador COBOL para UNIVAC-II fue escrito en FLOW-MATE.Src: Historia de la construcción del compilador Desde entonces, la mayoría se arrancó a partir de lenguajes de alto nivel existentes.

    – mctylr

    8 de agosto de 2013 a las 19:26

  • Hola, en el compilador heredado de c: github.com/mortdeus/legacy-cc podemos ver que el punto de entrada es una macro escrita en ensamblador, y el código base es 17% ensamblador.

    – Belkacem REBBOUH

    9 de agosto de 2013 a las 14:15

  • También he hojeado el cc heredado, creo que la parte de ensamblaje es necesaria porque tiene que generar ensamblaje en algún momento. Creo que el ensamblaje en legacy-cc son principalmente las plantillas que generará el compilador. Pero también me gustaría señalar que el ensamblaje no debe evitarse necesariamente como una plaga, ¡se dice que Chris Sawyer desarrolló Roller Coaster Tycoon en ensamblaje! Si dominas el idioma, también puede ser productivo.

    – v.oddou

    28 de marzo de 2014 a las 0:53

  • Los primeros compiladores de Ada no estaban escritos en C. El que trabajé (en TeleSoft) estaba escrito en Pascal y luego se volvió a implementar en Ada. Creo que el primer compilador Ada validado fue escrito en SETL.

    –Keith Thompson

    08/02/2015 a las 18:55

  • solo un detalle menor: el lenguaje java tiene un compilador escrito en java y una máquina virtual escrita en C++.

    – Alejandro Oh

    08/02/2015 a las 20:35

avatar de usuario
egipto

Leyendo la nota de Dennis Ritchie sobre primitivoC indica que, al igual que el huevo y la gallina, C evolucionó a partir de un lenguaje precursor junto con su propio compilador mediante arranque. Los plazos de especiación fueron más rápidos que para Gallus gallus domesticus.

Incluso se puede ver el código fuente del compilador atrapado en medio de la agitación evolutiva. La nota enlaza con dos instantáneas restauradas a partir de copias de seguridad en cinta. Este código también tiene ha sido colocado en github. Estas instantáneas constituyen fósiles intermedios, años antes de la sintaxis K&R. La descripción de Dennis de una de las cintas muestra que es un cuadro congelado de estructuras que se están arrancando:

“prestruct-c” es una copia del compilador justo antes de que comenzara a cambiarlo para usar estructuras en sí.

En otras palabras, el compilador había sido aumentado para apoyo estructuras pero aún no usar a ellos. Un buen momento para hacer una copia de seguridad en cinta…

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad