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

J’ai entendu parler de la poule et de l’oeuf et du bootstrap. J’ai quelques questions.

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

L’assemblage est-il compilé ou traduit en instructions binarys?

… Je trouverais difficile de croire qu’ils ont écrit un compilateur en binary.

    Les instructions d’assemblage sont (généralement) un mappage direct sur les opcodes, qui sont des valeurs (multi) octets de code machine pouvant être directement interprétées par le processeur. Il est tout à fait possible d’écrire un programme directement dans les opcodes en les recherchant depuis une table (comme celle du microprocesseur 6039 , par exemple) qui les répertorie avec les instructions d’assemblage correspondantes et détermine manuellement les adresses / décalages de mémoire. comme des 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 “comstackr” du code d’assemblage, qui effectue automatiquement ces recherches d’opcode, tout en étant utile pour calculer les adresses / décalages pour les étiquettes de saut nommées, et cetera.

    Les premiers assembleurs ont été écrits à la main. Ces assembleurs pourraient alors ê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 prochain ensemble d’outils s’appelle (comme mentionné par David Rabinowitz dans sa réponse) le bootstrap .

    S’il vous plaît lire à propos de l’ initialisation du compilateur et l’historique de l’écriture du compilateur

    L’idée est d’écrire un compilateur très simple directement dans le code machine, de l’utiliser pour écrire un compilateur plus sophistiqué, d’utiliser le second pour créer un troisième et ainsi de suite jusqu’à avoir un compilateur complet.

    Les œufs ont longtemps précédé les poulets. La réponse à la plupart des problèmes de “poulet et œuf” est la même: l’évolution. Certaines personnes ont aussi 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) dans un langage d’assemblage – un programme appelé assembleur traduirait le langage d’assemblage en binary; c’est un processus beaucoup plus simple que la compilation car le langage d’assemblage n’est qu’une forme symbolique de langage machine qui utilise des noms d’opcode au lieu de nombres, représente des adresses avec des symboles, etc. De nombreux compilateurs ultérieurs ont également été écrits en langage assembleur. 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 comstackr ce compilateur B a été écrit en langage d’assemblage PDP-7.

    Woz a déclaré dans une de ses conférences publiques qu’au début, il n’avait pas les moyens de se payer un compilateur. Si vous voulez voir quelque chose de 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 binary”, évitez de devenir programmeur et réfléchissez à ce qu’étaient les premiers ordinateurs. Les choses de haut niveau n’existaient pas encore – vous pensiez à tout dans le bas niveau car c’était tout. Vous aviez du matériel capable de faire de la logique de base et de l’arithmétique que vous manipuliez via le code machine (qui est juste un assemblage compilé – Amber explique pourquoi cette partie n’est pas difficile à faire manuellement) et vous souhaitiez réaliser 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 l’assemblage) comment manipuler les nombres que vous alimentez. C’était une grosse calculasortingce. L’ordinateur d’aujourd’hui a été construit une abstraction à la fois.

    Si vous voulez briser la barrière qui empêche les ordinateurs de se sentir magiques, je recommande fortement de lire CODE par Charles Petzold et / ou The Elements of Computing Systems . Avec juste une connaissance de base de la programmation, ces livres merveilleusement accessibles vous feront comprendre les ordinateurs de haut en bas. De toute évidence, on ne peut pas obtenir de comp. sci. ou EE après seulement 2 livres, mais je peux dire en tant que programmeur autodidacte qui n’a pas suivi la formation formelle: ces livres ont secoué mon monde!

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

    Un humain a fait. Lisez à propos du système A-0 du système A-0 :

    En 1952, Grace complète son premier compilateur pour Sperry, connu sous le nom de A-0. Le système A-0 était un ensemble d’instructions pouvant traduire le code mathématique symbolique en langage machine. En produisant A-0, elle a pris toutes les sous-routines qu’elle avait collectées au fil des ans et les a mises sur bande. Chaque sous-programme recevait un numéro d’appel, de sorte que l’appareil pouvait le trouver sur la bande. “Tout ce que j’avais à faire était d’écrire un ensemble de numéros d’appel, laisser l’ordinateur les trouver sur la bande, les apporter et faire les ajouts. C’était le premier compilateur”, comme décrit par Grace.

    Les premiers programmes ont été écrits en code machine (pas en langage assembleur) – les nombres réels enfichés dans la mémoire de l’ordinateur à l’aide de commutateurs. Nous avons parcouru un long chemin …

    Parfois, cela arrive encore dans une petite mesure – pour patcher de petits bouts de code ou créer des thunks. Je me souviens d’avoir perforé des nombres dans des chaînes de base qui ont ensuite été exécutées en petites sous-routines rapides au début des micros. Je me souviens aussi des commutateurs sur le panneau avant d’un PDP-11 pour entrer un programme de chargeur de démarrage dans sa mémoire pour un cours universitaire.

    Ces programmes sont parfois utilisés pour traiter des fichiers texte pour créer d’autres programmes, et les langages de programmation sont créés.