¿Cuál es la historia del compilador de C?

23

Cuando decimos que "Dennis Ritchie desarrolló el lenguaje C", ¿queremos decir que ha creado un compilador (utilizando un lenguaje 'ya desarrollado') que puede compilar el código fuente escrito en lenguaje C? en caso afirmativo, ¿cuál fue el lenguaje que usó para escribir el primer compilador de C? Entiendo que un compilador es un programa y podemos crear otro compilador para lenguaje C usando el compilador de C actualmente disponible. ¿Es eso correcto?

KawaiKx
fuente

Respuestas:

23

De wiki :

Ritchie es mejor conocido como el creador del lenguaje de programación C y un desarrollador clave del sistema operativo Unix, y como coautor del libro definitivo sobre C.

También de wiki :

El primer compilador de C escrito por Dennis Ritchie utilizó un analizador de descenso recursivo, incorporó conocimientos específicos sobre el PDP-11 y se basó en un optimizador opcional específico de la máquina para mejorar el código del lenguaje ensamblador que generó.

El primer compilador de C también fue escrito por él, en conjunto.

Esta página de bell-labs responde la mayoría de sus preguntas.

karlphillip
fuente
El primer enlace está roto.
Mahmoud Hossam
IIRC, C se basó en un lenguaje anterior llamado B, y Unix se basó en un sistema operativo anterior llamado Multics. Sería una suposición obvia que estos se usaron para arrancar el desarrollo, pero por lo que he leído, es una suposición errónea . El desarrollo temprano de Unix estaba en ensamblador, hasta que C se hizo cargo, por ejemplo.
Steve314
2
IIRC, B era una versión simplificada de BCPL, que era un lenguaje de programación de sistemas temprano. Creo que gran parte del trabajo inicial de Unix se describió utilizando B, pero no estoy seguro de que alguna vez haya un compilador de Unix real para él (posiblemente un compilador cruzado que se ejecutó en otra cosa).
TMN
Ouch . . escribir un compilador en lenguaje ensamblador.
compman
66
@compman En algún momento, alguien tiene que escribir un compilador en ensamblado. ¿De qué otra manera puede iniciar un compilador en un HLL?
Richard Gadsden
9

Mira esto para una lección de historia: http://www.livinginternet.com/i/iw_unix_c.htm

Cuando la computadora PDP-11 llegó a Bell Labs, Dennis Ritchie se basó en B para crear un nuevo lenguaje llamado C que heredó el gusto de Thompson por la sintaxis concisa, y tenía una poderosa combinación de funcionalidad de alto nivel y las características detalladas requeridas para programar una operación sistema. La mayoría de los componentes de Unix fueron finalmente reescritos en C, culminando con el núcleo en 1973

También esto puede ser interesante: http://cm.bell-labs.com/cm/cs/who/dmr/chist.html

abalogh
fuente
1
AFAIK, "construido en" como en "diseño basado en diseño de" , no como "compilado usando" .
vartec
8

Dennis Ritchie usaba bootstrapping . Bootstrapping es una idea simple, donde desarrollas un compilador inicial simple en ensamblaje, luego usas este compilador simple para compilar tu compilador completo escrito en (un subconjunto de) tu idioma de destino. Así es como Ritchie creó muy temprano el último compilador de 120c .

vartec
fuente
2

Este artículo debería responder a su pregunta:

http://www.faqs.org/docs/artu/c_evolution.html

La historia de C está ligada al lenguaje B, para el cual Ken Thompson desarrolló un intérprete. Ritchie lo usó para las primeras etapas del desarrollo de C.

Macmade
fuente
2

C fue diseñado para permitir portar Unix a otras plataformas sin tener que reescribir todo el código de ensamblaje para la nueva plataforma.

De ahí el dicho común de que "C es un ensamblador portátil". Esto refleja que C está intencionalmente muy cerca de una CPU (desde alrededor de 1970) en el nivel de abstracción y también es la razón por la que la mayoría del software incorporado está escrito en algún tipo de C.

Entonces, C está íntimamente conectado con Unix, y la gente de Unix escribió el primer compilador de C basado en un trabajo anterior para hacer lo que necesitaban.

Tenga en cuenta que Kernigan y Richie escribieron un excelente libro sobre C, que es probablemente una de las obras de referencia más influyentes en un lenguaje de computadora, ya que era tan claro y conciso que la mayoría de los lectores podían aprender temas avanzados como punteros y la recursividad.


fuente