APL (Langage)

APL (Langage)

APL (langage)

Page d'aide sur l'homonymie Pour les articles homonymes, voir APL.

L'APL (initialement A Programming Language, officieusement Array-Processing Language) est un langage de programmation conçu entre 1957 et 1967 par Kenneth Iverson pour décrire commodément des opérations portant globalement sur des tableaux (booléens, numériques ou, dans une moindre mesure, de caractères).

Sommaire

Historique

APL sest montré particulièrement adapté en son temps aux calculs statistiques, aux ventilations, aux consolidations, aux descriptions fonctionnelles darchitectures comme celle de lIBM 360, aux graphiques interactifs (GRAPHPAK) et à quelques travaux en combinatoire et en théorie des graphes. Il a également été utilisé pour le prototypage dapplications et lécriture de langages de manipulation simples dans le cadre dun infocentre en masquant les symboles appropriés sous des dénominations commodes, par exemple en permettant décrire simplement :

MOYENNE X pour (+/X⍴X.

NORMALISER X pour X÷+/X

etc.

Il permet de manipuler aisément des tableaux de 1 à N indices (N variant de 7 à 255 selon limplémentation considérée) de façon globale. Les opérations puissantes de feuilletage (lamination) ainsi que les opérateurs de réduction, expansion, compression, 'produit intérieur et produit extérieur évitent souvent toute nécessité dindices de boucle explicite - ainsi dailleurs que lusage de boucles lui-même.

Il utilise de nombreux symboles représentant des opérations utilisables en programmation comme en calcul immédiat à la console, par exemple le « domino » () qui inverse directement une matrice, ou résout un système déquations linéaires surdimensionné au sens des moindres carrés.

On estimait dans les années 1970-80 quune équipe de 5 développeurs APL avait la puissance de développement dune équipe de 25 programmeurs FORTRAN[1]. Lapplication APL se montrait plus gourmande en ressources, mais le prix de celles-ci était en constante diminution.

Son interface initiale (bicolore en mode machine à écrire) a inspiré celle de logiciels comme Maple.

Présentation rapide

APL innovait à son époque par plusieurs aspects conviviaux : pas de déclaration de types ni de tailles, une variable contenant tout simplement ce quon a mis dedans (scalaire ou tableau) ; possibilité dinterrompre un programme, dinterroger et de modifier des variables, et de reprendre lexé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 dexé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 quelque chose est calculé et que le résultat nest pas mémorisé dans une variable, alors on laffiche simplement au terminal dans le format estimé le plus lisible. Ainsi pour écrire « Hello, World! » en APL, les choses se passent ainsi :

  • 'Hello, World!' (tapé par lutilisateur)
  • Hello, World! (réponse du terminal)
  • 2+2 3 5 7
  • 4 5 7 9

Il faut y ajouter la possibilité spectaculaire dindexer un tableau par un autre tableau. Ainsi

  • 'LE CHAT'[7 5 2 3 4 6 7]
  • THE CAT

Voire :

  • 'LE CHAT'[2 3⍴7 5 2 4 6 7]
  • THE
  • CAT

Grâce à sa priorité de gauche à droite, le langage se lit simplement, comme un langage naturel :

« 1 plus somme des inverses des factorielles des entiers de 1 à 30 » :

  • 1++/÷!⍳30
  • 2.718281828

Une extension d'APL, nommée APL2, gère quant à elle des tableaux de tableaux, et permet à l'utilisateur de définir lui-même ses propres « opérateurs ». Elle travaille également en nombres complexes automatiquement si les besoins du calcul le demandent.

Opérations sur tableaux

A2 2⍴1 2 3 4
1 2
3 4
(crée un matrice de 2 lignes et 2 colonnes et la remplit avec les nombres 1 2 3 4)
A=2
0 1
0 0
(le résultat est une matrice booléenne indiquant les éléments égaux à 2)
A, A
1 2 1 2
3 4 3 4
(concaténation de la matrice à elle-même : le résultat est une matrice de 2 lignes et 4 colonnes)
A, 5
1 2 5
3 4 5
(concaténation du scalaire 5 à la matrice)
A, +/A
1 2 3
3 4 7
(concaténation d'un vecteur : la somme des lignes)
A⍪+⌿A
1 2
3 4
4 6
(même chose suivant l'autre axe : colonnes)
A, [.5]0
1 2
3 4

0 0
0 0
(concaténation en créant une nouvelle dimension : matrice devient cube)

A, [1.5]0
1 2
0 0

3 4
0 0
(concaténation en créant une nouvelle dimension sur un autre axe)

A1 2∘3 4 5 6 7
3 4 5 6 7
6 8 10 12 14
(produit externe alias cartésien alias table de multiplication)
(, A)[, A] 3 4 5 6 6 7 8 10 12 14
(fonction de tri)

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) ∨/, etc. On parle, dans d'autres langages, de clôture (closure).

Dans la première version dAPL, les opérateurs sont définis de façon fixe (réduction (/), scan (\), produit externe (°.), composition (.), ...). En APL2, lutilisateur 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 lutilisateur dans sa 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.

Tableaux de tableaux, et fonction

Une opération nommée enclose () permet dencapsuler 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 dautres tableaux. Lexistence dune fonction execute () permet même dinclure dans ces tableaux de tableaux des désignateurs de fonction que lon peut exécuter à la demande, comme en langage C. Elle permet aussi à un programme dengendrer lui-même un code quil exécutera ensuite, comme en Lisp.

Le nombre d'indices dun tableau est par convention nommé rang (rank) en APL. Le nombre de niveaux dun tableau de tableaux est nommé profondeur (depth).

Espace de travail

Lutilisateur travaille dans un espace de travail il stocke ses fonctions et ses variables. Il peut à tout moment sauvegarder lensemble (y compris en état dexécution suspendue) et reprendre plus tard son travail exactement dans les conditions il lavait laissé[2]. Des commandes comme )COPY et )PCOPY, et la notion de groupe permettent des transferts aisés de fonctions et de variables dun workspace à un autre.

Horodatage automatique

Chaque objet APL2 (variable, fonction ou opérateur) est horodaté dans la workspace, ce qui en permet une gestion plus aisée sur le long terme. Le type et la date des objets sont retournées par la fonction système ⎕AT (=ATtributes). Couplé aux opérateurs de tri (grade-up) et (grade-down), cet horodatage des objets facilite beaucoup le processus de développement.

Éléments anecdotiques

  • APL travaillant sur des vecteurs, il doit distinguer lopération « - » (moins), qui désigne l'opération de soustraction entre deux variables numériques ou le changement de signe d'une variable numérique d'une part, du signe négatif qui ne porte que sur la valeur numérique qui le suit immédiatement, d'autre part. Celui-ci est noté par une barre supérieure « ¯ ».
Ainsi, 7 5 6 - 4 3 23 2 4, mais 7 5 6 ¯4 3 2 ⇔... 7 5 6 ¯4 3 2
  • LorsquAPL 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 « \ » qui est lopé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 nobtenait 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, quil garda jusquen 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 lAS/400 ne présentait pas dintérêt vu le créneau spécifique de cette machine)

Implémentations

Architectures matérielles

Des interpréteurs APL ont existé pour lIBM 7090, les IBM 360 à zSeries (sous TSO, VM/CMS et même CICS!), lIBM 1130, le Xerox XDS Sigma 7 alias CII 10070, et le CII Iris 80, le Bull DPS-7, le Burroughs B1700, le Bull SEMS T1600 (ex-Télémécanique Électrique T1600), la série des Mitra, etc. Ce langage était même directement en ROM dans des ordinateurs personnels du milieu des années 1970 comme le MCM-70 ou lIBM 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 et même le DOS (une version gratuite nommée TRYAPL2 existe pour le DOS, en version anglaise comme française).

La société Microsoft elle-même considérait l'APL comme le successeur naturel de son BASIC et avait entrepris deux implémentations du langage sur 8080 et 6800, comme le montre un extrait de lettre de Bill Gates aux utilisateurs de l'Altair BASIC.

Le succès de DOS, de Windows et surtout des tableurs Multiplan et Excel fit en fin de compte abandonner ce projet, qui s'adressait à un marché potentiel bien plus restreint.

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 lautorisation. On peut ainsi commencer à mettre au point un calcul sur un PC, puis une fois quil est au point lexécuter à distance sur un mainframe équipés de dizaines de processeurs parallèles depuis la même session.

Les processeurs auxiliaires se codent le plus souvent en langage C.

Situation présente du langage

Lapparition du tableur, plus intuitif et plus facile à manier, a fait disparaître une partie de lintérêt du langage. Cela nenlève rien pour autant à sa puissance dexpression et à sa concision, et plusieurs interpréteurs APL sont téléchargeables gratuitement sur Internet, pour le PC comme pour le Macintosh. La généralisation des écrans et des imprimantes à laser ont éliminé lancien problème que représentait lusage de caractères spécifiques. Les caractères APL/APL2 sont dailleurs présents dans lUnicode.

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 larchitecture PowerPC et des instruction multimédia (SSE) de larchitecture Intel/AMD.

Il a deux successeurs, le langage A+, et le langage J, ce dernier ayant été promu par K. E. Iverson lui-même, et ne nécessitant pas lusage 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 naurait pas été possible dès 1969 sans les terminaux IBM à boule également nommés Selectric (par exemple le 2741).

Pour information, des calculs actuels typiques sur un Celeron 300 MHz seffectuent à peu près en un dixième du temps de calcul quils prenaient en 1970 sur un IBM 360/91. Le cœur de linterpréteur tient entièrement dans le cache d'instructions dun microprocesseur contemporain (2004), donnant à APL des performances comparables à celle quon obtenait il y a quelques années avec un langage compilé.

GRAPHPAK est une des workspaces fournies avec APL et combinable avec toute autre application de lutilisateur pour lui donner des possibilités dentré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 cette workpsace, 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).

Caractères APL/APL2 en Unicode

Vérifiez que votre navigateur accepte bien lUnicode; dans le cas contraire, vous verrez safficher des rectangles blancs ou des points dinterrogation à la place des caractères APL.

' ( ) + , - . /  :  ; < = >  ? [ ]
\ _ ¨ ¯ × ÷

Tous les caractères APL ne sont pas encore associés à une signification aujourd'hui (2004).

Quelques opinions

Edsger Dijkstra

« 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. Cest le langage de lavenir 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 cant 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 dune 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 dAPL à APL2).

Jacques Arsac

« Je ne recommanderais pas de mettre rapidement APL entre les mains des étudiants »[3].

Lacune dAPL

APL na jamais officiellement permis dindexer un tableau avec autre chose que des valeurs entières. On ne peut pas par exemple y écrire

CAPITALE['FRANCE']←'PARIS'

ou, pour rester dans le vectoriel,

CAPITALE['FRANCE' 'ESPAGNE' 'ITALIE']←'PARIS' 'MADRID' 'ROME'

ce qui est regrettable, car :

  1. une telle extension ne demanderait que très peu de modification de syntaxe, et n'en demanderait aucune des programmes existants
  2. tous 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 tables de hachage en Perl[4]).
  3. Très rares sont les applications 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, lutilisateur se tourne de façon fort naturelle vers dautres langages répondant mieux à ses besoins.

Il est peu ergonomique de contourner cette lacune au prix de variables supplémentaires, comme par exemple: FRANCE32 (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 supplémentaires ainsi surajoutées dans le programme.

APL, langage cryptique ?

Parce quil épargne lusage des indices, APL permet décrire de façon concise et rapide des expressions qui seraient bien plus longues avec un langage classique. Pour cette raison, il a été parfois qualifié de langage cryptique. Cet avis est-il fondé ? À vous den juger :
Étant donné la compacité et la puissance du langage, certains puristes considéraient 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 de ce qui sera plus tard Hebdogiciel.

Notes et références

  1. TECHNIP : Description de l'équipe informatique
  2. Cette notion a été reprise ensuite dans d'autres langages (FORTH, Smalltalk, C++) sous le nom de persistance
  3. Interview, 01 Hebdo
  4. $capitale{'France'}='Paris';

Voir aussi

Articles connexes

Liens externes

  • Portail de la programmation informatique Portail de la programmation informatique
Ce document provient de « APL (langage) ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article APL (Langage) de Wikipédia en français (auteurs)

Игры ⚽ Поможем написать курсовую

Regardez d'autres dictionnaires:

  • Apl (langage) — Pour les articles homonymes, voir APL. L APL (initialement A Programming Language, officieusement Array Processing Language) est un langage de programmation conçu entre 1957 et 1967 par Kenneth Iverson pour décrire commodément des opérations… …   Wikipédia en Français

  • APL (langage) — Pour les articles homonymes, voir APL. L APL (initialement A Programming Language, officieusement Array Processing Language) est un langage de programmation conçu entre 1957 et 1967 par Kenneth Iverson pour décrire commodément des opérations… …   Wikipédia en Français

  • Apl — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. {{{image}}}   Sigles d une seule lettre   Sigles de deux lettres > Sigles de trois lettres …   Wikipédia en Français

  • APL — (A Programming Language) Langage algorithmique de caractère mathématique essentiellement conçu pour l’enseignement des mathématiques et la recherche théorique ou appliquée; cependant sa facilité d’emploi et sa généralité le rendent accessible à… …   Encyclopédie Universelle

  • LANGAGE (informatique) — LANGAGE, informatique La notion de langage (opposée ici à celle de langue, pour laquelle on doit tenir compte de la double articulation monème phonème, et de son caractère vocal) est liée à la notion de signe: un langage est communément défini… …   Encyclopédie Universelle

  • Langage De Transformation XML — Un langage de transformation XML est un langage de programmation créé spécifiquement pour créer toute forme de document en sortie à partir d un document XML en entrée. Il y a deux cas spécifiques de transformation : XML vers XML : le… …   Wikipédia en Français

  • Langage de transformation xml — Un langage de transformation XML est un langage de programmation créé spécifiquement pour créer toute forme de document en sortie à partir d un document XML en entrée. Il y a deux cas spécifiques de transformation : XML vers XML : le… …   Wikipédia en Français

  • Langage De Description De Format De Document — Un langage de description de format de document est un langage permettant de définir un jeu de règles et contraintes qui seront utilisées pour savoir si une instance de document est valide par rapport à ce même jeu de règles et contraintes.… …   Wikipédia en Français

  • Langage de description — de format de document Un langage de description de format de document est un langage permettant de définir un jeu de règles et contraintes qui seront utilisées pour savoir si une instance de document est valide par rapport à ce même jeu de règles …   Wikipédia en Français

  • APL — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom.   Sigles d’une seule lettre   Sigles de deux lettres > Sigles de trois lettres   Sigles de quatre lettres …   Wikipédia en Français

Share the article and excerpts

Direct link
https://fr-academic.com/dic.nsf/frwiki/35486 Do a right-click on the link above
and select “Copy Link”