188 votes

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

J'ai entendu parler de la poule et de l'œuf et du démarrage. J'ai quelques questions.

Qui a écrit le premier compilateur qui a converti quelque chose en instructions binaires ?

L'assemblage est-il compilé ou traduit en instructions binaires ?

...j'aurais du mal à croire qu'ils aient écrit un compilateur en binaire.

0 votes

4 votes

@nawfal, il s'agit d'une différence entre un nouveau langage de programmation et le premier compilateur, donc non - ce n'est pas un doublon

0 votes

@PauliSudarshanTerho quelle est la différence ? L'esprit des questions est le même. Vous ne pouvez pas écrire un langage de programmation, cette question parle à son tour de premier compilateur.

145voto

Amber Points 159296

Les instructions d'assemblage sont (généralement) une correspondance directe avec les opcodes, qui sont des valeurs (multi-)octets du code machine pouvant être interprétées directement par le processeur. Il est tout à fait possible d'écrire un programme en opcodes directement en les recherchant dans une table (telle que celui-ci pour le microprocesseur 6039 par exemple) qui les liste avec les instructions d'assemblage correspondantes, et de déterminer à la main les adresses/offsets mémoire pour des choses comme les sauts.

Les premiers programmes ont été réalisés exactement de cette manière - des opcodes écrits à la main.

Cependant, la plupart du temps, il est plus simple d'utiliser un assembleur pour "compiler" le code d'assemblage, qui fait automatiquement ces recherches d'opcodes, et qui est également utile pour calculer les adresses/offsets pour les étiquettes de saut nommées, et ainsi de suite.

Les premiers assembleurs étaient écrits à la main. Ces assembleurs pouvaient ensuite être utilisés pour assembler des assembleurs plus compliqués, qui pouvaient ensuite être utilisés pour assembler des compilateurs écrits pour des langages de plus haut niveau, et ainsi de suite. Ce processus d'écriture itérative des outils pour simplifier la création de la prochaine série d'outils est appelé (comme mentionné par David Rabinowitz dans sa réponse) bootstrapping .

18 votes

Mon premier ordinateur était une machine basée sur le Z80, dont le moniteur ROM m'a obligé à assembler à la main un chargeur d'amorçage pour faire apparaître les bases d'un système d'exploitation (CP/M) afin de pouvoir assembler le reste dudit système d'exploitation en un système fonctionnel, avec un chargeur d'amorçage sur disque. Une époque amusante. Donc oui, vous pouvez assembler à la main très bien. C'est lent, douloureux et sujet aux erreurs (c'est pourquoi nous avons automatisé les choses) mais c'est possible.

0 votes

En premier lien est cassé.

0 votes

Écrit à la main. Comment ? Câblage ou cartes perforées ? Je suppose qu'ils avaient des claviers hexadécimaux.

49voto

David Rabinowitz Points 14133

Veuillez lire les informations suivantes amorçage du compilateur y l'histoire de l'écriture des compilateurs

L'idée est d'écrire un compilateur très simple directement en code machine, de l'utiliser pour écrire un compilateur plus sophistiqué, d'utiliser le second pour en construire un troisième et ainsi de suite jusqu'à obtenir un compilateur complet.

40voto

Jim Balter Points 9250

Les œufs ont longtemps précédé les poules. La réponse à la plupart des problèmes de "la poule et l'œuf" est la même : l'évolution. Certaines personnes ont également du mal à croire à l'évolution biologique, mais l'incrédulité n'est pas un argument (googlez argumentum ad ignorantiam).

Pour répondre directement à votre question : le premier compilateur a été écrit (par un humain) dans un fichier de type langage assembleur -- un programme appelé assembleur traduirait le langage d'assemblage en binaire ; il s'agit d'un processus beaucoup plus simple que la compilation car le langage d'assemblage n'est qu'une forme symbolique du langage machine qui utilise des noms d'opcode au lieu de chiffres, représente les adresses par des symboles, et ainsi de suite. De nombreux compilateurs ultérieurs ont également été écrits en langage d'assemblage. Mais le premier compilateur C était un compilateur B modifié, qui était écrit en B . Le premier compilateur B a été écrit en TMG . Le compilateur TMG utilisé pour compiler ce compilateur B était écrit en langage d'assemblage PDP-7.

26voto

Dinah Points 15711

Woz a déclaré dans l'une de ses conférences publiques qu'à ses débuts, il n'avait pas les moyens d'acheter un compilateur et qu'il compilait donc en binaire à la main sur du papier. Si vous voulez voir quelque chose d'encore plus sauvage, lisez les conditions dans lesquelles Bill Gates et Paul Allen ont écrit le BASIC pour l'Altair 8800.

En ce qui concerne "l'écriture d'un ordinateur en binaire", prenez un peu de recul par rapport au métier de programmeur et pensez à ce qu'étaient les premiers ordinateurs. Le haut niveau n'existait pas encore - vous pensiez à tout en bas niveau parce que c'était tout ce qu'il y avait. Vous aviez du matériel capable de faire de la logique et de l'arithmétique de base que vous manipuliez via le code machine (qui n'est qu'un assemblage compilé - Amber explique pourquoi cette partie n'est pas difficile à faire à la main) et vous vouliez que ce matériel réalise certaines prouesses mathématiques. Vous ne vous souciez pas du système d'exploitation inexistant, vous dites simplement au matériel (en assembleur) comment manipuler les chiffres que vous lui donnez. C'était tout simplement une grosse calculatrice. L'ordinateur d'aujourd'hui a été construit une abstraction à la fois.

Si vous voulez faire tomber la barrière qui fait que les ordinateurs restent magiques, je vous recommande vivement de lire CODE par Charles Petzold et/ou Les éléments des systèmes informatiques . Avec une simple connaissance de base de la programmation, ces livres merveilleusement accessibles vous permettront de comprendre les ordinateurs de fond en comble. Il est évident que l'on ne peut pas obtenir un diplôme de sciences informatiques ou d'ingénierie électrique après seulement deux livres, mais je peux dire, en tant que programmeur autodidacte qui n'a pas eu accès à la formation formelle, que ces livres m'ont fait vibrer !

2 votes

Écrire l'interpréteur BASIC de l'Altair après avoir fait le discours de vente ? Coder le bootstrapper dans l'avion pour Albuquerque ? Cela semble un peu ridicule. Et amusant.

2 votes

@Shurane : ha ! Ces points sont également pertinents, mais pour moi, les détails de la fabrication de l'interpréteur BASIC et la façon dont le groupe l'a fait tenir dans un espace minuscule est une chose de beauté et de capacité de programmation stupéfiante.

11voto

Michael Burr Points 181287

Les premiers programmes étaient écrits en code machine (et non en langage d'assemblage) - des chiffres réels insérés dans la mémoire de l'ordinateur à l'aide de commutateurs. Nous avons parcouru un long chemin...

Cela se produit encore parfois dans une faible mesure - pour corriger de petits bouts de code ou créer des thunes. Je me souviens avoir saisi des nombres dans des chaînes Basic qui étaient ensuite exécutées comme de petits sous-programmes rapides sur les premiers micros. Je me souviens aussi d'avoir basculé des commutateurs sur le panneau avant d'un PDP-11 pour entrer un programme de démarrage dans sa mémoire pour un cours universitaire.

Ces programmes étaient parfois utilisés pour traiter des fichiers texte afin de créer d'autres programmes, et voilà que les langages de programmation étaient créés.

0 votes

La question porte sur le premier compilateur, et non sur les premiers programmes en général, même si les programmes sont parfois des compilateurs ; l'histoire des deux n'est pas la même. (Une analogie : la réponse à la question de savoir quand les premiers animaux sont apparus sur la Terre n'est pas la réponse à la question de savoir quand les premiers chats sont apparus sur la Terre, bien que les chats soient des animaux).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X