Autocode

langage de programmation

Le terme anglais autocode désigne une famille de « systèmes de codage simplifiés », conçus dans les années 1950 et 1960 pour une série d’ordinateurs destinés aux universités de Manchester, Cambridge, et Londres. Ces systèmes de codage ont plus tard été rebaptisés langages de haut niveau. Autocode était un terme générique ; les autocodes associés à différentes machines n’étaient pas nécessairement aussi étroitement liés les uns aux autres que le sont par exemple les différentes versions du langage FORTRAN. Dans les années 1960, les langages de haut niveau nécessitant un compilateur étaient plus communément appelés autocodes. Les langages COBOL et Fortran en sont des exemples.

L’autocode de Glennie

modifier

Le premier autocode et son compilateur ont été conçus par Alick Glennie (en) en 1952 à l’Université de Manchester pour l’ordinateur Mark 1[1]. Certains le reconnaissent d’ailleurs comme étant le premier langage de programmation compilé. Son principal objectif était de rendre compréhensible le langage de programmation de l’ordinateur, connu pour son inintelligibilité. Bien que le langage résultant fut beaucoup plus clair que le code de l’ordinateur, il était néanmoins encore très dépendant de ce dernier.

Le manuel d'utilisation du compilateur Autocode de Glennie indique “une perte d’efficacité inférieure à 10 %”. L'impact de l’autocode sur les habitudes de programmation des universitaires de Manchester était dérisoire. Ceci ne fut pas énoncé dans l’article de Brooker publié en 1958 intitulé “Programmes d’autocode développés pour les ordinateurs de l’Université de Manchester”. Ceci est probablement dû au fait qu’à l’époque le langage codé ne permettait pas de résoudre les problèmes affrontés par les programmateurs : analyse numérique, mise à niveau ou encore le stockage à deux niveaux. L’amélioration de la notation n’était pas considérée comme primordiale.

Un exemple d'autocode de Glennie calculant la formule   est visible ci-dessous. À noter : cet exemple est imparfait et suppose que les résultats de la multiplication s'adaptent à la taille de l'accumulateur.

c@VA t@IC x@½C y@RC z@NC
INTEGERS +5 →c           # C=5
      →t                 # Place l'argument de l'accumulateur
                         # vers la variable t
   +t     TESTA Z        # Place |t| dans l'accumulateur
   -t
          ENTRY Z
SUBROUTINE 6 →z          # Lance la routine de racine carrée
                         # sur la valeur de l'accumulateur
                         # et place le résultat dans z
  +tt →y →x              # Calcule t^3 et place le résultat dans x
  +tx →y →x
+z+cx   CLOSE WRITE 1    # Place z + (c * x) dans l'accumulateur
                         # et retourner

Mark 1 Autocode

modifier

Le Mark 1 Autocode, conçu en 1955 par Tony Brooker pour le même ordinateur, a été le deuxième de sa génération. Le langage était quasiment indépendant de la machine et à arithmétique flottante, contrairement au premier. Par contre, il permettait de n’insérer qu’une seule opération par ligne, n’offrait que quelques noms mnémoniques et il n’y avait aucun moyen de définir des sous-programmes pour l'utilisateur.


L'exemple suivant charge un tableau de onze nombre à virgule flottante depuis l'entrée :

      n1 = 1         
1    vn1 = I         Lit l'entrée dans v[n[1]]
      n1 = n1 + 1
   j1,11 ≥ n1        Branche vers to 1 si n[1] ≤ 11

L'autocode de Brooker supprima deux difficultés rencontrées par les programmeurs du Mark 1 : la mise à l'échelle du code et la gestion de la mémoire. Contrairement à son prédécesseur, il fut largement utilisé.

Autocodes ultérieurs

modifier

Dans les années 1950, Brooker a également conçu un autocode pour l’ordinateur commercial Ferranti Mercury en accord avec l’Université de Manchester. L'autocode Mercury disposait d’un répertoire limité de variables a-z et a'-z' et ressemblait en certains points aux premières versions de ce qui est devenu par la suite le langage Dartmouth BASIC. Il a précédé le langage Algol, sans utilisation des concepts de pile d'exécution, de récursivité ou de tableaux dynamiques. Il a été rédigé de longs programmes sous la forme de chapitres et chacun d’entre eux représentant un programme de recouvrement dans le but de maximiser la mémoire relativement limitée du Mercury. Une habileté particulière a été nécessaire pour réduire la durée des transferts de contrôle entre les chapitres. Ce concept de programmes de recouvrement à partir de tambours et sous contrôle de l’utilisateur est devenu commun avec l’arrivée de la mémoire virtuelle sur les machines ultérieures. Des versions légèrement différentes de l'autocode Mercury ont été réalisées pour l’ordinateur Ferranti Atlas (à ne pas confondre avec l’autocode Atlas qui fut conçu plus tard), pour le ICT 1300 et la gamme ICT 1900.

La version de EDSAC 2 a été compilée en 1961 par David Fielding Hartley du Laboratoire de Mathématiques de l’Université de Cambridge. Connu sous le nom de EDSAC 2, il est directement tiré de l’autocode Mercury et a été adapté en fonction des conditions locales. Il a été remarqué notamment pour l’optimisation du code objet et les diagnostics de langue source qu’il permettait, qui en ont d'ailleurs fait un précurseur en matière d'autocodes. Une version a été conçue pour son successeur, le Titan (le prototype de l’Atlas 2) comme solution temporaire tandis qu’un langage bien plus évolué, le CPL était en cours d’élaboration. Le CPL n’a jamais été achevé mais il a permis au BCPL (conçu par M. Richards) de voir le jour, qui à son tour a mené au langage de programmation B et finalement au C. Parallèlement, un autre langage de programmation contemporain du BCPL, l’autocode Atlas, a été conçu pour l’ordinateur Atlas 1 de l’Université de Manchester.

Notes et références

modifier
  1. « Alick Glennie Develops the First Autocode, the First Compiled Programming Language : History of Information », sur www.historyofinformation.com (consulté le )

Sources

modifier
  • Martin Campbell-Kelly, « Programming the Mark 1: Early Programming Activity at the University of Manchester », IEEE, vol. 2, no 2,‎ , p. 130–167 (DOI 10.1109/MAHC.1980.10018)
  • (es) Ernesto Garcia Camarero, AUTOCODE un sistema simplificado de codificacion para la computadora MERCURY, Universidad de Buenos Aires, , 70 p. (lire en ligne)
  • Keith London, Introduction to Computers, , 261 p.
  • Knuth, Donald E.; Pardo, Luis Trabb (1976). "Early development of programming languages". Stanford University, Computer Science Department.

Bibliographie

modifier