Le code source du langage de programmation APL

Gemmes de logiciels : The Computer History Museum Historical Source Code Series

Ken Iverson à l’Université de Harvard

Des milliers de langages de programmation ont été inventés au cours des 50 premières années de l’ère de l’informatique. Beaucoup d’entre eux étaient similaires, et beaucoup ont suivi un chemin traditionnel, évolutif de leurs prédécesseurs.

Mais certains langages révolutionnaires avaient une inclinaison qui les différenciait de leurs frères plus polyvalents. LISP était destiné au traitement des listes. SNOBOL était destiné à la manipulation des chaînes de caractères. SIMSCRIPT était destiné à la simulation. Et APL était destiné aux mathématiques, avec un accent sur le traitement des tableaux.

Ce qui est finalement devenu APL a été inventé par Kenneth E. Iverson, professeur à Harvard, en 1957, comme notation mathématique, et non comme langage de programmation informatique. Bien que d’autres systèmes de symboles orientés matrice aient existé, notamment la notation tensorielle concise inventée par Einstein, ils étaient davantage orientés vers l’analyse mathématique et moins vers la synthèse d’algorithmes. Iverson, qui était un étudiant de Howard Aiken, a enseigné ce qui est devenu la « Notation Iverson » à ses étudiants de Harvard pour expliquer les algorithmes.

Iverson a été embauché par IBM en 1960 pour travailler avec Adin Falkoff et d’autres sur sa notation. Dans son désormais célèbre livre de 1962 « A Programming Language » 1, il dit que la notation est destinée à la description de « procédures… appelées algorithmes ou programmes », et que c’est un langage parce qu’il « présente une structure syntaxique considérable ». Mais à ce stade, il ne s’agissait que d’une notation à lire, et non d’un langage pour programmer des ordinateurs. Le livre donne de nombreux exemples de son utilisation à la fois comme outil descriptif (par exemple pour documenter la définition des jeux d’instructions informatiques) et comme moyen d’exprimer des algorithmes généraux (par exemple pour le tri et la recherche). Anticipant la résistance à quelque chose d’aussi novateur, il déclare dans la préface : « La thèse centrale de ce livre est que la puissance descriptive et analytique d’un langage de programmation adéquat justifie amplement l’effort considérable nécessaire à sa maîtrise. » Peut-être prévenait-il que la maîtrise du langage n’était pas triviale. Peut-être signalait-il aussi que, selon lui, les autres langages de notation étaient moins qu' »adéquats ».

L’équipe, bien sûr, a rapidement vu que la notation pouvait être transformée en un langage de programmation des ordinateurs. Ce langage, appelé APL à partir de 1966, mettait l’accent sur la manipulation des tableaux et utilisait des symboles non conventionnels. Il ne ressemblait à aucun autre langage de programmation informatique qui avait été inventé.

L’APL est devenu populaire lorsque IBM a introduit « APL360 » pour son ordinateur central System/360. Contrairement à la plupart des autres langages de l’époque, APL360 était également un environnement de programmation interactif complet. Le programmeur, assis devant une machine à écrire électromécanique reliée à un ordinateur en temps partagé, pouvait taper des instructions APL et obtenir une réponse immédiate. Les programmes pouvaient être définis, débogués, exécutés et sauvegardés sur un ordinateur qui était simultanément utilisé par des dizaines d’autres personnes.

Écrite entièrement en langage d’assemblage 360, cette version d’APL prenait le contrôle de toute la machine. Elle mettait en œuvre un système d’exploitation complet à temps partagé en plus d’un langage de haut niveau.

Avec la permission d’IBM, le Computer History Museum est heureux de mettre à disposition le code source de la version 1969-1972 « XM6 » d’APL pour le System/360 pour un usage non commercial.

Le fichier texte contient 37 567 lignes, ce qui inclut le code, les macros et les définitions globales. Les 90 fichiers individuels sont séparés par des commandes ‘./ ADD ». Pour accéder à ce matériel, vous devez accepter les termes de la licence affichée ici, qui ne permet qu’une utilisation non commerciale et ne vous donne pas le droit d’accorder une licence à des tiers en publiant des copies ailleurs sur le web.

Télécharger le code source d’APL360

Jürgen Winkelmann à l’ETH Zürich a fait un travail incroyable pour transformer ce code source en un système exécutable. Pour plus d’informations, voir MVT for APL Version 2.00.

Création du langage de programmation APL

Le livre d’Iverson « A Programming Language » 1 utilise une notation graphique qui aurait été difficile à utiliser directement comme langage de programmation pour les ordinateurs. Il la considérait comme une extension de l’algèbre matricielle, et utilisait des conventions typographiques mathématiques courantes comme les indices, les exposants, et les distinctions basées sur le poids ou la police des caractères. Voici, par exemple, un programme pour trier des nombres :

Pour linéariser la notation en vue d’une utilisation comme langage de programmation informatique tapé au clavier, les implémenteurs de l’APL ont certainement dû renoncer à l’utilisation de flèches étiquetées pour les transferts de contrôle. Mais une caractéristique qu’ils ont pu conserver, dans une certaine mesure, était l’utilisation de symboles spéciaux pour les fonctions primitives, comme l’illustre ce programme qui crée des codes de Huffman :

APL utilise des symboles qui sont plus proches des mathématiques standard que de la programmation. Par exemple, le symbole de la division est ÷, et non /. Pour prendre en charge les symboles non conventionnels, APL360 a utilisé un clavier conçu sur mesure avec des symboles spéciaux en majuscules.

APL360 a utilisé un clavier conçu sur mesure

Malgré cela, il y avait plus de caractères spéciaux que ce qui pouvait tenir sur le clavier, donc certains ont été tapés en dépassant deux caractères. Par exemple, le caractère « grade up » ⍋, un opérateur primitif utilisé pour le tri, a été créé en tapant ∆ (shift H), puis backspace, puis ∣ (shift M). Il n’y avait plus de place pour les majuscules et les minuscules, donc APL ne supportait que les majuscules.

Pour imprimer les programmes, Iverson et Falkoff ont obtenu d’IBM qu’elle conçoive une boule typographique spéciale pour ses terminaux 1050 et 2741, qui utilisaient le mécanisme de la machine à écrire Selectric d’IBM.

Maintenant, les programmes pouvaient être à la fois tapés et imprimés. Voici, par exemple, la version imprimée d’un programme du manuel du langage APL 2 qui calcule le déterminant mathématique d’une matrice:

Un goût d’APL

L’APL est un langage de programmation de haut niveau concis qui diffère de la plupart des autres développés dans les années 1960 à plusieurs égards:

Ordre d’évaluation : Les expressions en APL sont évaluées de droite à gauche, et il n’y a pas de hiérarchie de précédence des fonctions. Par exemple, taper l’expression

2×4+3

fait que l’ordinateur tape immédiatement la valeur résultante

La valeur n’est pas, comme dans beaucoup d’autres langages qui ont une précédence d’opérateur, 11. Bien sûr, les parenthèses peuvent être utilisées pour regrouper une sous-expression afin de modifier l’ordre d’évaluation. La règle générale est que l’argument droit de toute fonction est la valeur de l’expression à sa droite.

Création automatique de vecteurs et de tableaux : Une structure de dimension supérieure est automatiquement créée en évaluant une expression qui la renvoie, et les scalaires peuvent être librement mélangés. Par exemple,

A ← 2 + 1 2 3

crée le vecteur « 1 2 3 », lui ajoute le scalaire 2, et crée la variable A pour contenir le vecteur dont la valeur est

3 4 5

Les variables ne sont jamais déclarées ; elles sont créées automatiquement et prennent la taille et la forme de n’importe quelle expression qui leur est assignée.

Une pléthore de primitives : APL dispose d’un riche ensemble de fonctions intégrées (et d' »opérateurs » qui sont appliqués aux fonctions pour donner des fonctions différentes) qui opèrent sur des scalaires, des vecteurs, des tableaux, même des objets de dimension supérieure, et des combinaisons de ceux-ci. Par exemple, l’expression pour additionner les nombres dans le vecteur « A » créé ci-dessus est simplement

+/A

où / est l’opérateur de « réduction » qui fait que la fonction de gauche est appliquée successivement à tous les éléments de l’opérande de droite. L’expression pour calculer la moyenne des nombres dans A utilise également la fonction primitive ρ pour déterminer combien d’éléments il y a dans A:

(+/A) ÷ ρA

Voici quelques tableaux tirés du « Manuel de l’utilisateur APL360 » 3 de 1970 qui donnent une saveur de la puissance et de la sophistication des fonctions et opérateurs APL intégrés. (Cliquez sur les images pour obtenir des versions plus grandes.)

L’APL vous encourage à penser différemment la programmation, et à utiliser des structures de données temporaires à haute dimension comme valeurs intermédiaires qui sont ensuite réduites en utilisant les puissantes primitives. Un exemple célèbre est le programme court mais complet suivant pour calculer tous les nombres premiers jusqu’à R.

(~T∊T∘.×T)/T←1↓⍳R

Voici comment cette expression est évaluée :

subexpression

sens

valeur si R est 6

⍳R

Générer un vecteur de nombres de 1 à R.

1 2 3 4 5 6

T←1↓

Laisse tomber le premier élément du vecteur et affecte le reste au vecteur temporaire T.

2 3 4 5 6

T∘.×T

Créer le produit externe de la multiplication : une table qui contient le résultat de la multiplication de chaque élément de T par chaque élément de T.

T∊

Utiliser l’opérateur « appartenance à un ensemble » pour trouver quels éléments de T sont dans le tableau.

0 0 1 0 1

~

Négliger le résultat pour identifier les éléments de T qui ne sont pas dans le tableau. Ce sont les entiers qui n’ont pas de multiples dans le tableau.

1 1 0 1 0

( )/T

Sélectionner les éléments de T que nous avons identifiés. Ce sont tous les nombres premiers inférieurs à R.

2 3 5

Notez qu’il n’y a pas de boucles dans ce programme. La puissance des expressions APL signifie que les branches conditionnelles et les boucles sont nécessaires beaucoup moins souvent que dans les langages de programmation plus traditionnels.

Les opérateurs APL peuvent être utilisés de manière simple pour toutes sortes de calculs qui nécessiteraient habituellement des boucles. Par exemple, une expression qui calcule le nombre d’éléments du vecteur X qui sont supérieurs à 100 est

+/X>100

Cela fonctionne parce que X>100 renvoie un vecteur binaire de 0 et de 1 montrant quels éléments de X sont supérieurs à 100, et +/ additionne tous les bits de ce vecteur.

Mais l’exécution conditionnelle et les boucles sont, bien sûr, parfois nécessaires. À la lumière des développements ultérieurs de la programmation structurée, la seule primitive d’APL pour le transfert de contrôle, l’instruction « GO TO LINE x » → est particulièrement faible. Voici un exemple d’une fonction qui calcule le plus grand diviseur commun de ses deux arguments. La dernière instruction crée une boucle en se ramifiant au début. À la ligne 2, le transfert conditionnel du contrôle à la ligne 0 provoque la sortie de la fonction et le retour de la dernière valeur affectée à G.

Pour en savoir plus sur le langage APL des années 1960, voir le manuel de référence « APL Language » 2 et le « APL360 Primer » de Paul Berry en 1969 4.

Le langage a bien sûr évolué au fil des ans, et les versions plus récentes incluent des structures de contrôle telles que IF-THEN-ELSE.

Comment APL a été implémenté

La première implémentation informatique de la notation APL était un interpréteur de langage orienté batch écrit en FORTRAN en 1965 pour l’ordinateur central IBM 7090, par Larry Breed au centre de recherche IBM de Yorktown Heights NY et Philip Abrams, alors étudiant diplômé à l’université de Stanford.

La première version interactive a été écrite peu après pour le 7093 (un 7090 expérimental avec mémoire virtuelle) par Larry Breed et Roger Moore. Elle fonctionnait sous le système de temps partagé TSM et s’appelait fantaisistement « IVSYS », qui rime avec « IBSYS », le nom du système d’exploitation standard 7090. Dans un courriel de 2012, Breed dit,

IVSYS fournissait la connexion, la déconnexion, l’exécution immédiate et la définition de fonctions ; il fournissait des espaces de travail, à la fois actifs et stockés. L’implémentation de ces derniers était rudimentaire ; nous avons surtout utilisé ce que le projet TSM nous offrait pour le login/logout/sauvegarde des fichiers. Nous n’avons eu que quelques semaines pour utiliser le 7093 avant qu’il ne soit mis hors service et Roger et moi avons commencé à planifier un système autonome sur System/360. Au cours de ces semaines, Ken et son groupe ont vu pour la première fois à quoi ressemblerait l’APL exécutable.

Une autre implémentation d’un sous-ensemble du langage a été faite en 1967 pour le mini-ordinateur IBM 1130.

La première implémentation d’APL à être largement utilisée en dehors d’IBM était pour le System/360 d’IBM. Appelée « APL360 », elle a d’abord été mise en service au sein d’IBM en novembre 1966. (La notation « APL360″, puisque la barre oblique inverse était l’opérateur d' »expansion » d’APL, avait aussi une signification cachée : « APL expanse le 360″).

Breed dit de la période juste avant,

Cette période, début 1966, était la période de transition entre la Notation Iverson et APL. (Le raffinement et l’extension du langage et de l’environnement se sont poursuivis pendant de nombreuses années. Il n’y a pratiquement pas eu de code ajouté pour faire une version commerciale, juste de la paperasse.

En août 1968, APL360 était disponible pour les clients d’IBM en tant que programme non supporté (« Type III ») dans la « Contributed Program Library » 5 d’IBM. Les principaux implémenteurs étaient Larry Breed, Dick Lathwell et Roger Moore ; d’autres qui avaient contribué étaient Adin Falkoff et Luther Woodrum.

Les premiers développeurs d’APL, de gauche à droite : Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. La photo a été prise vers 1983.

En raison de la nature dynamique des variables APL, APL360 a été implémenté comme un interprète, et non comme un compilateur qui générait du code machine. Les programmes étaient stockés sous une forme interne appelée « codestring » qui correspondait directement à ce que l’utilisateur avait tapé. L’interprète examinait ensuite le codestring au fur et à mesure de l’exécution du programme, et allouait et reconfigurait dynamiquement les variables au fur et à mesure de l’évaluation des expressions.

Les premières versions d’APL360 prenaient le contrôle de toute la machine. Il s’agissait donc d’une combinaison de système d’exploitation, de système de fichiers, de moniteur à temps partagé, d’interpréteur de commandes et de langage de programmation. Étant donné la mémoire principale limitée, les espaces de travail des utilisateurs étaient transférés sur le tambour ou le disque selon les besoins. Les performances étaient impressionnantes, ce que Larry Breed attribue, dans sa description claire et succincte de la mise en œuvre 6, à la capacité d’adapter le système d’exploitation aux exigences du langage.

L’APL360 était un langage conversationnel qui fournissait une réponse rapide et une exécution efficace pour un maximum de 50 utilisateurs simultanés. Chaque utilisateur disposait d’un « espace de travail actif » qui contenait les programmes, les variables et l’état d’exécution des programmes suspendus. Des commandes système telles que « )LOAD », « )SAVE » et « )COPY » permettaient de conserver la bibliothèque d’espaces de travail de l’utilisateur. D’autres commandes système contrôlaient les caractéristiques du langage ; par exemple, avec « )ORIGIN », le programmeur pouvait contrôler si les vecteurs et les tableaux sont numérotés en commençant par 0 ou 1.

L’APL a été la première introduction au temps partagé interactif pour beaucoup dans la génération de programmeurs qui avaient souffert de la programmation par lots avec des cartes perforées.

Applications de l’APL

Même avant d’être un langage de programmation informatique, la Notation d’Iverson était utile comme langage pour documenter les algorithmes pour les gens. L’exemple classique est la définition formelle de l’architecture du jeu d’instructions du nouvel ordinateur IBM System/360, qui a été publiée dans un article du IBM Systems Journal par Adin Falkoff, Ken Iverson et Ed Sussenguth en 1965 7.

La description, qui est formelle plutôt que verbale, est accomplie par un ensemble de programmes, interagissant à travers des variables communes, utilisées en conjonction avec des tables auxiliaires… Bien que la description formelle soit complète et autonome, le texte est fourni comme une aide à l’étude initiale.

Mais le texte fourni dans le document est bien plus que cela. C’est une explication ligne par ligne de la description formelle, ce qui signifie que c’est aussi une démonstration et une explication du pouvoir descriptif d’APL.

La notation utilisait le style graphique pour les transferts de contrôle qui était dans le livre d’Iverson. Voici, par exemple, la description d’une opération d’accès à la mémoire. (Cliquez dessus pour l’agrandir.)

C’est la transition de l’APL d’une notation pour la publication à un langage de programmation informatique interactif qui l’a fait prospérer. Lorsque l’implémentation APL360 a été disponible, IBM et d’autres ont stimulé l’utilisation en produisant diverses applications telles que celles-ci :

  • Starmap : Un ensemble de fonctions APL pour calculer et tracer les positions des étoiles et des planètes. 8 9 Il a été écrit en 1973 par Paul Berry d’IBM et John Thorstensen, alors étudiant en astronomie au Bryn Mawr college, maintenant professeur de physique et d’astronomie au Dartmouth College. Il utilise les solutions classiques des équations de Kepler pour une date et une heure données et une série de rotations de coordonnées pour montrer où les planètes et les étoiles apparaîtraient dans le bol du ciel.
  • IBGS : Interactive Business Game Simulation : « Une simulation de gestion informatique générale impliquant la prise de décision et la planification dans les domaines fonctionnels de la production, du marketing et des finances. »
  • Zéros et intégrales dans APL : « En utilisant à la fois des méthodes classiques comme celles de Newton et de Muller et des méthodes récemment développées comme celles de Jenkins et Traub, il trouve les zéros réels d’une fonction réelle, les zéros réels et complexes d’un polynôme à coefficients réels ou complexes, et les zéros complexes d’une fonction complexe. »
  • Graphpak – Progiciel graphique interactif pour APL360 : « …des capacités qui vont du support d’interface graphique au niveau le plus bas à plusieurs domaines d’application à des niveaux plus élevés…Un composant de traçage…linéaire ou logarithmique…ajustement de courbe… Un composant de géométrie descriptive permet la définition, la mise à l’échelle, le grossissement, la translation, la rotation et l’affichage projeté d’objets tridimensionnels. »
  • Graphes et histogrammes en APL : « produit des courbes et des graphiques à barres sur un terminal de machine à écrire ».
  • Système de géométrie des coordonnées en APL : « résout les problèmes de géométrie des coordonnées de manière interactive sur un terminal…à l’usage des géomètres, des ingénieurs civils, des urbanistes… »
  • APL/PDTS – Programming Development Tracking System : « …pour aider les gestionnaires et les planificateurs à contrôler les performances par rapport au plan sur les projets de développement de la programmation. » MINIPERT : « Un système de méthode du chemin critique (CPM) pour la gestion de projet »
  • APL Langage de planification économétrique : « L’économiste praticien, le prévisionniste d’entreprise ou l’enseignant dispose d’outils faciles à utiliser pour la construction et la résolution de modèles interactifs. »
  • APL Financial Planning System : « permet à l’analyste et au planificateur financier de concevoir des rapports, de spécifier des énoncés de calcul, d’entrer et de modifier des données, et d’obtenir des rapports imprimés avec un délai d’exécution immédiat. »
  • Éditeur et compositeur de texte APL : « Ce programme est conçu pour traiter du texte de manière interactive sur un terminal… Des fonctions sont incluses pour saisir, réviser, composer, imprimer et stocker du texte… à l’usage des secrétaires, des scientifiques, des ingénieurs, des administrateurs ou de toute autre personne qui produit des papiers, des lettres, des rapports ou des spécifications. »

Plusieurs de ces applications mettaient l’accent sur l’interactivité, ce qui permettait une énorme augmentation de la productivité par rapport au traitement par lots plus typique à l’époque. En outre, l’APL permettait de développer des applications beaucoup plus rapidement. Dans un courriel de 2012, Larry Breed a noté,

Dans tous les domaines, la vitesse à laquelle les programmes APL peuvent être écrits le rend précieux pour la modélisation et le prototypage . … Un exemple : Vers 1973, Continental Can avait besoin d’un système d’inventaire pour ses 21 usines de fabrication. Leur équipe de programmeurs FORTRAN avait travaillé pendant un an, sans succès en vue. Un commercial de STSC, en un week-end, a construit un modèle fonctionnel utilisable en APL Plus.

Les domaines dans lesquels APL avait la plus grande pénétration étaient les applications scientifiques, actuarielles, statistiques et financières. Pour des détails sur la progression d’APL au cours de ses 25 premières années, voir le numéro spécial de 1991 de l’IBM System Journal 10 avec 12 articles et un essai sur le sujet.

L’éloge et la critique d’APL APL n’a pas été conçu à l’origine comme un langage de programmation. Comme le dit Iverson,

Le motif initial du développement d’APL était de fournir un outil pour l’écriture et l’enseignement. Bien que l’APL ait été exploité principalement dans la programmation commerciale, je continue à croire que son utilisation la plus importante reste à exploiter : en tant que notation simple, précise et exécutable pour l’enseignement d’un large éventail de sujets.11

Avec tant de symboles laconiques et inhabituels, les programmes informatiques APL, comme la notation mathématique qui l’a inspiré, ont une concision et une élégance que beaucoup trouvent attrayantes. APL attire des adeptes fanatiques. Alan Perlis (le premier lauréat du prix Turing de l’ACM, en 1966) était l’un d’entre eux:

Le balayage de l’œil sur une seule phrase peut exposer une interaction complexe, ingénieuse et belle d’opération et de contrôle qui, dans d’autres langages de programmation, n’est observable que dans plusieurs pages de texte. On commence à apprécier l’émergence et la signification du style. 12

Beaucoup trouvent la liberté d’expression dans APL libératrice.

J’avais l’habitude de décrire comme un ‘langage de programmation fasciste’, parce qu’il est dictatorialement rigide. …Si Pascal est fasciste, APL est anarchiste. 13

Mais les programmes APL sont souvent cryptiques et difficiles à décoder. Certains ont plaisanté en disant qu’il s’agissait d’un « langage à écrire seulement », car même l’auteur d’un programme peut avoir du mal à le comprendre par la suite. Il inspire des astuces de programmation. Il est difficile de résister au défi d’écrire un « one-liner » APL pour mettre en œuvre un algorithme complexe complet. Voici, par exemple, deux one-liners APL différents qui implémentent des versions du « Jeu de la vie » de John Conway:

life←{1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}

Pas pour les âmes sensibles, clairement. L’informaticien néerlandais Edsger Dijkstra a dit,

L’APL est une erreur, portée à la perfection. C’est le langage du futur pour les techniques de programmation du passé : il crée une nouvelle génération de clochards du codage. 14

Mais les fans de l’APL diraient que le codage cryptique de l’APL est un mauvais style de programmation qui peut être une affliction de n’importe quel langage. APL fournit une palette plus riche pour exprimer les algorithmes, l’argument va, de sorte que vous pouvez résoudre des problèmes plus difficiles plus rapidement et avec moins d’encombrement syntaxique non pertinent.

Quel que soit votre point de vue, APL et les langages qu’il a inspirés, tels que APL2 et J, sont toujours une partie active de l’univers diversifié des langages de programmation.

Une courte biographie de Ken Iverson

Kenneth Eugene Iverson est né le 17 décembre 1920 dans une ferme près de Camrose, en Alberta, au Canada. Il a fait ses études dans des écoles rurales à classe unique jusqu’à la fin de la 9e année, où il a abandonné l’école parce que c’était l’apogée de la Dépression et qu’il y avait du travail à faire dans la ferme familiale. Il a dit plus tard que le seul but de poursuivre sa scolarité aurait été de devenir instituteur, et c’était une profession qu’il ne voulait décidément pas. Pendant les longs mois d’hiver, il étudiait le calcul par lui-même.

Il a été appelé sous les drapeaux en 1942, et pendant son service, il a suivi suffisamment de cours par correspondance pour presque terminer le lycée. Après le service militaire, il obtient un baccalauréat en mathématiques et en physique à l’Université Queen’s de Kingston, en Ontario, puis une maîtrise en physique à l’Université Harvard. En 1954, il passe un doctorat sous la direction du pionnier de l’informatique Howard Aiken, avec une thèse intitulée « Machine Solutions of Linear Differential Equations : Applications to a Dynamic Economic Model ».

Après avoir terminé son doctorat, Iverson rejoint la faculté de Harvard pour enseigner dans le nouveau programme de traitement automatique des données d’Aiken. Il y est resté un an en tant qu’instructeur, puis cinq ans en tant que professeur adjoint. De plus en plus frustré par l’inadéquation de la notation mathématique conventionnelle pour exprimer les algorithmes, il commença à inventer la sienne.

En 1960, Iverson rejoignit le nouveau centre de recherche d’IBM à Yorktown Heights, dans l’État de New York, sur les conseils de Frederick Brooks, qui avait été l’un de ses compagnons d’enseignement à Harvard et se trouvait désormais chez IBM. Les deux hommes collaborent au développement continu de la nouvelle notation. En 1962, Ken a publié le livre désormais classique « A Programming Language » 1, dont le titre a donné le nom APL à la notation qui avait jusqu’alors été appelée de manière informelle « notation d’Iverson ».

Iverson a continué à travailler au développement d’APL tout au long de son mandat chez IBM. En 1980, il a quitté IBM et est retourné au Canada pour travailler pour I.P. Sharp Associates, qui avait établi un service de temps partagé basé sur APL.

En 1987, il s’est « retiré de l’emploi rémunéré » et a porté toute son attention sur le développement d’un dialecte plus moderne d’APL. L’APL était utilisé avec succès à des fins commerciales, mais Iverson voulait développer une nouvelle notation exécutable simple plus adaptée à l’enseignement, qui serait disponible à faible coût. La première implémentation de ce langage, appelé J, a été annoncée lors de la conférence des utilisateurs d’APL90.

La capacité d’Iverson à créer de tels langages provenait de son « pur plaisir du langage et des mots », se souvient sa fille Janet Cramer. « Il lisait les dictionnaires comme les gens lisent des romans ». Iverson pensait qu’il était important que le langage, qu’il s’agisse de l’anglais ou des mathématiques, communique de manière claire et concise.

Avec des collaborateurs dont son fils Eric, Iverson a continué à travailler sur le développement de J, et il a continué à publier de manière prolifique. Le samedi 16 octobre 2004, il a été victime d’un accident vasculaire cérébral – alors qu’il travaillait sur un tutoriel de J – et est décédé trois jours plus tard, le 19 octobre, à l’âge de 83 ans.

Il existe de nombreuses histoires sur Ken Iverson. En voici quelques-unes :

Ken n’a pas obtenu de titularisation à Harvard. Il a fait ses cinq années en tant que professeur adjoint et la faculté a décidé de ne pas le mettre pour une promotion. Je lui ai demandé ce qui n’allait pas et il m’a répondu : « Eh bien, le doyen m’a convoqué et m’a dit : « Le problème, c’est que vous n’avez rien publié d’autre qu’un seul petit livre ». Ce petit livre a ensuite reçu le prix Turing. Je pense que c’est un commentaire sur l’état d’esprit conventionnel des procédures de promotion plutôt qu’un commentaire sur Ken ; c’est un commentaire sur la procédure académique et sur Harvard.

– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30

Dans un premier exposé, Ken expliquait les avantages de la comparaison tolérante. Un membre de l’auditoire a demandé avec incrédulité : « Vous ne voulez sûrement pas dire que lorsque A=B et B=C, A peut ne pas être égal à C ? » Sans sauter le pas, Ken a répondu : « N’importe quel charpentier le sait ! » et est passé à la question suivante.

– Paul Berry

Lors d’une conversation sociale avec Ken, j’ai dit : « Vous savez, Ken, vous êtes mon concepteur de langage préféré et Don Knuth est mon programmeur préféré. » Et Ken a immédiatement répondu : « Qu’est-ce qui ne va pas avec ma programmation ? ».

– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30

En 1973 ou 1974, Ken et moi avons donné une conférence chez Kodak à Rochester à un groupe de 40 à 50 programmeurs qui devaient travailler en PL/I. Pendant la période de questions, un membre du personnel supérieur a dit : « Si je comprends ce que vous dites, vous suggérez que nous devrions adopter une nouvelle façon de penser. » Ken a bondi de sa chaise et a répondu : « Oui ! C’est exactement ce que je dis ! ».

– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30

Acknowledgements

Merci à Michael Karasick, Yvonne Perkins, Steve Selbst, et Ken Edwards d’IBM pour avoir mis fin à mon odyssée de dix ans pour obtenir la permission de publier le code source d’APL. Merci à Curtis Jones, Larry Breed, Paul Berry, et Roy Sykes pour leurs commentaires sur une première version de cet article.

– Len Shustek

Bibliographie

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc, 1962.
  2. IBM, « APL Language », mars 1975.
  3. IBM, « Manuel de l’utilisateur APL360 », mars 1970.
  4. IBM, Paul Berry, « APL360 Primer – Student Text », 1969.
  5. L. M. Breed et R. H. Lathwell, « APL360, » 1968.
  6. L. M. Breed et R. H. Lathwell, « The Implementation of APL360, » in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
  7. A. D. Falkoff, K. E. Iverson and E. H. Sussenguth, « A Formal Description of SYSTEM/360, » IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
  8. P. C. Berry et J. R. Thorstensen, « Starmap, » 1978.
  9. P. C. Berry et J. R. Thorstensen, « Starmap, » Division du développement des systèmes IBM, 1975.
  10. IBM Systems Journal, vol. 30, no. 4, 1991.
  11. K. E. Iverson, « A Personal View of APL », IBM Systems Journal, vol. 30, no. 4, 1991.
  12. A. J. Perlis, « In Praise of APL : A Language for Lyrical Programming, » SIAM News, juin 1977.
  13. B. McCormick, « A Programming Language, » 2000,2002.
  14. E. W. Dijkstra, « How Do We Tell Truths That Might Hurt ? », » SIGPLAN Notices, vol. 17, no. 5, mai 1982.
  15. A. D. Falkoff et K. E. Iverson, « The Design of APL, » IBM Journal of Research and Development, vol. 17, no. 4, 1973.
  16. A. D. Falkoff et K. E. Iversion, « The Evolution of APL, » SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, août 1978.
  17. L. Breed, « How We Got to APL1130, » 10 mai 2004.
  18. ACM, « Proceedings of the APL’69 Conference on APL, » SUNY Binghamton, NY, 1969.
  19. « The Origins of APL – 1974 » ; une merveilleuse interview avec les développeurs originaux d’APL.

Livraisons historiques de codes sources

  • Code source de MacPaint et QuickDraw, 18 juillet 2010
  • Code source du langage de programmation APL, 10 octobre 2012
  • Code source d’Adobe Photoshop, 13 février 2013
  • Code source Apple II DOS, 12 novembre 2013
  • Code source Microsoft MS-DOS Early, 25 mars 2014
  • Code source Microsoft Word pour Windows version 1.1a Code source, 25 mars 2014
  • Code source CP/M Early Digital Research, 1er octobre 2014
  • Code source Xerox Alto, 21 octobre 2014
  • Code source DeluxePaint Early Electronic Arts, 22 juillet 2015

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.