Qu'est-ce qui est arrivé en premier, le compilateur ou la source?

17

Je suis curieux de la naissance du compilateur. Comment la programmation a-t-elle commencé? Les gens ont-ils d'abord construit du matériel qui reconnaissait un certain ensemble de commandes, ou ont-ils défini un langage, puis construit du matériel autour de lui? Et sur une note connexe, quel a été le premier langage de programmation?

David Cowden
la source
1
L'une des sous-questions était une question à part entière: quel était le premier langage de programmation écrit pour les ordinateurs? .
Mark Booth
C'est sûrement quelque chose que vous pourriez rechercher ?
Caleb
@Caleb a lu les commentaires dans la réponse de SkyDan ..
David Cowden
2
@Brian Hypothèse valide, mais s'avère fausse. Ce n'est pas du tout un problème d'oeufs de poule, il y a une réponse très claire (indice: le plus voté ci-dessous est faux). Le code source à long antidate compilateurs.
Konrad Rudolph

Réponses:

30

Cela a une réponse très claire, en fait: le code source est venu en premier - par une grande marge.

Avant de donner les détails techniques, un peu de recul:

Les premiers langages de programmation ont tous été traduits à la main en langage machine ou assembleur . L'idée d'utiliser un logiciel pour automatiser cette traduction (via un compilateur ou un évaluateur) est toujours venue plus tard et était loin d'être intuitive.

Considérez cette citation de l'article de Wikipedia sur FORTRAN qui illustre les réticences auxquelles les compilateurs ont dû faire face:

… Le premier compilateur FORTRAN [a été] livré en avril 1957. Il s'agissait du premier compilateur d'optimisation, car les clients hésitaient à utiliser un langage de programmation de haut niveau à moins que son compilateur puisse générer du code dont les performances étaient comparables à celles d'un langage d'assemblage codé à la main . [c'est moi qui souligne]

=> Au moment où le compilateur FORTRAN est arrivé sur le marché (1957), les gens programmaient déjà avec bonheur en langage assembleur et en FORTRAN.

Le cas était similaire pour LISP (de Hackers & Painters ):

Steve Russell a dit, regardez, pourquoi je ne programme pas cet eval…, et je lui ai dit, ho, ho, vous confondez théorie et pratique, cet eval est destiné à la lecture, pas à l'informatique. Mais il est allé de l'avant et l'a fait. Autrement dit, il a compilé l'eval dans mon article en code machine IBM 704, corrigeant le bug, puis l'a annoncé comme un interpréteur Lisp, ce qui était certainement le cas. Donc à ce moment-là, Lisp avait essentiellement la forme qu'il a aujourd'hui ... "

Encore une fois, non seulement le code source (dans LISP) est antérieur à l'interpréteur, ce dernier n'était même pas implicite dans le premier.

Mais ces développements sont relativement tardifs. Même sans tenir compte du moteur analytique de Charles Babbage et du premier programme connexe d'Ada Lovelace , il y avait des langages de programmation au 20e siècle qui étaient antérieurs aux compilateurs:

Plankalkül de Konrad Zuse et la construction mathématique du λ-calcul introduite par Alonzo Church. Ces deux langages de programmation sont indubitablement spécifiés formellement, mais aucun n'avait de compilateur à l'époque.

Pour mettre cela en perspective, le λ-calcul date des années 1930 et Plankalkül a été développé vers 1945. En revanche, le premier compilateur FORTRAN est sorti en 1957 (mais encore trois ans après que FORTRAN ait été spécifié).

Konrad Rudolph
la source
Très bonne réponse! Je ne savais pas que le code était compilé à la main, mais cela a du sens.
ckb
10

La programmation a commencé avec des personnes écrivant le code machine directement dans la mémoire, sur des cartes perforées et du ruban de papier ou même en court-circuitant des liens sur un panneau de brassage. Il est difficile de dire si le matériel a été construit en fonction des besoins du logiciel ou vice versa. Certainement la conception la plus ancienne d'un ordinateur programmable complet , le moteur analytique de Babbage , antérieur au premier programme documenté d' Ada Lovelace .

Quant au premier langage de programmation, j'ai soutenu qu'il s'agissait du langage machine du moteur analytique de Babbage (d'après la question Quel a été le premier langage de programmation écrit pour les ordinateurs? )

Pour répondre à la question dans le titre de votre question, étant donné que le langage d'assemblage est du code source et que les langages d'assemblage sont antérieurs aux langages de haut niveau qui pourraient être compilés dans l'assembleur, le code source est venu en premier.

De plus, un compilateur n'a jamais été nécessaire , juste pratique.

Il est parfaitement possible d'écrire un logiciel directement dans la mémoire si vous avez mémorisé les tables de code op appropriées . En fait, certains premiers ordinateurs exigeaient que l'utilisateur saisisse le code d'amorçage sur le clavier hexadécimal du panneau avant pour les amorcer, mais vous pouviez taper n'importe quel code que vous vouliez et il serait exécuté.

Certes, à mesure que le processeur devient plus complexe, cela devient plus difficile, mais un jeu d'instructions simple comme 6809 ou Z80 (en ignorant tous les modes indexés étranges) est relativement facile à programmer même sans assembleur , sans parler d'un compilateur à partir d'un langage de haut niveau.

Si le moteur analytique de Babbage avait jamais été construit, je suis sûr qu'il y aurait eu un Steampunk Mel , écrivant des programmes optimisés directement sur des cartes métier.

Mark Booth
la source
1
Avez-vous réellement lu la définition du code source sur le lien wikipedia que vous avez publié? Comme indiqué ci-dessus, le code machine n'est pas un code source. Et code machine! = Assemblage. Le code machine était là en premier.
occulus
@MarkBooth Je pense que MIPS et AVR sont encore plus simples ..
David Cowden
4
@occulus - En quoi le langage assembleur n'est-il pas du code source ? Le langage d'assemblage mappe une instruction de langage d'assemblage à un code machine et peut être assemblé de manière triviale dans votre tête, si vous connaissez vos tables de code opérationnel. Honnêtement, les enfants ces jours-ci ... * 8 ')
Mark Booth
1
Pour moi, le langage d'assemblage l' est movl $0, -20(%rbp), alors que le code machine l' est C745EC00000000, et c'est ce dernier (enfin, quelque chose comme ça) qui a d'abord été entré manuellement ou lu sur du papier. Quant à savoir si le code machine compte comme code source , j'ai tendance à dire "tout ce qui fait flotter votre bateau". Si vous l'activez manuellement, alors oui, je dirais que cela compte.
John Bode
@JohnBode - Oh je suis d'accord, mais étant donné la correspondance 1: 1 entre les instructions d'assemblage et les instructions de code machine, l'assemblage n'est qu'une question de traduction mécanique (assemblage), la logique est identique. La compilation implique une traduction beaucoup plus complexe: beaucoup (même si Occam est un langage de haut niveau et de nombreuses instructions Occam mappées 1: 1 sur des instructions Transputer en raison de son architecture MISC . * 8 ').
Mark Booth
6

Le compilateur était le premier . Il a été directement écrit en code machine, car la source ne pouvait pas être compilée sans compilateur.

Des articles de Wikipédia comme celui-ci sur les langages informatiques peuvent répondre à la plupart des questions. Sinon, choisissez simplement l'un des livres de Tanenbaum, comme Structured Computer Organization , qui peut répondre à plus de questions que vous ne pouvez même en poser :)

Je ne peux rien dire de plus précis, car votre question est trop large.

hellodanylo
la source
20
On pourrait également faire valoir que la source était la première, car pour les tout premiers "ordinateurs", la source était équivalente au binaire (c'est-à-dire qu'ils étaient programmés directement dans le langage lisible par machine).
Joachim Sauer
5
@Joachim Par définition, le code source est un texte lisible par l'homme qui est traduit par le compilateur en code machine. Le code machine lui-même n'est donc pas du code source.
hellodanylo
11
Le compilateur était le premier, mais il a été mis en œuvre dans les réseaux de neurones biologiques.
Den
8
Pourquoi est-ce si fortement voté? C'est faux. Le code source dans les langages de haut niveau (notamment λ-calcul, Plankalkül et LISP) est antérieur aux compilateurs et aux interprètes. Cela ne tient même pas compte des programmes semi-formels qu'Ada Lovelace a écrits.
Konrad Rudolph
4
@SkyDan Quelle est alors votre définition? Je ne connais aucune définition sensée pour laquelle votre réponse est correcte (à la fois pour «compilateur» et «code source dans un langage de haut niveau» - sans parler de bas niveau).
Konrad Rudolph
4

Les interprètes existaient avant les compilateurs, donc le code source existait avant les compilateurs.

Il y a des documents très intéressants sur l'histoire de l' informatique ici . Le code source du compilateur FORTRAN II est censé être disponible, mais ces liens sont rompus.

Cet article , de 1954, décrit l'interprète Whirlwhind.

Jon Strayer
la source
1

Cette question pivote fortement sur notre interprétation sémantique du «code source». Si nous le définissons comme «des instructions informatiques basées sur du texte qui sont compilées», alors un compilateur est probablement venu en premier.

Je suis plus enclin à aller avec quelque chose de plus faisant autorité, comme le document de Mark Harman "Pourquoi l'analyse et la manipulation du code source sera toujours important" présenté à la dixième conférence de travail internationale de l'IEEE sur l'analyse et la manipulation du code source

Définition 1 (code source): Dans un souci de clarté, le «code source» désigne toute description entièrement exécutable d'un système logiciel. Il est donc conçu de manière à inclure du code machine, des langages de très haut niveau et des représentations graphiques exécutables de systèmes.

Et je pense que votre réponse est implicite dans cette définition - le code source est certainement venu en premier.

Kirk Broadhurst
la source
"Vraisemblablement, un compilateur est venu en premier" - seulement si vous définissez "compilé" comme "traduit par un outil automatique", plutôt que "traduit en code machine à la main".
Konrad Rudolph
Papier très intéressant. J'aime cette définition du code source - même si cela fait de ma question une non-question vraiment ..
David Cowden
@KonradRudolph n'est pas l'unité qui effectue la compilation, que ce soit une machine, une intervention humaine ou divine, appelée «un compilateur»?
Kirk Broadhurst
0

Les algorithmes ont été triés sur papier, puis les alus ont été câblés physiquement / mécaniquement (fils en mouvement). pour changer le programme, vous déplacez les fils et exécutez à nouveau.

Plus tard, le langage d'assemblage a été trié sur papier, traduit en code machine à la main, puis en utilisant des commutateurs, etc. pour l'introduire dans le bélier. Ou des cartes perforées, etc. Finalement, vous pouvez créer un assembleur, puis vous pouvez programmer en assembleur et non du code machine, puis vous pouvez créer un compilateur. Finalement, vous pouvez amorcer ce compilateur. Et faire de nouveaux langages et de nouveaux compilateurs, etc.

La première langue n'était pas une langue, plus tard la première langue était le langage d'assemblage. pour chaque processeur, la première langue est le langage d'assemblage (dérivé du code machine). Le jeu d'instructions est conçu d'abord puis le matériel pour l'implémenter puis l'assembleur, puis les compilateurs.

old_timer
la source