Recherche, informatique, industrie : APL, un langage pas comme les autres (5/12 - année 2021)

Publié par ACONIT (Association pour un Conservatoire de l'Informatique et de la Télématique), le 23 avril 2021   1.3k

Illustration d'en-tête : machine à écrire IBM Selectric (en haut à gauche) ; Kenneth Iverson (au centre) ; boule d'un jeu de caractères d'impression IBM (en bas) ; une expression de calcul (à droite)

Par Philippe Denoyelle, ingénieur retraité, membre du bureau de l'ACONIT

« Au commencement (de l'informatique) n'existait aucun langage de programmation… Comme rien n'existait, tout était possible ! Il y eut d'abord FORTRAN (Formula Translator). Puis sont apparus deux langages totalement originaux : APL et LISP. »


1- Imaginons…

Nous sommes au début des années 1960. Dans la salle voisine ronfle un gros ordinateur IBM. Nous avons devant nous une machine à écrire IBM Selectric, comme celle représentée sur le visuel principal. Frappons alors une expression de calcul suivie d'un retour à la ligne, comme ci-dessous :

Comment a-t-on obtenu ce résultat ?

2- Un peu d'histoire

Tout a commencé à la fin des années 1950 : un mathématicien de la société IBM, Kenneth Iverson, cherche une notation pour décrire commodément des opérations globales sur des tableaux (booléens, numériques ou caractères).

Il n'utilise aucun mot mais beaucoup de signes, chacun d'eux correspondant à un concept précis. (Notons que c'est déjà le cas en algèbre usuel : √ ∫ π). L'ensemble est compact, parfaitement structuré et sans ambiguïté.

L'accueil est mitigé… Mais quand Iverson montre qu'on peut « interpréter » ces expressions et obtenir directement le résultat d'opérations complexes, IBM décide de développer le langage pour l'usage interne. Ce sera « APL : A Programming Langage ».

Il faut un matériel adapté. Quand on travaille chez IBM, tout est possible : la machine à écrire Selectric utilise des boules interchangeables pour les différents jeux de caractères (visuel principal). On crée donc une boule APL ainsi qu'un clavier adapté.

C'est une réussite immédiate. Rappelons-nous que les seuls outils de calcul dans les bureaux et laboratoires de l'époque sont la règle à calcul et la machine à calculer mécanique. Le langage de programmation Fortran existe depuis 1954, mais il nécessite de mettre le code source sur cartes perforées, de lancer une compilation, de charger le programme obtenu et de tout recommencer à la moindre erreur.

APL se révèle très adaptable (on dit « versatile » en terme informatique). On construit facilement de petites fonctions qui s'assemblent ensuite comme un jeu de construction, aussi bien pour des utilisations immédiates que pour de grosses applications. Il ne nécessite aucune déclaration préalable, typage ou dimensionnement des variables. Il est totalement interactif. Il est très concis, grâce notamment au traitement direct des tableaux évitant l'écriture de boucles. Il contient ses propres outils d'édition et de mise au point (traces, points d'arrêts…).

IBM n'avait pas prévu de le commercialiser. C'est la NASA qui va en obtenir la diffusion !

3- Un peu de technique

APL connaît 2 types d'éléments : numériques et caractères. La précision des valeurs numériques s'ajuste automatiquement du booléen à la virgule flottante. Les variables sont des tableaux de rang quelconque : en descendant, on trouve des tableaux à N dimensions, des matrices de rang 2, des listes appelées « vecteurs », de rang 1, et des « scalaires », de rang 0.

Il n'y a pas de déclaration de type : les fonctions du langage s'adaptent automatiquement au type et au rang de la variable. La seule condition est d'avoir des dimensions compatibles.

Le langage contient une centaine de « fonctions primitives ». On trouve ici les fonctions arithmétiques classiques, plus des fonctions spécifiques des tableaux : minimum, maximum, tri, miroir, changement de base… Chaque fonction primitive est désignée par un caractère spécifique.

« C'est impressionnant, 100 caractères à apprendre ? Bah, ils sont souvent assez caractéristiques et ce n'est pas pire que d'apprendre SUM, EXP, LOG, Pi… »

Les fonctions primitives peuvent être modifiées par des « opérateurs » : axe, balayage, produit externe, produit interne : par exemple +/ appliqué à un vecteur va fournir la somme de tous les éléments de ce vecteur.

Aux fonctions primitives s'ajoutent les « fonctions définies » par l'opérateur. Comme toutes les fonctions du langage, elles peuvent ne pas avoir d'argument, un seul argument placé à droite, deux arguments placés à droite et à gauche. Toutes les fonctions rendent un résultat À GAUCHE.

« Qu'est ce que c'est que cette histoire d'argument à droite et de résultat à gauche ? » Et bien c'est une des particularités les plus surprenantes et géniales du langage ! C'est le seul langage où il n'existe aucune « priorité entre les opérateurs » ! L'évaluation d'une fonction se fait toujours de proche en proche, de la droite vers la gauche.

Par exemple X ← 34.5 x 12 + 6?4 se lit : « Je tire au sort 6 nombres entre 1 et 4, j'ajoute 12 (à chacun), je multiplie chacun par 34,5 et j'affecte le résultat à X. »

Cela vous paraît tordu ? Mais au moins, c'est systématique ! Et vous pouvez découper l'expression en segments ou ajouter des impressions intermédiaires en utilisant l'expression … ←☐← ... sans rien casser. Nota : bien sûr, vous pouvez, en plus, ajouter des parenthèses !

On estime généralement qu'il y a un rapport 10 entre le nombre de lignes d'un programme COBOL et son équivalent en APL…

Le langage ne contient qu'une instruction d'entrée/sortie permettant de sortir ou d'entrer une ligne sur le terminal de l'opérateur. Mais différents mécanismes permettent d'appeler les commandes système propres à chaque configuration.

(Dessin humoristique datable des années 1980)

4- Quelques préjugés…

APL fut le langage favori des compagnies d'assurance. Il permettait à la fois l'usage « calculette » au bureau, l'écriture rapide d'un programme de simulation ou l'écriture d'une application permanente.

Oubliez les préjugés que vous avez pu entendre :

  • « On ne peut traiter que de petites applications en APL. » Faux ! La régulation d'une rame du RER a été traitée en APL, ainsi que la gestion du courrier d'une grande ville française, etc.
  • Non, tous les programmeurs APL ne sont pas spécialement des « Oneliners » (il y a des équilibristes dans tous les langages !). Mais un bon programme APL s'écrit normalement en alternant une ligne de code et une ligne de commentaire fonctionnel et par assemblage de petites fonctions. 

  • « On ne sait pas relire un programme APL. » Si vous n'avez pas appris le langage, évidemment, c'est de l'Hébreu ! Mais la pratique vient très vite. COBOL est écrit en anglais courant, mais si vous croyez qu'on peut comprendre un programme COBOL à sa simple lecture, vous vous trompez lourdement !

(un exemple de programmation claire)

  • « La maintenance d'un programme APL est très difficile. » Au contraire, la structure très modulaire d'un programme APL permet de tester facilement les composants. Le mécanisme de trace et la possibilité de segmenter les instructions permettent de s'y retrouver très vite. « Croyez-en mon expérience personnelle… »

5- Quelques exemples vécus

J'ai appris l'APL à l'occasion d'une formation dispensée par le CNET (Centre National d'Étude des Télécommunications), notre voisin sur la zone industrielle de Lannion (Côtes d'Armor), ceci vers 1984. J'ai écrit mes premiers programmes sur un terminal Texas Silent relié par modem acoustique à un Mitra15 au CNET.

Ma première application fut un programme de gestion des heures réalisées chaque mois sur les différents projets par les membres de mon équipe. Je commençais simplement par des tableaux à… 4 dimensions !

Il y eut ensuite un programme des gestions de plannings de type PERT. Étonnamment facile à réaliser en APL ! Un exemple en sortie imprimante en est montré ci-dessous :

Mais les micro-ordinateurs commençaient à arriver dans nos labos. Après quelques essais d'APL sur des machines Mostek ou DEC Rainbow, j'ai pu disposer d'un tout nouveau IBM PC avec l'excellent APL de la société STSC. Les fonctions système accessibles par l'interpréteur permettaient l'accès aux fichiers et l'adressage de tous les caractères de l'écran. Dans un département qui étudiait des équipements de télécommunication, le PC APL devenait un formidable outil de développement et de test. J'ai ainsi développé des outils permettant d'envoyer des messages sur des lignes de télécommunication à partir de fonctions faciles à manipuler au labo : MSG, ENVOI, RECEVOIR…

Il y eut plusieurs programmes permettant d'activer des testeurs, de lancer des séquences de test, de vérifier la réponse par rapport aux réponses connues…

Mais le plus intéressant fut le développement des postes de travail SCORPIO. À cette époque, tous les dialogues Homme-Machine avec les systèmes de télécommunication se faisaient à partir de terminaux imprimeurs, en mode ligne de commande → ligne de réponse. Tout le travail de gestion du dialogue se faisait dans l'équipement de télécommunication et on ne traitait qu'une seule langue de dialogue…

Mon idée était de remplacer le terminal par un IBM PC et de dialoguer avec le système de télécommunication par des messages courts et parfaitement formatés. Le PC se charge de gérer des formulaires de dialogue dans la langue choisie par l'utilisateur. Il peut afficher les réponses en tableaux, en graphiques… Cela vous paraît évident aujourd'hui, mais ce fut alors totalement nouveau. Il fallut prouver que les prix des PC allaient baisser, que leurs performances allaient grimper, que la société prendrait de l'avance sur ces concurrents…

Et bien sûr, SCORPIO fut réalisé en APL (en environ un millier de lignes). Les postes de travail SCORPIO ont équipé les systèmes de téléphonie rurale IRT2000 dans 42 pays (je crois) et les systèmes de téléphonie mobile Band 3 en Grande Bretagne.

(Deux captures d'écrans SCORPIO ; à gauche en mode texte ; à droite en mode graphique)

6-Et l'avenir d'APL ?

APL a été développé sur tous les systèmes des années 1980. En France, le groupe APL de l'AFCET (Association française pour la cybernétique économique et technique) organisait des séminaires très demandés. Il fut actif dans la normalisation ISO 8485 en 1989.

APL fut enseigné – entre autres ! – à Grenoble par le professeur Louis Bolliet. C'était le premier langage étudié à l'École des Mines de Saint Étienne (avec programme de jeu à réaliser à la fin du premier trimestre !).

Un reproche (justifié celui-là) fait à APL tenait à la contrainte de n'utiliser que des tableaux « rectangulaires ». Un version APL2 a ensuite été proposée, qui permettait d'inclure des éléments de tailles différentes à l'intérieur d'un tableau, au prix d'une complexité très accrue. L'APL étendu a été normalisé en 2001 (SO/IEC 13751:2001 ).

APL a connu un succès croissant jusqu'au milieu des années 1980, époque où le tableur le concurrença pour les petits travaux, ainsi que des langages spécialisés pour les gros travaux statistiques. Par la suite, APL va s'éclipser progressivement… On lui reproche sa consommation machine, son clavier spécial, la difficulté à relire un programme si on ne connaît pas le langage (!).

En 2020, la disponibilité de processeurs très rapides adressant plusieurs gigaoctets de mémoire vive et l'existence d'interpréteurs en logiciel libre le rendent à nouveau intéressant pour un public de passionnés. Il est même disponible en langage de script pour les systèmes UNIX / LINUX.

——————————

Pour aller plus loin :

  • APL vu du Ciel de B. Legrand, un PDF téléchargeable http://www.afapl.asso.fr/AFAPL...
  • Apprendre et appliquer le langage APL de B. Legrand, chez Masson Un livre ancien du même auteur, mais disponible facilement sur Internet. Clair et plein d'humour, vous lisez les chapitres 1 à 7, vous faites les exercices et vous êtes prêts à développer !
  • Sans avoir besoin d'installer APL, on peut l'essayer sur cette page : http://tryapl.org/
  • La page Wikipedia consacrée à APL est riche et donne de nombreuses références.
  • Voir aussi le site de l'Association AFAPL, qui a succédé au groupe APL après la disparition de l'AFCET.