Code automatique - Autocode

Autocode est le nom d'une famille de «systèmes de codage simplifiés», appelés plus tard langages de programmation , conçus dans les années 1950 et 1960 pour une série d' ordinateurs numériques dans les universités de Manchester , Cambridge et Londres . L'autocode était un terme générique; les autocodes des différentes machines n'étaient pas nécessairement étroitement liés comme le sont, par exemple, les différentes versions du seul langage Fortran .

Aujourd'hui, le terme est utilisé pour désigner la famille des premières langues issues des systèmes de codage automatique Manchester Mark 1 , qui étaient généralement similaires. Dans les années 1960, le terme autocodeurs était utilisé de manière plus générique pour désigner tout langage de programmation de haut niveau utilisant un compilateur . COBOL et Fortran sont des exemples de langages appelés autocodes .

Le code automatique de Glennie

Le premier autocode et son compilateur ont été développés par Alick Glennie en 1952 pour l'ordinateur Mark 1 de l'Université de Manchester et sont considérés par certains comme le premier langage de programmation compilé . Son objectif principal était une meilleure compréhension de la programmation des machines Mark 1, connues pour leur code machine particulièrement abstrus. Bien que le langage résultant était beaucoup plus clair que le code machine, il était encore très dépendant de la machine.

Voici un exemple de la fonction Autocode de Glennie qui calcule la formule: . L'exemple omet l'instruction de mise à l'échelle nécessaire pour placer des entiers dans des variables et suppose que les résultats de la multiplication tiennent dans l'accumulateur inférieur.

c@VA t@IC x@½C y@RC z@NC
INTEGERS +5 →c           # Put 5 into c
      →t                 # Load argument from lower accumulator
                         # to variable t
   +t     TESTA Z        # Put |t| into lower accumulator
   -t
          ENTRY Z
SUBROUTINE 6 →z          # Run square root subroutine on
                         # lower accumulator value
                         # and put the result into z
  +tt →y →x              # Calculate t^3 and put it into x 
  +tx →y →x
+z+cx   CLOSE WRITE 1    # Put z + (c * x) into
                         # lower accumulator
                         # and return

Le manuel de l'utilisateur du compilateur de code automatique de Glennie mentionnait que "la perte d'efficacité ne dépassait pas 10%".

L'impact du code automatique de Glennie sur les habitudes de programmation des autres utilisateurs de Manchester était négligeable. Cela n'a même pas été mentionné dans l'article de Brooker de 1958 intitulé "Les programmes de codage automatique développés pour les ordinateurs de l'Université de Manchester".

Marquez 1 Autocode

Le deuxième autocode du Mark 1 a été planifié en 1954 et développé par RA Brooker en 1955 et s'appelait "Mark 1 Autocode". Le langage était presque indépendant de la machine et avait une arithmétique à virgule flottante, contrairement au premier. D'un autre côté, il n'autorisait qu'une seule opération par ligne, offrait peu de noms mnémotechniques et n'avait aucun moyen de définir des sous-programmes utilisateurs.

Un exemple de code qui charge un tableau de taille 11 de nombres à virgule flottante à partir de l'entrée ressemblerait à ceci

      n1 = 1         
1    vn1 = I         reads input into v[n[1]]
      n1 = n1 + 1
   j1,11 ≥ n1        jumps to 1 if n[1] ≤ 11

L'autocode de Brooker a supprimé deux difficultés principales du programmeur de Mark 1: la mise à l'échelle et la gestion du stockage à deux niveaux. Contrairement à son prédécesseur, il a été fortement utilisé.

Codes automatiques ultérieurs

Brooker a également développé un autocode pour le Ferranti Mercury dans les années 1950 en collaboration avec l'Université de Manchester. Mercury Autocode avait un répertoire limité de variables az et a'-z 'et, à certains égards, ressemblait aux premières versions du dernier langage BASIC de Dartmouth . Il est antérieur à ALGOL , n'ayant pas de concept de piles et donc pas de récursivité ou de tableaux alloués dynamiquement . Afin de surmonter la taille relativement petite des magasins disponibles sur Mercury, les grands programmes ont été rédigés sous forme de «chapitres» distincts, dont chacun constituait une superposition . Une certaine compétence était nécessaire pour minimiser les longs transferts de contrôle entre les chapitres. Ce concept de superpositions du tambour sous le contrôle de l'utilisateur est devenu courant jusqu'à ce que la mémoire virtuelle devienne disponible dans les machines ultérieures. Des dialectes légèrement différents du Mercury Autocode ont été mis en œuvre pour le Ferranti Atlas (distinct du dernier Atlas Autocode ) et la gamme ICT 1300 et 1900 .

La version de l' EDSAC 2 a été conçue par David Hartley du laboratoire mathématique de l' Université de Cambridge en 1961. Connu sous le nom de EDSAC 2 Autocode, il s'agissait d'un développement direct de Mercury Autocode adapté aux circonstances locales, et a été noté pour son optimisation du code objet et la source- des diagnostics de langage avancés pour l’époque. Une version a été développée pour le successeur Titan (le prototype de l'ordinateur Atlas 2) en tant que solution provisoire tandis qu'un langage plus avancé connu sous le nom de CPL était en cours de développement. CPL n'a jamais été terminé mais donner lieu à BCPL (développé par M. Richards), qui à son tour conduit à B et , finalement , C . Fil de développement contemporain mais distinct, Atlas Autocode a été développé pour la machine Atlas 1 de l'Université de Manchester .

Les références

Sources

  • Campbell-Kelly, Martin (1980). "Programmation de la marque 1: Activité de programmation précoce à l'Université de Manchester". Annales de l'histoire de l'informatique . IEEE. 2 (2): 130-167. doi : 10.1109 / MAHC.1980.10018 .
  • Garcia Camarero, Ernesto (1961). AUTOCODE un sistema simplificado de codificacion para la computadora MERCURY (en espagnol). Universidad de Buenos Aires. p. 70.
  • Londres, Keith (1968). Introduction aux ordinateurs . p. 261.
  • Knuth, Donald E .; Pardo, Luis Trabb (1976). "Développement précoce des langages de programmation". Université de Stanford, Département d'informatique.

Lectures complémentaires