web-dev-qa-db-fra.com

Comment le premier compilateur C a-t-il été écrit?

Est-il vrai que le premier compilateur C a été écrit en C lui-même? Alors, comment a-t-il été exécuté et compilé? Ou, ce compilateur a-t-il été écrit en langage assembleur?

48
Jaskaran S.P

Il est assez bien décrit dans Writeup de Dennis Ritchie de l'histoire du langage C.

Donnant juste un résumé de ce qu'il y a écrit, utilisez son article pour les détails. C a commencé avec le langage BCPL, Ken Thomson avait accès à un compilateur qui s'exécutait sur leur châssis principal General Electrics 635. Mécontent du langage, Thomson a utilisé BCPL pour écrire un compilateur pour le langage B, une étape évolutive au-delà de BCPL qui a supprimé certains des problèmes techniques de BCPL.

Ils ont utilisé B pour créer des programmes sur leur mini-ordinateur PDP-7, bien que la plupart d'entre eux ne soient guère plus que des programmes jouets, la machine avait des capacités matérielles très limitées. Une étape importante prise par Thomson a été de réécrire le compilateur B en B lui-même. Une étape d'amorçage commune.

Ce compilateur a ensuite été progressivement modifié, grâce à une étape intermédiaire de courte durée appelée NB (Nouveau B) pour commencer à ressembler à C. Le mini-ordinateur PDP-11 a joué un rôle déterminant dans cette étape, leur donnant suffisamment d'espace pour améliorer le langage et le compilateur.

74
Hans Passant

Le premier compilateur C n'a pas été écrit en C, généralement lors de l'écriture d'un compilateur, nous utilisons soit le langage d'assemblage, soit un autre langage de programmation, et il est courant qu'après la première compilation, le compilateur soit réécrit dans son langage natif.

Il y a beaucoup de langages de programmation qui ont été écrits en C puis réécrits dans leur langue maternelle: Java par exemple, Ada ...

19
Belkacem REBBOUH

La lecture de la note de Dennis Ritchie sur primevalC indique que, comme le poulet et l'oeuf, C a évolué à partir d'un langage précurseur avec son propre compilateur via bootstrapping. Les délais de spéciation ont été plus rapides que pour Gallus gallus domesticus.

On peut même voir le code source du compilateur pris au milieu de la tourmente évolutionnaire. La note renvoie à deux instantanés de celle-ci restaurés à partir de sauvegardes sur bande. Ce code a également placé sur github. Ces instantanés constituent des fossiles intermédiaires, des années avant la syntaxe K&R. La description de Dennis de l'une des bandes montre qu'il s'agit d'un arrêt sur image de structures en cours d'amorçage:

"prestruct-c" est une copie du compilateur juste avant que je commence à le changer pour utiliser les structures lui-même.

En d'autres termes, le compilateur a été augmenté pour prendre en charge les structures mais n'a pas encore utilisé leur. Un bon moment pour faire une sauvegarde sur bande ...

4
egyik