web-dev-qa-db-fra.com

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

J'ai entendu parler du poulet et de l'oeuf et du bootstrapping. J'ai quelques questions.

Qu'est-ce qui a écrit le premier compilateur qui a converti quelque chose en instructions binaires?

Assembly est-il compilé ou traduit en instructions binaires?

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

157
Shawn Mclean

Les instructions d'assemblage sont (généralement) un mappage direct sur des codes d'opération, qui sont des valeurs de (plusieurs) octets de code machine pouvant être interprétées directement par le processeur. Il est tout à fait possible d’écrire directement un programme en code opération en le cherchant dans une table (telle que celle-ci pour le microprocesseur 6039 , par exemple) qui les répertorie avec les instructions d’assemblage correspondantes. déterminer des adresses de mémoire/des décalages pour des choses comme des sauts.

Les premiers programmes ont été réalisés exactement de cette façon - 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 effectue automatiquement ces recherches d'opcode, tout en étant utile pour le calcul des adresses/décalages pour les étiquettes de saut nommées, et ainsi de suite.

Les premiers assembleurs ont été écrits à la main. Ces assembleurs pourraient ensuite être utilisés pour assembler des assembleurs plus complexes, qui pourraient ensuite être utilisés pour assembler des compilateurs écrits pour des langages de niveau supérieur, etc. Ce processus d’écriture itérative des outils pour simplifier la création du jeu d’outils suivant s’appelle (comme le mentionne David Rabinowitz dans sa réponse) bootstrapping .

128
Amber

Veuillez lire à propos de amorçage du compilateur et l'histoire de l'écriture du compilateur

L'idée est d'écrire un compilateur très simple directement dans le code machine, utilisez-le pour écrire un compilateur plus sophistiqué, utilisez le second pour en créer un troisième et ainsi de suite jusqu'à ce que vous puissiez avoir un compilateur complet.

41
David Rabinowitz

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

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

33
Jim Balter

Woz a déclaré dans un de ses entretiens publics que, à ses débuts, il ne pouvait pas se payer un compilateur, il a donc compilé binaire à la main sur papier. Si vous voulez voir quelque chose d'encore plus sauvage, lisez à propos des conditions dans lesquelles Bill Gates et Paul Allen ont écrit le BASIC pour le Altair 8800.

En ce qui concerne "écrire un ordinateur en binaire" - prenez du recul en tant que programmeur et réfléchissez à ce que furent les premiers ordinateurs. Le contenu de haut niveau n'existait pas encore - vous avez pensé à tout dans le niveau bas parce que c'était tout ce que c'était. Vous aviez du matériel capable de faire la logique de base et l'arithmétique que vous manipuliez via le code machine (qui vient d'être compilé Assembly - Amber explique pourquoi cette partie n'est pas difficile à faire à la main) et vous vouliez que ce matériel exécute certains exploits mathématiques. Vous ne vous êtes pas inquiété du système d'exploitation inexistant, vous venez de dire au matériel (dans Assembly) comment manipuler les numéros que vous lui transmettez. C'était une grosse calculatrice. L'ordinateur d'aujourd'hui a été construit une abstraction à la fois.

Si vous souhaitez supprimer la barrière qui maintient les ordinateurs magiques, je vous recommande vivement de lire CODE by Charles Petzold et/ou Les éléments des systèmes informatiques . Avec juste une connaissance de base de la programmation, ces livres merveilleusement accessibles vous permettront de comprendre les ordinateurs de haut en bas. De toute évidence, on ne peut pas obtenir de maquette. sci. ou EE degré après seulement 2 livres, mais je peux dire en tant que programmeur autodidacte qui a manqué la formation formelle: ces livres ont bouleversé mon monde!

24
Dinah

Qu'est-ce qui a écrit le premier compilateur qui a converti quelque chose en instructions binaires?

Un humain l'a fait. En savoir plus sur le système A- :

En 1952, Grace Hopper a terminé son premier compilateur pour Sperry, connu sous le nom de A-0. Le système A-0 était un ensemble d'instructions pouvant traduire un code mathématique symbolique en langage machine. En produisant A-0, elle a pris toutes les sous-routines qu'elle avait collectionnées au fil des ans et les a enregistrées. Un numéro d’appel a été attribué à chaque routine afin que l’appareil puisse le trouver sur la bande. "Tout ce que j'avais à faire, c'était d'écrire un ensemble de numéros d'appel, de laisser l'ordinateur les trouver sur la bande, de les ramener et de faire les ajouts. C'était le premier compilateur", comme décrit par Grace.

9
Sinan Ünür

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

Parfois, cela arrive encore dans une faible mesure: patcher de petits morceaux de code ou créer des thunks. Je me souviens d'avoir composé des nombres dans des chaînes de base qui ont ensuite été exécutées sous forme de petits sous-programmes rapides sur des micros précoces. Je me souviens également d'avoir basculé des commutateurs sur le panneau avant d'un PDP-11 pour entrer un programme d'amorçage 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 les langages de programmation suivants étaient créés.

8
Michael Burr