GNU APL
GNU APL est une implémentation du langage APL, libre et gratuite, sous licence GNU GPL. Sa version 1.0 avait été annoncée le . Sa version 1.9 le . Cette implémentation est utilisable sous GNU/Linux, MacOS, Cygwin et Windows Subsystem for Linux.
Développé par | Jürgen Sauermann |
---|---|
Dernière version | 1.9 () |
Dépôt | svn://svn.savannah.gnu.org/apl/trunk |
Écrit en | C++ |
Système d'exploitation | GNU/Linux et BSD |
Type |
Interprète Paquet GNU |
Licence | GPL |
Site web | www.gnu.org/software/apl |
Elle implémente le standard ISO 13751, "Langage APL étendu", comportant en conséquence les tableaux de tableaux. Les bases du langage lui-même se trouvent dans l'article APL (langage).
Elle gère les nombres complexes et les variables partagées qui permettent à un espace de travail de communiquer facilement avec le monde extérieur. Elle rend même possible à qui le désire d'utiliser APL comme langage de script (sous Linux, par exemple, avec un #! apl
ou #! /usr/bin/apl
en tête du fichier), ainsi que d'exécuter depuis sa version 1.9 des instructions APL depuis un programme C !
Généralités
modifierGNU APL comportait, en , 60 000 lignes de code C++[1]. Quelques espaces de travail (workspaces) sont fournis en standard, conservés soit sous forme éditable xml, soit sous forme de dumps binaires (PSYS) bien plus rapides à charger. La commande )LIBS permet d'en avoir la liste. Il est possible aussi de stocker ou de lire un espace de travail en APL Transfer Form (ATF) telle que définie par IBM, au moyen des commandes )OUT et )IN, pour échanger des espaces de travail avec des interpréteurs différents ; toutefois aucun espace de travail n'est fourni au départ sous cette forme.
La gestion des variables partagées (⎕SVO, ⎕SVR, ⎕SVC, ⎕SVS, ⎕SVQ) est implémentée. Deux espaces de travail peuvent ainsi communiquer à condition d'être pour le moment (2016) sur la même machine.
Les processeurs auxiliaires AP100 (envoi de commandes système à l'hôte et lecture des réponses) et AP210 (lecture et écriture de fichiers) sont fournis avec leurs sources (en C) à titre d'exemple. L'utilisateur peut également étendre facilement GNU APL avec ses propres fonctions externes écrites en C.
Dans cette implémentation, les entiers comme les réels sont représentés sur 64 bits. Cela permet de travailler sans problème avec des entiers de 19 chiffres et correspond pour les réels à la double précision habituelle des calculs sur stations de travail scientifiques.
La version 1.4 (2014) a permis de communiquer avec des bases des données MySQL et PostgreSQL.
La version 1.5 (2015) utilise de plus le parallélisme des microprocesseurs multi-cœur.
La version courante est la 1.9 (2024) qui permet d'exécuter des instructions APL depuis un programme C, en construisant l'interpréteur comme une bibliothèque libapl. Voici un exemple fourni avec le package :
#include "apl/libapl.h" int main(int argc, char * argv[]) { init_libapl(argv[0], 0); return apl_exec("⎕←2 3⍴⍳6"); }
Ce programme, nommé par exemple essai.c se compilera avec cc essai.c -lapl ... et donnera ceci à l'exécution :
./essai 1 2 3 4 5 6
La version 1.9 est fournie avec une importante documentation dont : APL Communication Cookbook, APL on Macintosh, GNU APL Designers Guide, GNU APL Memory Management, GNU APL Performance, Parallel APL, Quad GTK, fournie dans des formats ASCII, HTML et PDF.
Auteur et mainteneur
modifierL'auteur et mainteneur de GNU APL se nomme Jürgen Sauermann. La documentation de GNU APL en anglais est par ailleurs très détaillée : https://www.gnu.org/software/apl/apl.html
Mise en place
modifierLa mise en place depuis la version 1.8 est très facile : on télécharge depuis un miroir GNU le fichier apl-1.8.tar.gz depuis le répertoire APL, et on l'extrait sur sa machine dans un répertoire nommé par exemple apl. Depuis ce répertoire, il suffit de frapper :
./configure make sh-install
et ensuite apl
lorsqu'on a la main au bout de quelques secondes ou minutes.
Une option de configuration de la version 1.9 est --with-libapl qui construit la bibliothèque libapl (fichiers apl.h et apl.lib) pour les exécutions d'instructions APL depuis un programme C, permettant de combiner par exemple la concision d'écriture et la puissance de traitement matriciel d'APL avec les fonctions graphiques 3D dynamiques et performantes d'OpenGL.
Glyphes et clavier APL
modifier(Vous pouvez ne pas lire cette section si la gestion des polices de caractères et du clavier ne vous passionne pas dans un premier temps)
Glyphes
modifierDepuis une console en mode texte
modifierPour utiliser GNU APL depuis une console en mode texte pur (donc pas sous X-Window), la police Unifont-APL8x16.psf est disponible par exemple dans les dépôts d'Ubuntu (paquet psf-unifont, chargeable par Synaptic) ou d'autres distributions. Chargée dans /usr/share/consolefonts/, elle comporte 512 glyphes dont, outre les caractères APL, non seulement les caractères accentués français, mais également les ligatures.
Depuis une console dans une fenêtre graphique
modifierPour usage sous X-Window, la police TrueType ttf-unifont, également présente dans les dépôts et elle aussi chargeable par Synaptic, contient les caractères nécessaires et présente le mérite de pouvoir être mise à toutes les échelles souhaitées. Le rendu de cette police est optimal dans le corps 12, qui est celui où elle a été conçue.
Clavier
modifierSous Linux, l'interpréteur, qui utilise les caractères Unicode, s'utilise dans une session de terminal que l'on ouvre en l'associant à une page de code appropriée. Cela est simple à imposer au niveau de tout le serveur X, mais peut aussi avec quelques précautions faire l'objet d'une convention différente pour chaque fenêtre, que celle-ci contienne un terminal ou non.
Une image du clavier proposé par défaut (USA) se trouve dans /etc/gnu-apl.d/keyboard1.txt. Il appartient à l'utilisateur de le modifier, au moyen d'un éditeur de texte, en fonction de sa propre configuration de clavier nationale. Depuis une session GNU APL, on peut l'afficher par ]KEYB (commençant par un ] et non un ), puisqu'il s'agit de l'appel d'un simple programme en C compilé appelé depuis GNU APL).
En NARS2000 et en Dyalog, les caractères APL s'obtiennent par combinaison d'une touche d'altération (Alt en NARS2000, Ctrl en Dyalog) et d'un caractère du clavier. En GNU APL, on peut utiliser une combinaison de touches pour basculer entre clavier texte et clavier APL.
Global pour toutes les fenêtres sur ce serveur X
modifierOn peut utiliser l'utilitaire setxkbmap : setxkbmap apl rendra les caractères APL accessibles au clavier si ttf-unifont a été installée, mais le fera pour tous les terminaux ouverts en même temps et la police APL remplacera la police par défaut (rendant alors problématique le retour à la normale par un setxkbmap fr). Cependant, setxkbmap peut être aussi utilisé pour ajouter des caractères plutôt que les remplacer; la commande est alors setxkbmap -model "pc105" -layout "fr,apl" -option "grp:alt_caps_toggle" : une fois cette commande passée, chaque fois que l'on presse Alt-CapsLock, on bascule alors entre les claviers français et APL[2],[3].
Sélectif pour chaque fenêtre
modifierDes méthodes d'entrée existent aussi pour les principales langues, dont le français avec ses touches mortes. Il est facile - bien que fastidieux dès que l'on dépasse dix touches à modifier - de changer la configuration en fonction de ses préférences (clavier IBM APL2 ou NARS2000), de ses besoins, ou de ses contraintes (par exemple combinaisons de touches pouvant être interceptées par le système en amont de la session APL).
Akt : APL Keyboard Tool
modifierSur github existe un outil permettant d'associer automatiquement une série de glyphes APL à des touches du claviers altérées par la touche Alt : https://github.com/TieDyedDevil/akt à condition de désactiver les altérations déjà définies s'il en existait (raccourcis clavier, par exemple).
Versions 1.8 (2020) et 1.9 (2024)
modifierLa version 1.8 est accompagnée, outre du fichier INSTALL traditionnel, de 9 fichiers dont l'un indique comment configurer le clavier et installer les polices, et un autre comment mettre en œuvre l'exécution multicœur. L'installation en est facilitée d'autant.
Appel et utilisation de l'interpréteur
modifierAprès avoir installé GNU APL et mis en place comme indiqué plus haut la reconnaissance du clavier étendu français + APL, il suffit de frapper apl depuis une console et on se retrouve sous l'interpréteur. On en sortira en frappant )off.
L'absence d'éditeur plein écran (contrairement à NARS2000) peut être gênante pour écrire des fonctions. Il est cependant toujours possible de les préparer dans une autre fenêtre et de les copier/coller dans la session GNU APL, ce qui constitue le principal intérêt de l'Unicode.
Depuis la version 1.8 est fourni un fichier de colorisation syntaxique pour vim.
Commandes système
modifier- )libs interroge les bibliothèques présentes. Sont marquées "missing" celles dont le répertoire n'existe pas encore. Il faudra le créer par un mkdir -p depuis une console.
- )lib liste les espaces de travail contenus dans une bibliothèque.
- )load charge un espace de travail en mémoire. )save le sauvegarde sur disque.
- )fns et )vars listent les fonctions et les variables présentes dans l'espace de travail.
- )history liste les dernières lignes saisies au clavier (instructions ou commandes APL en général).
Fonctions système spécifiques
modifier- ⎕cr affiche bien la représentation canonique d'une fonction, mais c'est 4 ⎕cr qui correspond au ⎕fmt de NARS2000 qui affiche en boites les données qui sont à sa droite.
- ⎕FIO effectue des entrées/sorties de caractères sur fichiers.
- ⎕PLOT affiche la courbe des valeurs qui sont à sa droite.
Nouveautés de la version 1.8
modifierBibliothèques disponibles
modifierLe site exercism permet d'échanger des exercices de GNU APL : https://exercism.io/tracks/gnu-apl/
Des workspaces APL comme utl contenant des fonctions APL utiles et téléchargeables se trouvent ici : https://sourceforge.net/projects/apl-library/
Essayer GNU APL sans l'installer
modifierGNU APL a été porté en Javascript par Th. Baruchel et est accessible sous cette forme sur le site à l'adresse http://baruchel.hd.free.fr/apps/apl/ (voir illustration de gauche). Junger Sauermann propose également sa propre version d'essais interactifs http://juergen-sauermann.de/try-GNU-APL, à droite :
Extension au standard
modifierLe standard APL indique ce qui doit être supporté a minima, mais n'interdit pas pour autant les extensions. Jürgen Sauermann a introduit la possibilité de transmettre une valeur entre crochets comme argument supplémentaire d'une fonction, en particulier pour généraliser la notion d'opération sur un axe comme dans ,[1]
ou +/[1]
tout en mettant en garde sur le fait que cette extension peut nuire à la compatibilité des programmes GNU APL avec les autres systèmes, si ceux-ci ne l'adoptent pas. Il fournit l'exemple suivant :
∇z←moyenne[axe] a Z←(+/[axe]a) ÷ (⍴a)[axe] ∇ moyenne[1] 5 5⍴⍳25 11 12 13 14 15 moyenne[2] 5 5⍴⍳25 3 8 13 18 23
Liens externes
modifier- (en) Site officiel
- version 1.7 de 2017
- (en) Guide de l'utilisateur
Notes et références
modifier- devenues plus de 75000 en juin 2016, plus de 80000 en juillet 2017 et plus de 100 000 en 2020 : https://www.gnu.org/software/apl/
- Plusieurs caractères comme ? ou ! sont disponibles depuis les deux claviers, bien qu'à des emplacements différents sur chacun.
- Pour choisir une autre combinaison de changement de clavier, voir ici : http://pastebin.com/a2MTnXqg