APL (langage)
L'APL (initialement A Programming Language, officieusement Array-Processing Language[1]) est un langage de description de traitement de l'information devenu ensuite langage de programmation conçu entre 1957 et 1967 à Harvard par Kenneth Iverson pour décrire commodément des opérations globales sur des tableaux (booléens, numériques ou, dans une moindre mesure, de caractÚres). Iverson décrivait la grammaire de son langage comme similaire à celle d'un langage naturel (substantifs, verbes, adverbes, conjonctions, copules et ponctuation)[2]. Le langage n'utilise cependant pas de mots, mais beaucoup de signes, chacun correspondant à un concept précis[3] - [4].
APL | ||
Date de premiĂšre version | 1966 | |
---|---|---|
Paradigme | matriciel, Fonctionnel, Programmation structurée, tacite | |
Auteur | Kenneth E. Iverson | |
DĂ©veloppeur | Larry Breed, Dick Lathwell, Roger Moore et al. | |
DerniĂšre version | ISO/IEC 13751:2001 () | |
Typage | dynamique | |
Influencé par | Notation (mathématiques) | |
A influencé | Langage J, Matlab, A+ | |
Implémentations | APL\360 APL\1130 APL*Plus Sharp APL APL2 Dyalog APL NARS2000 APLX GNU APL | |
SystĂšme d'exploitation | Multiplate-forme, Windows, GNU/Linux, Mac OS X | |
Licence | propriétaire, GPL | |
Extensions de fichiers | .apl | |
RĂ©volutionnaire Ă son lancement (usage du terminal Ă boule ou Ă Ă©cran alors que la carte perforĂ©e ou le tĂ©lĂ©type ASR33 (en) restaient encore la rĂ©fĂ©rence, aucune dĂ©claration nĂ©cessaire, typage et dimensionnement des variables inutile, gestion dynamique de mĂ©moire, interactivitĂ© totale, concision par traitement direct des tableaux Ă©vitant l'Ă©criture de boucles, persistance), il connut un succĂšs croissant jusqu'au milieu des annĂ©es 1980, Ă©poque oĂč le tableur le concurrença pour les petits travaux, et des outils comme SAS, puis R pour le travail sur de plus grands volumes de donnĂ©es que ceux des tableurs de 1985.
En 2020, la disponibilité de processeurs trÚs rapides adressant plusieurs gigaoctets de mémoire vive et l'existence d'interpréteurs Open Source peuvent le rendre à nouveau intéressant pour un public de passionnés[5] - [6]. Rob Pike, créateur du langage Go, en parle en 2014 avec enthousiasme[7] et en 2020, il livre au public le code source du langage Ivy, une fondation d'APL en langage Go[8].
Dans sa version GNU APL, il est mĂȘme utilisable comme langage de script.
- Le langage APL de départ fait l'objet de la norme ISO 8485 (1989).
- L'APL étendu (fondé sur APL2) est fixé par la norme ISO/CEI 13751 (2001).
Note : VĂ©rifiez que votre navigateur accepte bien lâUnicode ; dans le cas contraire, vous verrez sâafficher des rectangles blancs ou des points dâinterrogation Ă la place des caractĂšres APL. Cette question est dĂ©taillĂ©e sur la Toile[9]. Aujourd'hui (2017) les navigateurs sur PC comme Mozilla Firefox ou Microsoft Edge ne posent aucun problĂšme pour afficher les caractĂšres APL en Unicode. Quelques problĂšmes d'affichage rĂ©siduels subsistent encore sur tablettes Android.
Historique
Les exemples sont donnés en double : une forme de copie d'écran dont le rendu sera correct quel que soit le navigateur que vous employez, et une en forme de texte que vous pouvez copier/coller par exemple dans NARS2000 (voir plus bas) pour l'exécuter, éventuellement avec quelques variantes. Le rendu de la page dépendra de votre police et de votre niveau de zoom par défaut. Vous pouvez les modifier, par exemple sur un PC par Ctrl+molette de la souris, en fonction de la résolution de votre écran.
Un historique en anglais d'APL est donné en PDF dans IBM Systems Journal, volume 30, no 4 (1991)[10]. Un décrivant ses progrÚs depuis 1978 existe également[11].
APL sâest montrĂ© particuliĂšrement adaptĂ© dĂšs ses dĂ©buts aux calculs statistiques, aux ventilations, aux consolidations, aux descriptions fonctionnelles dâarchitectures comme celle de lâIBM 360, aux graphiques interactifs (GRAPHPAK) et Ă quelques travaux en combinatoire et en thĂ©orie des graphes. Il a Ă©galement Ă©tĂ© utilisĂ© pour le prototypage dâapplications et lâĂ©criture de langages de manipulation simples dans le cadre dâun infocentre en masquant les symboles appropriĂ©s sous des dĂ©nominations commodes et parlantes, par exemple en permettant dâĂ©crire simplement :
MOYENNE X pour (+/X)Ă·âŽX.
"(Somme des éléments de X), divisée par le nombre d'éléments de X)"
NORMALISER X pour XĂ·+/X
"Diviser chaque élément de X par la somme de tous les éléments de X"
etc.
Si l'on envisage des tableaux gigantesques, la notion de MapReduce n'est pas loin[12], et de fait plusieurs implĂ©mentations d'APL utilisent, sans que l'utilisateur ait Ă en coder l'utilisation lui-mĂȘme, le parallĂ©lisme du matĂ©riel (voir plus bas).
Il permet de manipuler aisĂ©ment des tableaux de N dimensions (N variant de 7 Ă 255 selon lâimplĂ©mentation considĂ©rĂ©e, avec des tailles de 0 Ă 65000 et plus sur chaque dimension) de façon globale. Les opĂ©rations puissantes, calculs de feuilletage (lamination) ainsi que les opĂ©rateurs de rĂ©duction /
, expansion \
, produit intérieur .
et produit extĂ©rieur â.
et les opĂ©rations de compression / Ă©vitent souvent toute nĂ©cessitĂ© dâindices de boucle explicite - ainsi dâailleurs que lâusage de boucles lui-mĂȘme.
Iverson insistait sur le fait qu'APL était un langage de pensée tout autant qu'un langage de programmation. C'est en effet une notation mathématique rigoureuse et concise[13].
Les symboles APL reprĂ©sentant des opĂ©rations utilisables en programmation comme en calcul immĂ©diat Ă la console, par exemple le « domino » âč
qui inverse directement une matrice carrĂ©e, ou rĂ©sout un systĂšme dâĂ©quations linĂ©aires surdimensionnĂ© au sens des moindres carrĂ©s si la matrice est rectangulaire :
aâ2 2âŽâł4 âča ÂŻ2 1 1.5 ÂŻ0.5
On estimait dans les annĂ©es 1970-80 quâune Ă©quipe de 5 dĂ©veloppeurs APL avait la puissance de dĂ©veloppement dâune Ă©quipe de 25 programmeurs FORTRAN[14]. Lâapplication APL se montrait plus gourmande en ressources matĂ©rielles, mais le prix de celles-ci Ă©tait en constante diminution. En 2013, son adaptation Ă la programmation agile lui donne un regain d'intĂ©rĂȘt pour toutes les applications Ă mettre en place ou faire Ă©voluer rapidement, aussi bien que pour les applications Ă courte durĂ©e de vie. Il a Ă©tĂ© utilisĂ© entre autres[15] par la NASA, British Airways, la Banque de France (Ă©tudes Ă©conomiques Ă©clair), la Direction gĂ©nĂ©rale des Finances publiques française (impact fiscal de lois nouvelles), etc.
AprĂšs avoir connu le creux de la vague en 2009, l'intĂ©rĂȘt pour ce langage remonte significativement depuis[16].
Depuis 2013 également, il est proposé pour la réalisation de servlets[17].
Son interface initiale (bicolore en mode machine à écrire) a inspiré celle de logiciels comme Maple.
Présentation
APL innovait Ă son lancement par plusieurs aspects conviviaux :
- pas de dĂ©claration de types ni de rĂ©servations de taille, une variable contenant tout simplement ce quâon a mis dedans (scalaire ou tableau ; boolĂ©ens, entiers, caractĂšres ou nombres flottants) ;
- possibilitĂ© dâinterrompre un programme, dâinterroger et de modifier des variables, et de reprendre lâexĂ©cution ; ou bien de tout stocker en lâĂ©tat et de reprendre le lendemain en retrouvant les objets de la zone de travail â fonctions, variables et Ă©tats dâexĂ©cution â exactement comme on les avait laissĂ©s (bref, de la persistance avant la lettre⊠dĂšs 1969 !) ;
- gestion dynamique de mémoire automatique ;
- pas de syntaxe compliquĂ©e pour afficher des rĂ©sultats : quand un rĂ©sultat est calculĂ© sans ĂȘtre envoyĂ© ensuite dans une variable, alors il est affichĂ© simplement au terminal dans le format estimĂ© le plus lisible.
Exemples
Ainsi pour écrire « Hello, World! » en APL, les choses se passent ainsi :
- 'Bonjour, le monde !' â tapĂ© par lâutilisateur
Bonjour, le monde ! â rĂ©ponse du terminal
- 2+2 3 5 7 â donne
4 5 7 9
Il faut y ajouter la possibilitĂ© spectaculaire dâindexer un tableau par un autre tableau. Ainsi :
- 'LE CHAT'[7 5 2 3 4 6 7] â donne
THE CAT
Voire :
- 'LE CHAT'[2 3 ⎠7 5 2 4 6 7] â donne
THE
CAT
Pas de traduction automatique ici ni dans un cas ni dans l'autre : l'indice a simplement été remplacé par ce qui était indicé (ainsi T est le septiÚme caractÚre), ce qui est le propre de l'opération d'indexation. Ce qui est indicé prend également la forme de l'indice (ainsi, une matrice 2x3 dans le second cas)[18].
Grùce à sa priorité de droite à gauche, le langage se lit simplement, comme une langue naturelle : « 1 plus somme des inverses des factorielles des entiers de 1 à 30 » s'écrira :
- 1++/Ă·!âł30 â qui donne
2.718281828
Le mĂȘme rĂ©sultat (c'est-Ă -dire la valeur de e) peut s'obtenir en frappant directement *1, ce qui signifie exponentielle 1.
L'APL des origines ne connaissait que scalaires et tableaux (numĂ©riques ou de caractĂšres). Il gĂšre maintenant des tableaux de tableaux et permet Ă©galement Ă l'utilisateur de dĂ©finir lui-mĂȘme ses propres « opĂ©rateurs »[19].
Il travaille Ă©galement en nombres complexes automatiquement si les besoins du calcul le demandent. La valeur s'Ă©crit 0J1â
et en consĂ©quence 0J1*2â
donne ÂŻ1J0â
. NARS2000 reconnaĂźt pour sa part non seulement les nombres complexes, mais Ă©galement les quaternions[20] - [21] : si l'on Ă©crit 0+1J
, le systĂšme l'imprime - et l'interprĂšte - comme 0i0j1k0
et 0i0j1k0*2
vaut bien entendu ÂŻ1i0j0k0
. Les octonions sont également supportés (1i2j3k4l5ij6jk7kl8
).
Opérations sur tableaux
Le caractĂšre â
se lit "quad".
- ââAâ2 2âŽâł4 â imprime une matrice A de taille 2x2 constituĂ©e des nombres de 1 Ă 4
1 2
3 4
- A=2 â donne une matrice boolĂ©enne indiquant les Ă©lĂ©ments de A Ă©gaux Ă 2
0 1
0 0
- A, A â concatĂšne, horizontalement, la matrice A avec elle-mĂȘme, formant une matrice de 2x4
1 2 1 2
3 4 3 4
- A, 5 â concatĂšne le scalaire 5 Ă la matrice A
1 2 5
3 4 5
- A, +/A â concatĂšne verticalement (âȘ) Ă A un vecteur 'somme de A par colonnes' (+/A)
1 2 3
3 4 7
- AâȘ+âżA â donne
1 2
3 4
4 6
mĂȘme chose suivant l'autre axe : colonnes
- A, [.5]0 â donne
1 2
3 4
0 0
0 0
concaténation en créant une nouvelle dimension : la matrice devient cube
- A, [1.5]0
1 2
0 0
3 4
0 0
Cette opération a créé une nouvelle dimension sur un autre axe.
Le produit externe alias cartésien, crée des tableaux à partir de vecteurs, à la maniÚre d'une table de multiplication :
1 2â.+10 20 30 11 21 31 12 22 32 ââaâ,1 2â.+10 20 30 11 21 31 12 22 32 a[âa] 11 12 21 22 31 32
La primitive â, que l'on nomme grade-up, fournit la permutation qui classe en ordre croissant les Ă©lĂ©ments d'un vecteur (et non ce vecteur classĂ© lui-mĂȘme). En d'autres termes, a[âa] renvoie toujours un vecteur triĂ©, et âa toujours un vecteur de permutation formĂ© des Ă©lĂ©ments de âłâŽa permutĂ©s, ce qui constitue un moyen concis et Ă©conomique de crĂ©er et combiner des permutations[23]. De telles permutations s'obtiennent facilement par tirage exhaustif : 52?52 pour un tirage de 52 cartes parmi 52.
Opérations sur les ensembles
Les symboles ensemblistes (â, âȘ, â©, â, â, âŠ...) existent en APL, et font l'objet d'extensions particuliĂšres permettant de travailler en ensembles simples (dont chaque Ă©lĂ©ment d'apparaĂźt qu'une fois) ou bien multisets dont chaque Ă©lĂ©ment peut apparaĂźtre plusieurs fois, utiles pour les combinaisons de Bose-Einstein[24]
Selon que les éléments de ces ensembles possÚdent une identité propre ou au contraire non (c'est-à -dire sont indiscernables), il existe douze façons bien distinctes (en) de traiter les ensembles.
Opérateurs
De mĂȘme qu'une fonction agit sur une ou plusieurs variables, un opĂ©rateur agit sur une ou plusieurs fonctions (ou opĂ©rations). Pour prendre une comparaison mathĂ©matique, « sigma » et « pi » correspondent Ă l'opĂ©rateur APL de rĂ©duction (« / ») appliquĂ© aux opĂ©rations « + » et « à ». Sigma (somme de termes) s'Ă©crit +/, « pi » (multiplication entre termes) Ă/, « union » (ou logique entre termes) âš/, « conjonction » ("et" logique entre termes) â§/, etc. On parle, dans d'autres langages, de clĂŽture (closure).
Dans la premiĂšre version dâAPL, les opĂ©rateurs sont dĂ©finis de façon fixe (rĂ©duction (/), scan (\), produit externe (°.), composition (.)...). En APL2, lâutilisateur peut fabriquer les siens Ă volontĂ© et leur donner des noms. Un opĂ©rateur peut agir indiffĂ©remment sur des opĂ©rations de base du langage ou sur des fonctions dĂ©finies par lâutilisateur dans son workspace.
APL2 introduit également l'opérateur tréma (š, nommé each), généralisant au niveau de chaque sous-tableau une opération dans les tableaux de tableaux.
âł4 1 2 3 4 âłÂšâł4 1 1 2 1 2 3 1 2 3 4 â La fonction systĂšme âfmt ("quad fmt") affiche cela plus clairement âfmt âłÂšâł4 â4âââââââââââââââââââââââââââ ââ1â â2âââ â3âââââ â4ââââââââ ââ1â â1 2â â1 2 3â â1 2 3 4ââ ââ~â â~âââ â~âââââ â~âââââââ2 âââââââââââââââââââââââââââââ ââłÂšâł5 1 0 0 0 0 1 2 0 0 0 1 2 3 0 0 1 2 3 4 0 1 2 3 4 5 âfmt ââłÂšâł5 â5âââââââââ 51 0 0 0 0â â1 2 0 0 0â â1 2 3 0 0â â1 2 3 4 0â â1 2 3 4 5â â~âââââââââ 6 2ââčââłÂšâł5 1.00 ÂŻ0.00 0.00 ÂŻ0.00 0.00 ÂŻ0.50 0.50 ÂŻ0.00 0.00 ÂŻ0.00 ÂŻ0.00 ÂŻ0.33 0.33 0.00 0.00 0.00 0.00 ÂŻ0.25 0.25 ÂŻ0.00 ÂŻ0.00 ÂŻ0.00 0.00 ÂŻ0.20 0.20
Voir note [25].
Tableaux de tableaux, et fonction â
Une opĂ©ration nommĂ©e enclose (â) permet dâencapsuler un tableau qui est alors vu comme un scalaire. Il est dĂšs lors facile de reprĂ©senter des structures complexes sous forme de tableaux ayant pour Ă©lĂ©ments dâautres tableaux. Lâexistence dâune fonction execute (â)[26] permet mĂȘme dâinclure dans ces tableaux de tableaux des dĂ©signateurs de fonction que lâon peut exĂ©cuter Ă la demande, comme en langage C. Elle permet aussi Ă un programme dâengendrer lui-mĂȘme un code quâil exĂ©cutera ensuite, comme en Lisp ou en Haskell : les fonctions sont alors juste des types de variables particuliers. Voir programmation fonctionnelle.
Le nombre d'indices dâun tableau est par convention nommĂ© rang (rank) en APL (Ă ne pas confondre avec le rang d'une matrice en algĂšbre linĂ©aire) et est toujours retournĂ© par âŽâŽ. Le nombre de niveaux dâun tableau de tableaux est nommĂ© profondeur (depth) et retournĂ© par âĄ.
Espace de travail
Lâutilisateur travaille dans un espace de travail (workspace) oĂč il stocke ses fonctions et ses variables. Il peut Ă tout moment sauvegarder lâensemble (y compris en Ă©tat dâexĂ©cution suspendue) et reprendre plus tard son travail exactement dans les conditions oĂč il lâavait laissĂ©, y compris dans l'Ă©tat oĂč il aurait interrompu un programme en cours[27]. Des commandes comme )COPY et )PCOPY, et la notion de groupe permettent des transferts aisĂ©s de fonctions et de variables dâun workspace Ă un autre (un groupe est un nom donnĂ© Ă un ensemble de fonctions et de variables qui travaillent ensemble, permettant de les importer toutes en mĂȘme temps sans dĂ©tailler leurs noms ni importer tout l'espace de travail).
Les APL commerciaux sont fournis avec plusieurs bibliothÚques d'espaces de travail d'exemples, exécutables et modifiables. En APL2 d'IBM, ces bibliothÚques portent des numéros )LIB 1, )LIB 2, etc. (voir figure de gauche).
Horodatage automatique
Chaque objet APL2 (variable, fonction ou opĂ©rateur) est automatiquement horodatĂ© dans l'espace de travail (workspace), ce qui facilite sa gestion sur le long terme. Le type et la date des objets sont retournĂ©es par la fonction systĂšme âAT (=ATtributes). CouplĂ© aux opĂ©rations de tri â (grade-up) et â (grade-down), cet horodatage des objets facilite beaucoup le processus de dĂ©veloppement.
âNL (=Name List) ramĂšne la liste des Ă©lĂ©ments de la zone de travail, âNL 3 ramĂšne la liste de ses seules fonctions. Comme on le voit, la concatĂ©nation horizontale de tableaux de nature diffĂ©rente juste par une virgule rend aisĂ©s les affichages.
En NARS2000, la fonction systĂšme âvr liste de plus une fonction avec ses numĂ©ros de ligne, la derniĂšre ligne contenant son horodatage. Le rĂ©sultat est un simple vecteur de caractĂšres contenant quelques caractĂšres de retour ligne, la colorisation standard des caractĂšres Ă©tant effectuĂ©e par le systĂšme
ĂlĂ©ments historiques
- APL travaillant sur des vecteurs, il devait distinguer lâopĂ©ration « - » (moins), dĂ©signant l'opĂ©ration de soustraction d'un opĂ©rande numĂ©rique (dimensionnĂ© ou non) ou son changement de signe du simple signe nĂ©gatif qui ne porte que sur le scalaire qui le suit immĂ©diatement, d'autre part. Celui-ci est notĂ© par une barre supĂ©rieure « ÂŻ ».
- Ainsi, 7 5 6 - 4 3 2 produit 3 2 4, mais 7 5 6 ¯4 3 2 produit⊠7 5 6 ¯4 3 2
- LorsquâAPL tourne sur un systĂšme, par exemple le RS/6000, on sâĂ©carte de la tradition en le nommant non pas APL/6000, mais bien APL\6000. Pourquoi ? Parce que « / » est un opĂ©rateur de rĂ©duction et que « \ » est lâopĂ©rateur d'expansion. Logique.
- APL Ă©tait au dĂ©part utilisĂ© uniquement en interne par IBM, sans plan de commercialisation. Selon Yves Le Borgne, la NASA fit toutefois pression pour que ce langage fĂ»t mis Ă sa disposition, menaçant de changer de constructeur si elle nâobtenait pas satisfaction. Le langage fut mis timidement au catalogue en 1969 Ă titre de produit complĂ©mentaire, puis en quelques annĂ©es prit le statut de langage stratĂ©gique, quâil garda jusquâen 1990 (Ă partir de cette date, ne pouvait plus ĂȘtre considĂ©rĂ© comme stratĂ©gique un langage ne tournant pas sur toutes les plateformes, et porter APL sur lâAS/400 ne prĂ©sentait pas dâintĂ©rĂȘt pour le crĂ©neau spĂ©cifique de cette machine, essentiellement les besoins de gestion d'entreprises de taille moyenne).
Idiomes APL
Les tournures idiomatiques APL les plus utiles furent collationnées dans les universités au moins depuis 1977[28] et leur liste reste mise à jour sur un wiki[29] en Unicode.
Quelques-unes de ces tournures concernent le premier APL, qui ne possĂ©dait pas les tableaux de tableaux; elles restent valides aujourd'hui, bien qu'APL2 permette d'en simplifier plusieurs. IBM met Ă disposition une version adaptĂ©e Ă APL2[30], dont les exemples peuvent ĂȘtre copiĂ©s/collĂ©s dans un interprĂ©teur, ainsi que l'espace de travail IDIOMS dans son TRYAPL2 gratuit destinĂ© au DOS ou Ă une DOSBox quelconque. Dyalog APL met Ă disposition sa propre liste[31]. Les consulter est utile pour se familiariser avec le mode de pensĂ©e propre Ă APL et dĂ©couvrir concrĂštement l'usage de ses primitives et opĂ©rateurs.
Stanley Jordan a présenté à l'ACM une communication sur l'usage de phrases APL pour assister la composition musicale[32]
Enfin, le site rosettacode donne plusieurs exemples de petits problÚmes avec leur résolution en APL ainsi que (de façon en général moins concise) dans d'autres langages : https://rosettacode.org/wiki/Category:APL
Implémentations
Gratuites
Quatre grandes implémentations en Open Source d'APL sont téléchargeables gratuitement :
- A+, dialecte d'APL disponible dans les dĂ©pĂŽts standards de plusieurs distributions Linux, dont Ubuntu, sous le nom de aplus-fsf. Ce langage A+[33] ne doit pas ĂȘtre confondu avec la certification A+ de connaissances de base en usage de l'informatique. Intensivement utilisĂ© chez Morgan Stanley[34] - [35], il conserve des primitives APL comme le âł, mais remplace par exemple le ⎠par #. Il possĂšde aussi un mode de reprĂ©sentation ASCII oĂč on Ă©crit juste iota, rho, take, each, etc.
- GNU APL[36] directement utilisable sous Linux, ainsi que sous Windows au moyen de Cygwin. Le soin de charger une des polices de caractĂšres APL dans la fenĂȘtre correspondante est laissĂ© cette fois-ci Ă l'utilisateur et celui-ci doit modifier son clavier soit avec setxkbmap soit avec xmodmap.
- MVT for APL est un portage de l'APL\360 sur beaucoup d'autres plateformes y compris le Raspberry Pi[37], avec une trentaine d'espaces de travail (workspaces) dont une, PLOT, pour tracer des semigraphiques, le tout pour un usage strictement privé. Il utilise l'émulateur Hercules[38], livré avec l'ensemble.
- NARS2000[39], muni d'un installeur pour Windows, et disponible en versions 32 et 64 bits[40]. La version 0.4.5.68 a montré fonctionner également depuis Wine sous Linux[41] (voir illustration ci-contre)[42]. Historiquement, NARS est issu de travaux de la société STSC, Scientific Time-Sharing Corporation[43]. La version 0.5.8.8 disponible en décembre 2018 passe automatiquement si besoin les calculs sur entiers en entiers de précision illimitée par défaut, en lieu et place d'une représentation flottante (par exemple
!508
, factorielle 508; dont le résultat comporte 1156 chiffres). Les quotients de tels entiers géants sont conservés en interne sous forme de rationnels avec un numérateur et un dénominateur de précisions illimitées également. La version 0.5.19.0 de juillet 2019 autorise les espaces soulignés dans l'écriture des nombres (exemple 1_000_000) et introduit une nouvelle commande )BOX.)BOX OFF
est le fonctionnement normal.)BOX ON
rĂ©alise unâfmt
automatique pour chaque sortie.
- La demande de calculs en prĂ©cision illimitĂ©e[44] se fait en faisant suivre les constantes d'un suffixe x qui est propagĂ© ensuite automatiquement dans tous les calculs oĂč elles interviennent. Les variables
âpp
(prĂ©cision d'affichage) etâfpc
(précision des flottants) permettent de limiter la taille des affichages et la précision des flottants étendus à ce qui est jugé strictement nécessaire.
- En 2020, la version alpha de NARS2000 permet le type de variable "intervalle"signalé par le suffixe ±, qui se propage à tous les calculs et fournit de ce fait la précision du résultat
- Orienté recherche, NARS2000 se munit dans sa branche alpha (2020) de l'arithmétique d'intervalles en nombres entiers et son extension aux calculs matriciels avec des hypercomplexes en flottants de précision numérique arbitraire[45]ce qui permet de donner des résultats ± quelque chose dÚs lors que ce suffixe accompagne l'une des constantes du calcul. Chaque résultat est alors accompagné de sa fourchette de signification tenant compte des lacunes de la représentation flottante, et propagée dans tout calcul :
(â2±)*2 2v±2.4EÂŻ38v âfpcâ200 (â2±)*2 2v±5EÂŻ60v âč2 2âŽâł4± ÂŻ2v±6.6EÂŻ60v 1v±3.7EÂŻ60v 1.5v±4EÂŻ60v ÂŻ0.5v±1.7EÂŻ60v aâčaâ2 2âŽâł4± 1v±3.3EÂŻ60v 0v±5EÂŻ60v 9.334522963EÂŻ61v±1.4EÂŻ60v 1v±3.7EÂŻ60v
- Manuel d'initiation Ă NARS2000 (PDF, gratuit)
- OpenAPL, sur SourceForge[46] et mis Ă jour le .
Commerciales avec cas de gratuité
- Dyalog laisse son APL - et les espaces de travail qu'il y a associés - en libre téléchargement sous réserve d'un engagement sur l'honneur de ne pas l'utiliser à des fins commerciales et de ne pas le transmettre directement, afin sans doute de permettre une traçabilité fiable de ces téléchargements[47] Cette société se montre par ailleurs trÚs coopérative avec les enthousiastes d'APL, engageant parfois de brefs dialogues par courriel avec certains d'entre eux. Google lui a réservé une place dans une de ses conférences annuelles[48].
- IBM, premiÚre société à avoir produit un APL, propose une version téléchargeable d'essai gratuite de son APL2 limitée à 5 heures de temps CPU, ce qui avec les processeurs de 2016 permet de six mois à un an d'essais personnels pour explorer le langage et les workspaces qui l'accompagnent. Cette version inclut un grand nombre d'espaces de travail qui rendent opérationnel rapidement, en particulier sur la création de graphiques vectoriels 2D et 3D (particuliÚrement aisés à représenter sous forme de matrices APL) avec Graphpak. Attention : sa répartition de clavier, aussi bien en AZERTY qu'en QWERTY, lui est propre et diffÚre légÚrement des autres implémentations.
- MicroAPL fournissait une version gratuite de son produit APLX, limitĂ©e Ă 30 jours pour Ă©valuation. La version Linux est cependant utilisable indĂ©finiment pour usages non-commerciaux[49]. La version Windows comportait un installeur[50]. En , MicroAPL arrĂȘte ses activitĂ©s et confie Ă Dyalog le soin de les proposer avec un statut semblable Ă l'abandonware[51].
Diverses
Des interprĂ©teurs APL ont existĂ© pour lâIBM 7090, les IBM 360 Ă zSeries (sous TSO, VM/CMS et mĂȘme CICS!), lâIBM 1130, le Xerox XDS Sigma 7 alias CII 10070, et le CII Iris 80, le Bull DPS-7, le Burroughs B5500, le Bull SEMS T1600 (ex-TĂ©lĂ©mĂ©canique Ălectrique T1600), la sĂ©rie des Mitra, etc.
La Sligos avait écrit en 1976 un APL pour Iris 80 (CII) afin d'offrir ce langage en service de télétraitement. Le projet fut abandonné quelques mois aprÚs sa réalisation pour des raisons de performances insuffisantes lors de la montée en charge. Les espaces de travail destinés à la migration du 370 vers l'Iris 80 furent légÚrement modifiés pour permettre la migration inverse.
APL Ă©tait aussi fourni directement en ROM dans des ordinateurs personnels du dĂ©but des annĂ©es 1970 (avant Apple, donc) comme le MCM-70, qui possĂ©dait un affichage d'une ligne[52], ou lâIBM 5110 modĂšles A et C.
Des versions station de travail et ordinateur personnel en ont aussi Ă©tĂ© commercialisĂ©es ou rĂ©alisĂ©es gratuitement pour AIX, Solaris, Linux, Windows, Mac OS, OS/2. Il en existe mĂȘme pour le DOS (version gratuite nommĂ©e TRYAPL2, en version anglaise comme française; la francisation a Ă©tĂ© rĂ©alisĂ©e par l'AFAPL[53])... ainsi que pour Android[54] !
La sociĂ©tĂ© Microsoft avait entrepris deux implĂ©mentations du langage sur 8080 et 6800, d'aprĂšs une lettre de Bill Gates aux utilisateurs de l'Altair BASIC[55]. Le succĂšs de DOS, de Windows et surtout des tableurs Multiplan et Excel fit abandonner ce projet, qui aurait eu un public potentiel bien plus restreint : le trĂšs grand public rĂ©clamait alors des applications clĂ©s en main (Ă l'exemple de VisiCalc sur Apple II) et non des langages pour les programmer eux-mĂȘmes.
Environnements informatiques
Le mĂ©canisme dâĂ©change dit des processeurs auxiliaires permet Ă des workspaces APL de communiquer avec le monde extĂ©rieur : fichiers, SQL/DB2, TCP/IP, X-window, OpenGL, ainsi qu'autres workspaces APL et consoles du rĂ©seau actives au mĂȘme moment si celles-ci en donnent lâautorisation. On peut ainsi commencer Ă mettre au point un calcul sur un PC, puis une fois quâil est au point lâexĂ©cuter Ă distance sur un ordinateur central Ă©quipĂ©s de dizaines de processeurs parallĂšles depuis la mĂȘme session sur PC.
Les processeurs auxiliaires permettent mĂȘme Ă des sessions de station de travail de communiquer efficacement avec des sessions du mĂȘme langage sur mainframe, ou encore entre elles. Des calculs matriciels de trĂšs grande taille peuvent ainsi ĂȘtre distribuĂ©s en rĂ©seau.
Les processeurs auxiliaires se codent le plus souvent en langage C.
Quelques-uns livrés avec IBM APL2[56] sont AP124 (adressage direct de l'écran, genre curses), AP127 et AP227 (resp. accÚs aux bases de données DB2 et ODBC), AP144 et AP145 (resp. adressages X-Window et Windows), AP200 (coordinations de sessions APL distinctes), AP207 (processeur de graphiques interactifs, utilisé par GRAPHPAK).
Glyphes
' | ( | ) | + | , | - | . | / | : | ; | < | = | > | ? | [ | ] |
\ | _ | š | ÂŻ | Ă | Ă· | â | â | â | â | â | â | â | ⣠| ⧠| âš |
â© | âȘ | ⌠| â | †| â„ | ⏠| â | â | â | â | †| â„ | â | ⶠ| â· |
âž | âč | âș | â» | ⌠| ✠| ⟠| âż | â | â | â | â | â | â | â | â |
â | â | â | â | â | â | â | â | â | â | â | â | â | â | â | â |
â | â | â | â | â | â | â | â | â | ⥠| âą | ⣠| †| â„ | ⊠| ⧠|
âš | â© | âȘ | â« | ⏠| â | âź | ⯠| â° | â± | âČ | âł | ⎠| â” | ⶠ| â· |
âž | âč | âș | â | â |
Tous les caractĂšres APL ne sont pas encore associĂ©s Ă une signification aujourd'hui (2020). GNU APL, Dyalog APL et NARS2000 en utilisent trois : âș et â”, qui dĂ©signent le premier et le dernier argument d'une fonction, et λ qui en dĂ©signe le rĂ©sultat. Exemple :
)FNS SUM âSUM[â]â [0] λââș SUM â” [1] λâ âș + â”
La dĂ©finition de cette fonction se ferait par SUM â { âș + â” }
. Celle de moyenne se ferait de mĂȘme par moyenneâ{(+/â”)Ă·âŽâ”}
. Il s'agit bien de programmation fonctionnelle.
â Surface d'un polygone en Dyalog APL surfaceâ{Ă·â2âą-/{+âżĂ/â”}š(0 1)(1 0)âšââ”} â dĂ©finit la fonction "surface" surfaceââœ(0 3)(3 0)(0 0) â applique cette fonction Ă un triangle donnĂ© 4.5
âș et â” reprĂ©sentent ci-dessus les opĂ©randes dâune fonction. De mĂȘme et par convention âșâș et â”â” reprĂ©sentent les fonctions sur lesquelles sâapplique un opĂ©rateur.
Quelques implémentations comme NARS2000 proposent des utilisations mathématiquement puissantes d'autres symboles[57].
Polices APL existantes
En , les principales polices APL téléchargeables depuis l'Internet sont les suivantes[58] :
- APL385 Unicode (Dyalog APL)[59]
- APX Upright (MicroAPL APLX)
- Courier APL2 Unicode (IBM APL2)
- SImPL (NARS2000)
Les caractÚres Unicode APL2 sont définis dans l'un des plans de la police Arial[60], et permettent donc de copier/coller directement de l'APL depuis une session de calcul (voire une page web) dans un traitement de texte ou l'inverse, ce qui était impossible commodément avant l'Unicode.
L'Unicode APL, encodé en UTF-8, permet de :
- copier/coller des expressions et programmes APL depuis des pages web.
- les imprimer sous toutes les imprimantes actuelles
- se connecter par telnet ou ssh Ă des serveurs offrant un service APL
- rediriger (piping) des flots UTF-8 vers l'interpréteur APL, ce qui permet d'utiliser APL pour des scripts
- échanger des programmes avec des interpréteurs ou des utilisateurs APL utilisant d'autres APL.
- copier du code APL dans des documents.
Les navigateurs Web honorent depuis 2010 l'affichage des caractĂšres APL. Beaucoup de tablettes en sont capables en 2015.
Clavier
La disposition du clavier APL d'origine pour les Ătats-Unis avait Ă©tĂ© choisie pour des considĂ©rations mnĂ©motechniques, par exemple ? associĂ© au Q (Question mark) ⎠(rho) au R, etc. Une question a Ă©tĂ© de savoir si le clavier APL français devait associer un caractĂšre Ă la touche elle-mĂȘme (? serait alors associe au A et non plus au Q) ou Ă sa signification (ce qui aurait eu pour effet de combiner les spĂ©cificitĂ©s francophones aux spĂ©cificitĂ©s d'APL.
- APL/APL2, d'IBM, a retenu la premiĂšre solution.
- Dyalog APL propose ce clavier français. Les caractÚres APL s'obtiennent par composition avec la touche Ctrl. Quand on désire restaurer les comportements standards de Ctrl-X, Ctrl-Z, etc., cliquer sur le bouton FRA en bas à droite de la barre de tùches de Windows permet de commuter entre clavier français et clavier APL.
- GNU APL laisse le spécialiste X-window décider, s'il en a la compétence, des questions d'interface. Quelques configurations de clavier sont cependant fournies avec lui. Le basculement du clavier entre APL et français par la combinaison de touches Alt-CapsLock est expliqué dans l'article GNU APL.
- NARS2000 permet de configurer de façon graphique et interactive son clavier à la demande si on le désire, à partir d'un des modÚles de dispositions fournis. Sa configuration de base du clavier français utilise les caractÚres existants et permet d'obtenir les autres par la touche Alt (Alt-i pour Ⳡ(iota), Alt-r pour ⎠(rho), etc. Seuls les crochets exigent l'usage du caractÚre de composition Ctrl).
La question est moins futile qu'elle ne le semblerait : l'usage d'APL demande beaucoup de concentration. Si lors des frappes de caractÚres cette concentration est interrompue par une interrogation sur la touche à frapper sur le clavier et/ou le modificateur à enfoncer (Shift, Alt ou Ctrl), l'usage de ce langage deviendra inefficace quelles que soient ses qualités au départ.
On peut aussi se créer une disposition de clavier sur mesures, que ce soit en Windows[61] ou en X-Window (setxkbmap -layout us,apl -variant ,dyalog -option grp:lswitch
, au détriment cependant de l'interopérabilité si on vient à utiliser d'autres machines que la sienne.
Ce document de 5 pages détaille une implémentation possible de clavier APL sous Linux :
- (en) [PDF] Supporting APL keyboards on Linux
Autour du langage
Situation présente
Lâapparition du tableur, plus intuitif et plus facile Ă manier, a fait disparaĂźtre une partie de lâintĂ©rĂȘt du langage. Cela nâenlĂšve rien pour autant Ă sa puissance dâexpression et Ă sa concision, et plusieurs interprĂ©teurs APL sont tĂ©lĂ©chargeables gratuitement sur Internet, pour le PC (Linux ou Windows) comme pour le Macintosh. Les caractĂšres APL/APL2 sont prĂ©sents dans lâUnicode[62].
APL traitant globalement les tableaux, ses implĂ©mentations tirent aisĂ©ment parti des possibilitĂ©s de calcul parallĂšle ou de pipeline des processeurs modernes. Elles utilisent extensivement les possibilitĂ©s vectorielles du S/390 (zSeries), de lâarchitecture PowerPC (pipeline optimisĂ© d'instructions similaires) et des instructions multimĂ©dia (SSE) de lâarchitecture Intel/AMD. Dans la mesure oĂč APL traite globalement les tableaux sans imposer le dĂ©tail du traitement, plusieurs de ses primitives et opĂ©rateurs peuvent ĂȘtre implĂ©mentĂ©s en calcul parallĂšle CUDA, voire en calcul quantique[63], local ou distant si des circuits de calcul de ce type deviennent disponibles.
L'opĂ©rateur â permet d'exprimer le produit cartĂ©sien entre deux vecteurs de donnĂ©es, donc toutes les combinaisons de leurs opĂ©randes (opĂ©ration en N^2) et ensuite l'opĂ©rateur / d'en comprimer le rĂ©sultat selon une autre opĂ©ration. L'ensemble exprime le calcul combinatoire demandĂ© Ă ce calculateur, de mĂȘme qu'une requĂȘte SQL exprime ce qui est demande Ă une base de donnĂ©es, sans avoir Ă rentrer dans le dĂ©tail du calcul.
La version 17.0 de l'APL de Dyalog () utilise automatiquement les instructions vectorielles des architectures x64, POWER et ARM[64].
Deux successeurs d'APL sont le langage A+, et le langage J, ce dernier ayant Ă©tĂ© promu par K. E. Iverson lui-mĂȘme, et ne nĂ©cessitant pas lâusage de caractĂšres spĂ©ciaux. APL possĂšde toutefois une lisibilitĂ© supĂ©rieure, Ă condition de disposer de la police de caractĂšres appropriĂ©e. La mise Ă disposition du langage lui-mĂȘme nâaurait pas Ă©tĂ© possible dĂšs 1969 sans les terminaux IBM Ă boule Ă©galement nommĂ©s Selectric (par exemple le 2741). Sur les terminaux purement alphanumĂ©riques 2260, il fallait utiliser des mots-clĂ©s peu lisibles. Les terminaux 3270, dĂšs le 3277, ont permis par la suite les jeux de caractĂšres APL ainsi que les minuscules latines.
Pour information, des calculs sur un Celeron 300 MHz de 2004 sâeffectuent Ă peu prĂšs en un dixiĂšme du temps de calcul quâils prenaient en 1970 sur un IBM 360/91. Le cĆur de lâinterprĂ©teur tient entiĂšrement dans le cache d'instructions dâun microprocesseur contemporain (2020)[65], donnant Ă APL des performances en exĂ©cution comparables Ă celles de langages compilĂ©s, comme dans cet exemple :
âcr 'test' test;s âts sâ+/Ă·âł1000000 âts test 2016 5 7 14 20 52 301 2016 5 7 14 20 52 350
On voit ici que le calcul du nombre harmonique H1000000 prend 49ms (350 - 301) dans le time stamp[66]. Ce calcul a Ă©tĂ© rĂ©alisĂ© sur un Core i7 4500U, passmark de 3800 environ[67]. Il prend 36ms sur un Core i7 4790 au passmark de 10000 (Ă comparer, sur cette seconde machine, avec 13ms pour le mĂȘme calcul en langage C et, curieusement, 13ms aussi en Dyalog APL 64 bits version 15).
Graphpak est un des espaces de travail fournis avec l'APL d'IBM et combinable avec toute autre application de lâutilisateur pour lui donner des possibilitĂ©s dâentrĂ©e-sortie graphiques 2D comme 3D. La structure des appels du langage (pas de nĂ©cessitĂ© de parenthĂšses pour les appels de fonctions et de sous-programmes) permet de donner des ordres ayant une vague allure de langage naturel. Les Ă©lĂ©ments IBM et AP, fournis avec ce workspace, sont simplement des matrices contenant des coordonnĂ©es de points respectivement en 2D et en 3D, la premiĂšre colonne spĂ©cifiant une indication de tracĂ© (couleur et style), les autres les coordonnĂ©es en x, y et Ă©ventuellement z. Des fonctions permettent Ă©galement les entrĂ©es graphiques avec la souris ou le trackpad.
Quelques opinions
- « APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums ».
- « APL est une erreur, poussĂ©e jusqu'Ă la perfection. Câest le langage de lâavenir pour les techniques de programmation du passĂ© : il crĂ©e une nouvelle gĂ©nĂ©ration de fainĂ©ants du codage».
- Roy Keir
- « APL is a write-only language. I can write programs in APL, but I canât read any of them ».
- « APL est un langage en écriture seule. Je peux écrire des programmes en APL, mais je ne peux en lire aucun. »
- Joel Moses
- « APL is like a diamond. It has a beautiful crystal structure; all of its parts are related in a uniform and elegant way. But if you try to extend this structure in any way - even by adding another diamond - you get an ugly kludge ».
- « APL est comme un diamant. Il a une superbe structure cristalline ; toutes ses parties sont en correspondance dâune façon uniforme et Ă©lĂ©gante. Mais si vous essayez dâĂ©tendre cette structure de quelque façon que ce soit â mĂȘme en y ajoutant un autre diamant â vous obtenez un bricolage hideux ». (Allusion au passage dâAPL Ă APL2).
Lisibilité
Ăpargnant lâusage des indices et des boucles en multipliant les opĂ©rateurs, APL permet l'Ă©criture rapide et concise d'expressions ou de programmes qui seraient bien plus longs avec un langage classique. Vu la compacitĂ© et la puissance du langage, quelques puristes ont considĂ©rĂ© un temps que pour ĂȘtre « Ă©lĂ©gant », un programme APL ne devait pas dĂ©passer une ligne de code. Ces programmes, nommĂ©s one-liners dans la revue de l'ACM APL Quote-Quad Ă©taient les ancĂȘtres des deulignes[70] de ce qui sera plus tard Hebdogiciel.
Quelques problĂšme rĂ©crĂ©atifs Ă©taient parfois posĂ©s. Par exemple « comment effectuer la somme des Ă©lĂ©ments d'un tableau A (en principe +/A) quand les touches + et / ne fonctionnent pas ? ». Une rĂ©ponse possible Ă©tait 1â„A (Ă©valuation de A comme un nombre exprimĂ© en base 1 !). Un autre Ă©tait : "trouver la façon la plus concise de calculer la moyenne d'un vecteur V (ordinairement notĂ© (+/V)Ă·âŽV) avec pour rĂ©ponse VâčV=V.
Cependant, la multiplicité des glyphes, leur usage unaire ou binaire, les superpositions de caractÚres censées les exprimer à l'époque des terminaux électromécaniques[71] ont fait qualifier ce langage de cryptique. L'absence de mécanismes conditionnels amenait par ailleurs chacun à employer diverses astuces nuisant à la lisibilité et à la maintenance des applications, sauf à introduire des fonctions au nom aussi parlant que possible.
âcr 'if' zâa if b zâb/a 'bonjour' if 1<0 'bonjour' if 1<3 bonjour
Questions de sémantique
Quelques cas trÚs particuliers de sémantique partagÚrent les différents éditeurs. Ainsi, si A, B et C sont trois vecteurs de trois éléments, doit-on comprendre l'expression A B C[2]
comme un vecteur de vecteurs ayant pour éléments le vecteur A, le vecteur B et le scalaire C[2] ? Tel est le choix d'interprétation de NARS2000. C'est également celui de GNU APL, comme celui d'IBM pour son APL2.
Dyalog, premier à introduire les tableaux de tableaux dans un APL commercial, avait alors fait le choix inverse et considérait l'expression comme équivalente à B
. Bien qu'il suffise d'utiliser des parenthĂšses pour Ă©viter toute ambiguĂŻtĂ©, cet Ă©diteur qui ne souhaitait pas introduire de problĂšmes de portage introduisit une variable systĂšme nouvelle, âML (migration level). Si cette variable est Ă 0, l'interprĂ©tation Dyalog s'applique. Sinon, c'est l'interprĂ©tation gĂ©nĂ©rale. Par ailleurs, la valeur de cette variable systĂšme peut ĂȘtre diffĂ©rente dans des fonctions diffĂ©rentes qui lui donnent une valeur locale (dans un Ă©cosystĂšme de fonctions, par exemple), ce qui permet une interopĂ©rabilitĂ© souple.
Adressage associatif
APL nâa jamais officiellement connu les tables associatives, indexant un tableau avec autre chose que des valeurs entiĂšres, incorporĂ©es dans d'autres langages interprĂ©tĂ©s (Perl, Javascript, PHP...). On ne peut donc pas Ă©crire :
CAPITALE[â'FRANCE']ââ'PARIS'
ou, pour rester dans le vectoriel,
CAPITALE['FRANCE' 'ESPAGNE' 'ITALIE']â'PARIS' 'MADRID' 'ROME'
ce qui est contraignant, car :
- une telle extension ne demanderait que trĂšs peu de modification de syntaxe, et n'en demanderait aucune des programmes existants ;
- les langages modernes permettent l'indexation par des chaĂźnes de caractĂšres (soit l'indexation des tableaux comme en PHP qui autorise Ă Ă©crire $capitale['France']='Paris';, soit via des objets voisins comme les tableaux associatifs en Perl[72]) ;
- rares sont les applications oĂč il ne faille pas gĂ©rer des accĂšs par symboles plutĂŽt que par numĂ©ros. Si APL ne le permet pas de façon immĂ©diate, lâutilisateur se tourne naturellement vers dâautres langages rĂ©pondant mieux Ă ses besoins.
Il est peu ergonomique de contourner cette lacune au prix de variables supplĂ©mentaires, par exemple : FRANCEâ32 (dĂšs lors, CAPITALE[FRANCE]ââ"PARIS". Si le pays provient d'une saisie, l'indice peut ĂȘtre retrouvĂ© par "execute" : â"FRANCE" qui rend 32, mais l'application perd en robustesse et on encombre inutilement la table des symboles (APL/X contourne la difficultĂ© par des namespaces).
Une autre maniĂšre est de dĂ©finir un vecteur des noms de pays : PAYS â'BELGIQUE' 'FRANCE' , l'instruction devenant alors : CAPITALE[PAYSâłâ'FRANCE']ââ'PARIS'
Mais en ce cas, indépendamment de la lisibilité plus faible, le temps d'accÚs n'a plus le moindre rapport avec un accÚs direct de type « hash » en Perl ou PHP, surtout si s'il y a des centaines de noms. Non seulement la lisibilité des programmes n'y gagne rien, mais leur facilité de maintenance s'effondre compte tenu des variables surajoutées au programme.
Ce besoin est pris en compte dans les objectifs du projet NARS[73]. Dyalog APL permet de le contourner par son mécanisme non-standard des espaces de noms (namespaces)[74].
Approche objet et programmation fonctionnelle
Dyalog propose quelques espaces de travail et documentations PDF sur l'approche objet en APL, ainsi que sur la programmation fonctionnelle. Un exposé particuliÚrement clair sur APL en tant que notation algébrique rendue plus cohérente qu'en algÚbre classique, et incluant des éléments de programmation fonctionnelle et effectué chez Google par Morten Kromberg est visible ici.
Essayer APL
Sans avoir besoin d'installer APL, on peut l'essayer sur cette page : http://tryapl.org/ pour frapper quelques expressions, les exécuter et en examiner le résultat (illustration de gauche).
Pour inclure dans la ligne de test les caractĂšres APL de son choix, on les clique dans la partie de gauche de l'Ă©cran (onglet "Primer"). La variable systĂšme âPP (printing precision) spĂ©cifie le nombre de dĂ©cimales Ă afficher. D'autres variables sont âIO (index origin, 0 ou 1), âTS (time stamp, horodatage), etc. Des suggestions d'expression Ă exĂ©cuter sont proposĂ©es lorsque le pointeur de la souris passe au-dessus de tel ou tel caractĂšre, entre autres les opĂ©rateurs de tri croissant et dĂ©croissant, â (grade up et â (grade down). La ligne frappĂ©e est exĂ©cutĂ©e lorsqu'on presse la touche Envoi (retour ligne), Ă la suite de quoi le rĂ©sultat de l'exĂ©cution s'affiche et une nouvelle expression peut ĂȘtre introduite.
Cette page TryAPL est proposée par une société, Dyalog, qui autorise à télécharger gratuitement une version complÚte de son interpréteur (version 32 bits ou 64 bits) pour des usages personnels et non commerciaux. Chaque version gratuite est "tatouée" par un numéro de série attribué à titre personnel au demandeur. Pour les usages autres que personnels existent aussi des licences d'entreprise.
Documentation
Français
- (fr) [PDF] APL vu du ciel, Bernard Legrand, AFAPL, 2006.
Anglais
- (en) Version anglophone du texte de Bernard Legrand ci-dessus
- (en) [PDF] Jeu complet des brochures de l'APL2 d'IBM
- (en) [PDF] Notes sur NARS2000
- (en) [PDF] Documentation de Dyalog APL
Vidéos
- Trois petits cours vidéo d'APL en français
- Jeu de la vie de Conway utilisant la programmation matricielle d'APL. TrĂšs spectaculaire.
- Introduction à APL⊠en 1975 (terminaux à boule sur mainframe).
- Conférences du concours APL 2014 et autres années de 2008 à 2016.
- 50 ans d'APL (plutÎt orienté Dyalog APL, hormis le début)
Usage du langage
- S. Pommier, Introduction Ă A.P.L., Dunod, (ISBN 2-04-010402-X)(Nom collectif d'une Ă©quipe de l'Ăcole nationale supĂ©rieure des mines de Saint-Ătienne : Jean-Jacques Girardot, Serge Guibout-Ribaut, Bertrand Jullien, François Mireaux et Michel Nakache[75])
- Bernard Robinet, Le langage APL, Ăditions TECHNIP,
- Robert Caillibot, Marcel Dupras et Claire Girard, Programmation en langage APL, Les Presses de l'Université Laval,
- (en) Sandra Pakin et James A. Brown, APL 2 at a Glance, Prentice-Hall, (ISBN 978-0-13-038670-0)
Fondements du langage
- (en) Federico Biancuzzi et Shane Warden, Masterminds of Programming, Conversations with the Creators of Major Programming Languages, O'Reilly, 2009. [chapitre Trois : entretien avec Adin Falkoff]
- (en) Kenneth Iverson, A Programming Language, John Wiley and Sons, (1962), lisible Ă©galement en ligne.
Gestion des objets en interne
Bibliographie
Liens externes
- Comment écrire un interpréteur APL (thÚse détaillant l'implémentation de l'interprÚte APL du T1600)
- Le langage APL sous Linux par Edmond Orignac, ENS Lyon
- (en) « Les origines d'APL »(Archive.org ⹠Wikiwix ⹠Archive.is ⹠Google ⹠Que faire ?) (vidéo)
- (en) Archives de Vector, revue de la British APL Association. Articles généraux et échange de bonnes idées.
- (en) http://aplwiki.com/ : Wiki consacré au langage APL
- (en) APL en 50 fonctions
- Exploration dâun arbre en « depth-first ».
- RĂ©solution dâun problĂšme de sudoku.
Notes et références
- Ăgalement anglais : Array Programming Language
- Kenneth Iverson sur APL
- Clavier APL : cliquer un symbole renseigne sur sa signification
- "La vraie puissance d'APL réside dans sa capacité à exprimer simplement une idée simple" (Dyalog)
- APL revit-il ?
- Un passionné décrit Dyalog APL avec enthousiasme
- « Implementing a bignum calculator - Rob Pike - golang-syd November 2014 » [vidéo], sur YouTube (consulté le ).
- « Robpike/ivy », sur GitHub (consulté le ).
- « APL in Unicode », sur sudleyplace.com (consulté le ).
- (en) [PDF] Historique d'APL, par Adin Falkoff (IBM)
- (en) [PDF] APL since 1978 (ACM, 2020)
- The Hadoop Ecosystem diapo 5 et suivantes
- Iverson appelait au début son langage IBM (Iverson's Better Maths)
- TECHNIP : Description de l'Ă©quipe informatique
- L'OFFRE APL
- recherches concernant le langage APL sur Google. En 2017, on constate sur la carte fournie par Google que l'Iran et l'IndonĂ©sie semblent porter un intĂ©rĂȘt particulier Ă ce langage/
- APL: la technologie
- Cet exemple était présenté par Claude Hans dans une brochure interne du centre scientifique IBM de Grenoble. Il fut repris par Bernard Robinet dans son ouvrage sur le langage.
- De mĂȘme qu'une primitive agit sur des opĂ©randes, un opĂ©rateur agit sur des primitives. Ainsi l'opĂ©rateur / (reduction) compose la primitive qui le prĂ©cĂšde sur la totalitĂ© d'un vecteur. Par exemple +/X effectue la somme de tous les Ă©lĂ©ments de X, x/X leur produit, etc., ce qui correspond en algĂšbre aux signes sigma et pi.
- (en) [PDF] Nombres hypercomplexes en APL
- (fr) Quaternions en APL
- Primes
- Exemple : la puissante expression
((ÏL)ÏââLÎčL,R)Îč(ÏR)ÏââLÎčR,L
- Opérateur combinatoires sur les ensembles
- La commande systĂšme
)box on
permet en NARS2000 d'effectuer unâfmt
automatique chaque fois que nĂ©cessaire, ce qui facilite l'apprentissage d'APL (Les boĂźtes s'affichent correctement avec la police SimPL, utilisable dans LibreOffice mais pas encore dans WikipĂ©dia). - Parfois nommĂ©e unquote, puisqu'inverse de la fonction de mise en forme quote (â)
- Cette notion a été reprise ensuite dans d'autres langages (FORTH, Smalltalk, C++) sous le nom de persistance.
- The APL idiom list, Yale, 1977
- The FinnAPL Idiom Library
- APL2 idioms library, IBM Endicott
- DyalogAPL : idioms cheat sheet
- Toward a lexicon of musical APL2 phrases, Stanley Jordan, 1991
- http://c2.com/cgi/wiki?AplusLanguage
- http://www.aplusdev.org/About/index.html
- Exemple de session en A+
- https://www.gnu.org/software/apl/
- http://wotho.ethz.ch/mvt4apl-2.00/
- http://www.rogerbowler.fr/hercules.htm
- http://wiki.nars2000.org/
- http://www.nars2000.org/download/Download-body.php
- http://wiki.nars2000.org/index.php?title=Platforms
- Wine ne supporte pas encore officiellement le 64 bits en 2014.
- Histoire détaillée d'APL
- Joris van der Hoeven, « Ball arithmetic », sur researchgate.net, unknown, (consulté le ).
- http://wiki.nars2000.org/index.php/Ball_Arithmetic
- OpenAPL sur SourceForge
- Depuis le 30 juin 2016, la gratuitĂ© pour l'usage strictement personnel et non-commercial s'Ă©tend mĂȘme Ă la version 64 bits, hormis pour le Raspberry Pi qui reste en 32 bits.
- Morten Kromberg, CTO, Dyalog Ltd. talks at Google
- Gratuité d'APLX sous Linux en usage personnel
- APLX, de MicroAPL.
- APLX toutes versions téléchargeable dorénavant sans frais.
- Le MCM-70. On remarque les deux unités de cassettes intégrées, qui étaient optionnelles.
- http://www.afapl.asso.fr/
- TryAPL2 pour Android, avec un clavier virtuel tactile dans le Play Store https://play.google.com/store/apps/details?id=gemesys.keybrd
- An Open Letter to Hobbyists
- APL2 version 2
- http://wiki.nars2000.org/index.php/Language_Features
- http://aplwiki.com/AplCharacters#The_.22APL385_Unicode.22_Font
- Il s'agit d'une police en chasse fixe. Une police APL333 en chasse proportionnelle est Ă©galement fournie.
- Les caractÚres soulignés n'y étant cependant pas représentés en tant que tels
- RĂ©affecter les touches d'un clavier Windows, Microsoft
- Symboles 2336 Ă 237A.
- Par exemple la métaphore de Thierry Breton sur l'appel d'offres instantané dans la section citée décrit exactement la primitive APL de compression "/".
- Spécifications techniques de Dyalog APL version 17.0
- L'interpréteur entier occupe dans les 8 Mio, ce qui est la taille du cache d'un simple Intel 8565U
- / La fonction systĂšme âts ramĂšne le temps sous la forme d'un vecteur contenant annĂ©e, mois, jour, heure, minute, seconde et millisecondes. La fonction systĂšme ât ramĂšne juste un nombre de secondes avec dĂ©cimales, Ă©valuĂ© Ă la prĂ©cision de l'horloge interne de l'ordinateur
- 45ms avec la version 0.4.14.28 de mai 2016
- Interview, 01 Hebdo
- Jacques Arsac Ă propos d'APL
- Les « deulignes » d'Hebdogiciel.
- Sur un terminal Selectric Ă boule du type IBM 2741, les caractĂšres ââčâ±âČâââżâââ, pour ne citer qu'eux, devaient s'Ă©crire par superposition de â*ââš~â§ââŁâ/-â'â€ââ„â©, ce qui Ă©tait fastidieux et tueur de concentration. MĂȘme le ! demandait une superposition du ' et du . !
- $capitale{'France'}='Paris';
- http://wiki.nars2000.org/index.php/Associative_indexing
- Espaces de noms en Dyalog APL
- Annales des mines, Compagnie française d'éditions, 1980)