IBM 704
L’IBM 704 est un ordinateur scientifique 36 bits commercialisé par IBM en 1954. Conçu pour les calculs scientifiques et techniques, il occupe une place majeure dans l’histoire de la programmation : c’est notamment sur cette machine qu’est développé le premier compilateur FORTRAN.
À la charnière des années 1956-1957, l’IBM 704 illustre également une transformation profonde de la manière de programmer les ordinateurs. La programmation commence à s’éloigner de l’écriture directe en langage machine grâce aux assembleurs, aux compilateurs, aux bibliothèques de programmes et au partage de logiciels entre centres de calcul.
Programmes et données dans la même mémoire
Le cours Coding for the MIT-IBM 704 Computer, publié en 1957, rappelle un principe fondamental de l’architecture de la machine : les instructions et les données sont stockées sous la même forme, dans des mots de 36 bits.
Une case mémoire n’est donc pas, par nature, une « instruction » ou une « donnée ». C’est le programme qui détermine comment son contenu doit être interprété.
Ce principe permet une grande souplesse. Un programme peut manipuler des adresses, des tables de données et, dans certaines situations, même traiter des valeurs représentant des instructions.
La structure d’une instruction
Les instructions de l’IBM 704 sont elles-mêmes organisées en plusieurs champs. On y trouve notamment :
- un opcode, qui indique l’opération à effectuer ;
- un champ de tag, utilisé pour l’indexation ;
- un champ d’adresse, qui désigne généralement l’emplacement mémoire concerné.
Cette organisation influence directement la manière d’écrire les programmes. L’utilisation de registres d’index facilite notamment le parcours de tableaux et la réalisation de boucles, opérations très fréquentes dans le calcul scientifique.
Une hiérarchie de mémoires
L’IBM 704 du MIT dispose d’une mémoire principale de 8 192 mots. Celle-ci utilise la technologie de la mémoire à tores magnétiques, beaucoup plus rapide que les dispositifs de stockage mécaniques ou magnétiques utilisés comme mémoire secondaire.
Le système possède également un tambour magnétique de 8 192 mots, qui peut servir d’extension à la mémoire centrale.
Mais les deux technologies ne sont pas équivalentes.
La mémoire à tores permet un accès beaucoup plus direct aux informations, tandis que le temps d’accès au tambour dépend de sa rotation : il faut attendre que la zone contenant les données recherchées passe devant la tête de lecture.
Les programmeurs doivent donc organiser soigneusement leurs données et leurs programmes.
- Les boucles critiques et les données fréquemment utilisées sont conservées en mémoire centrale.
- Le tambour magnétique sert davantage de zone de travail ou de stockage intermédiaire.
- Les bandes magnétiques sont utilisées pour conserver de plus grandes quantités d’informations, ainsi que pour l’archivage et l’échange de données.
La programmation ne consiste donc pas seulement à écrire des instructions : elle implique aussi de réfléchir à l’endroit où seront placés le programme et ses données.
SHARE : le logiciel devient collectif
Avec des machines comme l’IBM 704, une autre transformation importante apparaît : les logiciels commencent à être partagés entre plusieurs centres de calcul.
L’organisation SHARE, créée par des utilisateurs de machines IBM, joue un rôle important dans cette évolution. Elle facilite la circulation des programmes, des bibliothèques de routines et des conventions de programmation entre les institutions équipées de systèmes compatibles.
Les documents utilisés au MIT mentionnent ainsi des catalogues de sous-programmes SHARE ainsi que des bandes magnétiques contenant des bibliothèques de routines réutilisables.
Un programme ou une routine mis au point dans un centre de calcul peut dès lors être documenté, distribué puis réutilisé dans un autre établissement.
Cette organisation fait apparaître une idée qui deviendra fondamentale dans l’histoire de l’informatique :
le logiciel devient une ressource collective.
Il peut être :
- documenté ;
- catalogué ;
- copié ;
- distribué ;
- amélioré ;
- réutilisé par d’autres programmeurs.
La programmation commence ainsi à dépasser le cadre d’une seule machine et d’un seul centre de calcul.
SAP : programmer avec des symboles
La programmation de l’IBM 704 est également facilitée par l’utilisation d’assembleurs comme SAP, le Symbolic Assembly Program.
SAP est développé par Roy Nutt, qui travaille alors chez United Aircraft Corporation. Apparu vers 1956, il s’inscrit dans l’environnement logiciel construit autour des spécifications et des échanges de SHARE.
Son intérêt est considérable pour le programmeur.
Au lieu de devoir mémoriser directement les valeurs numériques correspondant aux instructions et aux adresses mémoire, il devient possible d’utiliser des mnémoniques et des étiquettes symboliques.
L’assembleur se charge ensuite notamment :
- de traduire les mnémoniques en instructions machine ;
- d’attribuer les adresses correspondant aux étiquettes ;
- de produire le programme sous une forme directement exploitable par l’ordinateur.
Cette abstraction ne supprime pas la nécessité de comprendre l’architecture de l’IBM 704, mais elle évite au programmeur une grande partie du travail mécanique lié à la manipulation directe des codes numériques.
FORTRAN : décrire le calcul plutôt que la machine
Avec FORTRAN, une étape supplémentaire est franchie.
Le programmeur n’a plus besoin d’exprimer chaque opération sous la forme d’une instruction spécifique de l’IBM 704. Il peut écrire des expressions beaucoup plus proches des formules utilisées en mathématiques et en sciences.
Le compilateur FORTRAN traduit ensuite ces instructions de haut niveau en code machine exécutable par l’ordinateur.
Cette traduction constitue un défi considérable à l’époque. Pour être accepté par les scientifiques et les ingénieurs habitués à optimiser soigneusement leurs programmes en langage machine ou en assembleur, le compilateur doit produire un code suffisamment performant.
FORTRAN modifie ainsi profondément la répartition du travail :
- le programmeur décrit principalement le calcul qu’il veut effectuer ;
- le compilateur détermine comment traduire ce calcul en instructions adaptées à la machine.
Les programmes scientifiques peuvent alors être développés beaucoup plus rapidement, tout en devenant plus faciles à lire, à modifier et à transmettre.
Trois niveaux de programmation coexistent
À la fin des années 1950, l’environnement de l’IBM 704 illustre donc la coexistence de plusieurs niveaux de programmation.
- Le langage machine
Le programmeur manipule directement les instructions comprises par le processeur. - L’assembleur avec SAP
Les codes numériques sont remplacés par des mnémoniques et des adresses symboliques, mais le programme reste étroitement lié à l’architecture de l’IBM 704. - Le langage évolué avec FORTRAN
Le programmeur décrit davantage le problème à résoudre, tandis que le compilateur se charge de produire les instructions machine correspondantes.
Ces trois niveaux ne se remplacent pas immédiatement. Ils coexistent, chacun répondant à des besoins différents.
Le langage machine et l’assembleur restent utiles lorsqu’un contrôle très précis de la machine est nécessaire. FORTRAN devient particulièrement intéressant pour les programmes scientifiques complexes et les calculs numériques.
Ce qui change au MIT Computation Center
L’utilisation de l’IBM 704 au MIT permet ainsi d’observer plusieurs transformations importantes de la programmation au cours de la seconde moitié des années 1950 :
- la mémoire à tores rend l’accès aux programmes et aux données plus rapide ;
- les registres d’index facilitent la manipulation des tableaux et des boucles ;
- SAP remplace une partie de la programmation numérique par une écriture symbolique ;
- FORTRAN introduit un niveau d’abstraction supplémentaire ;
- SHARE favorise la circulation des logiciels entre plusieurs institutions ;
- les bibliothèques de routines évitent de réécrire systématiquement les mêmes fonctions ;
- la programmation devient progressivement une activité organisée autour d’outils logiciels communs.
L’évolution est importante : le programmeur ne travaille plus seulement avec les circuits et les instructions propres à une machine. Il commence à disposer d’un véritable environnement logiciel.
Pourquoi l’IBM 704 constitue-t-il une étape importante ?
L’importance historique de l’IBM 704 ne tient donc pas uniquement à ses performances matérielles.
Autour de cette machine se développent simultanément plusieurs éléments qui annoncent la programmation moderne : assembleurs symboliques, compilateurs, bibliothèques de routines, documentation, standards et partage de logiciels entre utilisateurs.
Le passage est progressif, mais fondamental.
Le programme n’est plus seulement une succession d’instructions étroitement attachées à une machine. Il devient un objet que l’on peut écrire à différents niveaux d’abstraction, documenter, stocker, distribuer et réutiliser.
Crédit de la photo de couverture : Berkeley Lab Computing Sciences —Flickr, CC BY 2.0.
