APL (langage de programmation) - APL (programming language)

APL
Paradigme Array , fonctionnel , structuré , modulaire
Conçu par Kenneth E. Iverson
Développeur Larry Breed , Dick Lathwell , Roger Moore et autres
Première apparition 27 novembre 1966 ; il y a 54 ans ( 1966-11-27 )
Version stable
ISO/IEC 13751:2001 / 1er février 2001 ; il y a 20 ans ( 2001-02-01 )
Discipline de frappe Dynamique
Plate-forme Plateforme croisée
Licence Propriétaire , open source
Les principales mises en œuvre
  • APL\360
  • APL\1130
  • APL*Plus
  • APL pointu
  • APL2
  • Dyalog APL
  • SNRA2000
  • APLX
  • APL GNU
Influencé par
Notation mathématique
Influencé

APL (du nom du livre A Programming Language ) est un langage de programmation développé dans les années 1960 par Kenneth E. Iverson . Son type de données central est le tableau multidimensionnel . Il utilise une large gamme de symboles graphiques spéciaux pour représenter la plupart des fonctions et des opérateurs, conduisant à un code très concis. Cela a eu une influence importante sur le développement de la modélisation de concepts, des feuilles de calcul , de la programmation fonctionnelle et des progiciels de calcul informatique. Il a également inspiré plusieurs autres langages de programmation.

Histoire

Notation mathématique

Une notation mathématique pour manipuler des tableaux a été développée par Kenneth E. Iverson , à partir de 1957 à l'Université de Harvard . En 1960, il a commencé à travailler pour IBM où il a développé cette notation avec Adin Falkoff et l'a publiée dans son livre A Programming Language en 1962. La préface énonce sa prémisse :

Les mathématiques appliquées sont largement concernées par la conception et l'analyse de procédures explicites de calcul des valeurs exactes ou approximatives de diverses fonctions. Ces procédures explicites sont appelées algorithmes ou programmes . Parce qu'une notation efficace pour la description de programmes présente une structure syntaxique considérable, on l'appelle un langage de programmation .

Cette notation a été utilisée au sein d'IBM pour de courts rapports de recherche sur les systèmes informatiques, tels que le Burroughs B5000 et son mécanisme de pile lorsque les machines à empiler par rapport aux machines à registre étaient évaluées par IBM pour les ordinateurs à venir.

Iverson a également utilisé sa notation dans un brouillon du chapitre A Programming Language , écrit pour un livre qu'il écrivait avec Fred Brooks , Automatic Data Processing , qui serait publié en 1963.

En 1979, Iverson a reçu le prix Turing pour son travail sur APL.

Développement dans un langage de programmation informatique

Dès 1962, la première tentative d'utilisation de la notation pour décrire un système informatique complet eut lieu après que Falkoff eut discuté avec William C. Carter de son travail pour normaliser le jeu d'instructions pour les machines qui deviendront plus tard la famille IBM System/360 .

En 1963, Herbert Hellerman, travaillant à l'IBM Systems Research Institute, a implémenté une partie de la notation sur un ordinateur IBM 1620 , et elle a été utilisée par les étudiants dans un cours spécial du lycée sur le calcul des fonctions transcendantales par sommation de séries. Les étudiants ont testé leur code dans le laboratoire de Hellerman. Cette implémentation d'une partie de la notation s'appelait Personalized Array Translator (PAT).

En 1963, Falkoff, Iverson et Edward H. Sussenguth Jr. , tous travaillant chez IBM, ont utilisé la notation pour une description formelle de l' architecture et des fonctionnalités de la machine de la série IBM System/360 , ce qui a abouti à un article publié dans IBM Systems Journal en 1964. Après sa publication, l'équipe s'est penchée sur une implémentation de la notation sur un système informatique. L'une des motivations de cet objectif de mise en œuvre était l'intérêt de John L. Lawrence qui avait de nouvelles fonctions avec Science Research Associates , une entreprise éducative achetée par IBM en 1964. Lawrence a demandé à Iverson et à son groupe d'aider à utiliser la langue comme un outil pour développer et utiliser des ordinateurs dans l'éducation.

Après que Lawrence M. Breed et Philip S. Abrams de l'Université de Stanford ont rejoint l'équipe d'IBM Research, ils ont poursuivi leurs travaux antérieurs sur une implémentation programmée en FORTRAN IV pour une partie de la notation qui avait été faite pour l' ordinateur IBM 7090 fonctionnant sur le Système d' exploitation IBSYS . Ce travail a été terminé à la fin de 1965 et plus tard nommé IVSYS (pour le système Iverson). La base de cette implémentation a été décrite en détail par Abrams dans un rapport technique de l'Université de Stanford, "An Interpreter for Iverson Notation" en 1966, l'aspect académique de ceci a été formellement supervisé par Niklaus Wirth . Comme le système PAT de Hellerman plus tôt, cette implémentation n'incluait pas le jeu de caractères APL mais utilisait des mots réservés en anglais spéciaux pour les fonctions et les opérateurs. Le système a ensuite été adapté pour un système à temps partagé et, en novembre 1966, il avait été reprogrammé pour l' ordinateur IBM System/360 modèle 50 fonctionnant en mode de partage de temps et était utilisé en interne chez IBM.

Matériel

Typeballs IBM et typewheel contenant des caractères grecs APL.
Vue d'un programmeur de la disposition du clavier IBM 2741 avec la tête d'impression de l'élément de frappe APL insérée

Un développement clé dans la capacité d'utiliser efficacement l'APL, avant l'utilisation généralisée des terminaux à tube cathodique ( CRT ), a été le développement d'un élément de frappe interchangeable spécial pour machine à écrire IBM Selectric avec tous les caractères APL spéciaux. Cela a été utilisé sur les postes de travail des terminaux d'impression papier utilisant la machine à écrire Selectric et le mécanisme d'élément de frappe, tels que les terminaux IBM 1050 et IBM 2741 . Des touches pourraient être placées sur les touches normales pour montrer quels caractères APL seraient entrés et tapés lorsque cette touche était frappée. Pour la première fois, un programmeur pouvait taper et voir les caractères APL appropriés tels qu'utilisés dans la notation d'Iverson et ne pas être obligé d'utiliser des représentations de mots-clés anglais maladroites. Falkoff et Iverson avaient les éléments de frappe spéciaux APL Selectric, 987 et 988, conçus à la fin de 1964, bien qu'aucun système informatique APL ne soit disponible pour les utiliser. Iverson a cité Falkoff comme source d'inspiration pour l'idée d'utiliser un élément de typage IBM Selectric pour le jeu de caractères APL.

De nombreux symboles APL, même avec les caractères APL sur l'élément de frappe Selectric, devaient encore être saisis en frappant deux caractères d'élément existants. Un exemple est le caractère de niveau supérieur , qui devait être composé d'un delta (shift-H) et d'un trait de Sheffer (shift-M). Cela était nécessaire car le jeu de caractères APL était beaucoup plus grand que les 88 caractères autorisés sur l'élément de saisie, même lorsque les lettres étaient limitées aux majuscules (majuscules).

Disponibilité commerciale

La première connexion interactive APL et la création d'un espace de travail APL ont eu lieu en 1966 par Larry Breed à l'aide d'un terminal IBM 1050 aux IBM Mohansic Labs près du Thomas J. Watson Research Center , siège d'APL, à Yorktown Heights, New York .

IBM était principalement responsable de l'introduction d'APL sur le marché. La première version publiquement disponible d'APL a été publiée en 1968 pour l' IBM 1130 . IBM a fourni APL\1130 gratuitement mais sans responsabilité ni assistance. Il fonctionnerait dans aussi peu que 8 000 mots de mémoire de 16 bits et utilisait un disque dur dédié de 1 mégaoctet.

APL a pris pied sur les systèmes de partage de temps mainframe de la fin des années 1960 au début des années 1980, en partie parce qu'il prenait en charge plusieurs utilisateurs sur des systèmes de spécifications inférieures qui n'avaient pas de matériel de traduction d'adresses dynamique . Des améliorations supplémentaires des performances pour les systèmes mainframe IBM System/370 sélectionnés comprenaient le microcode APL Assist dans lequel une certaine prise en charge de l'exécution APL était incluse dans le micrologiciel du processeur , par opposition à une mise en œuvre entièrement par un logiciel de niveau supérieur. Un peu plus tard, alors que du matériel performant devenait enfin disponible entre le milieu et la fin des années 80, de nombreux utilisateurs ont migré leurs applications vers l'environnement informatique personnel.

Les premiers interpréteurs IBM APL pour le matériel IBM 360 et IBM 370 ont mis en œuvre leur propre gestion multi-utilisateurs au lieu de s'appuyer sur les services hôtes, ils étaient donc leurs propres systèmes à temps partagé. Introduit pour la première fois chez IBM en 1966, le système APL\360 était un interpréteur multi-utilisateurs. La possibilité de communiquer par programmation avec le système d'exploitation pour obtenir des informations et de définir des variables système d'interprétation a été réalisée grâce à des fonctions privilégiées spéciales « I-beam », en utilisant à la fois des opérations monadiques et dyadiques .

En 1973, IBM a publié APL.SV , qui était une continuation du même produit, mais qui offrait des variables partagées comme moyen d'accéder à des installations en dehors du système APL, telles que les fichiers du système d'exploitation. Au milieu des années 1970, l'interpréteur mainframe IBM a même été adapté pour être utilisé sur l' ordinateur de bureau IBM 5100 , qui avait un petit CRT et un clavier APL, alors que la plupart des autres petits ordinateurs de l'époque n'offraient que BASIC . Dans les années 1980, le programme VSAPL était largement utilisé par les utilisateurs du système de moniteur conversationnel (CMS), de l' option de partage de temps (TSO), de VSPC , de MUSIC/SP et de CICS .

En 1973-1974, Patrick E. Hagerty a dirigé la mise en œuvre de l'interpréteur APL de l'Université du Maryland pour la ligne 1100 des ordinateurs centraux de la série Sperry UNIVAC 1100/2200 . À l'époque, Sperry n'avait rien. En 1974, l'étudiant Alan Stebbens s'est vu confier la tâche de mettre en œuvre une fonction interne. Xerox APL était disponible à partir de juin 1975 pour les ordinateurs centraux Xerox 560 et Sigma 6, 7 et 9 exécutant CP-V et pour Honeywell CP-6 .

Dans les années 1960 et 1970, plusieurs sociétés de multipropriété ont vu le jour et ont vendu des services APL en utilisant des versions modifiées de l'interpréteur IBM APL\360. En Amérique du Nord, les plus connus étaient IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) et The Computer Company (TCC). CompuServe est également entré sur le marché en 1978 avec un interprète APL basé sur une version modifiée de Digital Equipment Corp et de Carnegie Mellon, qui fonctionnait sur les machines KI et KL 36 bits de DEC. L'APL de CompuServe était disponible à la fois pour son marché commercial et pour le service d'information des consommateurs. Avec l'avènement d'abord de mainframes moins chers tels que l' IBM 4300 , et plus tard l'ordinateur personnel, au milieu des années 1980, l'industrie du temps partagé avait pratiquement disparu.

Sharp APL était disponible auprès d' IP Sharp Associates , d'abord en tant que service de partage de temps dans les années 1960, puis en tant que programme à partir de 1979. Sharp APL était une implémentation APL avancée avec de nombreuses extensions de langage, telles que des packages (la possibilité de mettre un ou plusieurs objets dans une seule variable), système de fichiers, tableaux imbriqués et variables partagées .

Des interpréteurs APL étaient également disponibles auprès d'autres fabricants d'ordinateurs centraux et de mini-ordinateurs, notamment Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens AG , Xerox et d'autres. .

Garth Foster de l'Université de Syracuse a parrainé des réunions régulières de la communauté des responsables de la mise en œuvre de l'APL au Minnowbrook Conference Center de Syracuse à Blue Mountain Lake, New York . Des années plus tard, Eugene McDonnell a organisé des réunions similaires au Asilomar Conference Grounds près de Monterey, en Californie, et à Pajaro Dunes près de Watsonville, en Californie. Le groupe d'intérêt spécial SIGAPL de l' Association for Computing Machinery continue de soutenir la communauté APL.

Micro-ordinateurs

Sur les micro-ordinateurs, devenus disponibles à partir du milieu des années 1970, BASIC est devenu le langage de programmation dominant. Néanmoins, certains micro-ordinateurs fournissaient l'APL à la place - le premier étant le MCM/70 basé sur Intel 8008 qui est sorti en 1974 et qui était principalement utilisé dans l'éducation. Une autre machine de cette époque était le VideoBrain Family Computer , sorti en 1977, qui était fourni avec son dialecte d'APL appelé APL/S.

Le Commodore SuperPET , introduit en 1981, comprenait un interpréteur APL développé par l' Université de Waterloo .

En 1976, Bill Gates a affirmé dans sa lettre ouverte aux amateurs que Microsoft Corporation mettait en œuvre l'APL pour les processeurs Intel 8080 et Motorola 6800, mais qu'elle n'avait « très peu d'incitations à le mettre à la disposition des amateurs » en raison du piratage de logiciels . Il n'a jamais été publié.

APL2

À partir du début des années 1980, le développement d'IBM APL, sous la direction de Jim Brown , a mis en œuvre une nouvelle version du langage APL qui contenait comme amélioration principale le concept de tableaux imbriqués , où un tableau peut contenir d'autres tableaux, et de nouvelles fonctionnalités de langage qui facilité l'intégration de tableaux imbriqués dans le flux de travail du programme. Ken Iverson, ne contrôlant plus le développement du langage APL, a quitté IBM et a rejoint IP Sharp Associates , où l'une de ses contributions majeures a été de diriger l'évolution de Sharp APL pour qu'elle soit plus en accord avec sa vision.

Alors que d'autres fournisseurs étaient occupés à développer des interpréteurs APL pour le nouveau matériel, notamment les micro - ordinateurs basés sur Unix , APL2 était presque toujours la norme choisie pour les nouveaux développements d'interpréteurs APL. Même aujourd'hui, la plupart des fournisseurs d'APL ou leurs utilisateurs citent la compatibilité APL2 comme argument de vente pour ces produits.

APL2 pour les ordinateurs centraux IBM est toujours disponible. IBM cite son utilisation pour la résolution de problèmes, la conception de systèmes, le prototypage, l'ingénierie et les calculs scientifiques, les systèmes experts, pour l'enseignement des mathématiques et d'autres matières, la visualisation et l'accès aux bases de données et a été disponible pour la première fois pour CMS et TSO en 1984. L'édition APL2 Workstation (Windows, OS/2 , AIX , Linux et Solaris ) ont suivi beaucoup plus tard au début des années 1990.

Implémentations modernes

Diverses implémentations d'APL par APLX, Dyalog et autres incluent des extensions pour la programmation orientée objet , la prise en charge de .NET Framework , des primitives de conversion de tableau XML, des graphiques, des interfaces de système d'exploitation et des expressions de calcul lambda .

Langues dérivées

APL a formé la base ou influencé les langages suivants :

  • A et A+ , un APL alternatif, ce dernier avec des extensions graphiques.
  • FP , un langage de programmation fonctionnel.
  • Ivy, un interprète pour un langage de type APL développé par Rob Pike , et qui utilise l' ASCII en entrée.
  • J , qui a également été conçu par Iverson, et qui utilise ASCII avec des digrammes au lieu de symboles spéciaux.
  • K , une variante propriétaire d'APL développée par Arthur Whitney.
  • LYaPAS , une extension soviétique de l'APL.
  • MATLAB , un outil de calcul numérique.
  • Nial , un langage de programmation de tableau de haut niveau avec une notation de programmation fonctionnelle.
  • Langage de programmation polymorphe , un langage interactif et extensible avec un langage de base similaire.
  • S , un langage de programmation statistique (généralement maintenant vu dans la version open source connue sous le nom de R ).
  • Speakeasy , un environnement interactif de calcul numérique.
  • Wolfram Language , le langage de programmation de Mathematica .

Caractéristiques linguistiques

Jeu de caractères

APL a été à la fois critiqué et loué pour son choix d'un jeu de caractères unique et non standard. Certains de ceux qui l'apprennent deviennent de fervents adhérents, suggérant qu'il y a un certain poids derrière l'idée d'Iverson selon laquelle la notation utilisée fait une différence. Dans les années 1960 et 1970, peu de terminaux et même de moniteurs d'affichage pouvaient reproduire le jeu de caractères APL. Les plus populaires utilisaient le mécanisme d'impression IBM Selectric utilisé avec un élément spécial de type APL. L'un des premiers terminaux de ligne APL (fonctionnement en mode ligne uniquement, pas en plein écran) était le Texas Instruments TI modèle 745 (vers 1977) avec le jeu de caractères APL complet qui comportait des modes de télécommunications semi-duplex et full duplex , pour interagir avec un temps APL -service de partage ou mainframe distant pour exécuter un travail d'ordinateur distant, appelé RJE .

Au fil du temps, avec l'utilisation universelle d'écrans graphiques de haute qualité, de périphériques d'impression et de la prise en charge d' Unicode , le problème des polices de caractères APL a été largement éliminé. Cependant, la saisie de caractères APL nécessite l'utilisation d' éditeurs de méthode de saisie , de mappages de clavier, de jeux de symboles APL virtuels/à l'écran ou de cartes de clavier imprimées faciles à consulter qui peuvent frustrer les débutants habitués à d'autres langages de programmation. Avec des débutants qui n'ont aucune expérience préalable avec d'autres langages de programmation, une étude menée auprès d'élèves du secondaire a révélé que la saisie et l'utilisation de caractères APL n'entraînaient aucune gêne mesurable pour les élèves.

Pour défendre l'utilisation d'APL, APL nécessite moins de codage pour la saisie et les mappages de clavier sont mémorisés au fil du temps. En outre, des claviers APL spéciaux sont fabriqués et utilisés aujourd'hui, tout comme les polices téléchargeables gratuitement pour les systèmes d'exploitation tels que Microsoft Windows. Les gains de productivité rapportés supposent que l'on passera suffisamment de temps à travailler dans APL pour qu'il soit intéressant de mémoriser les symboles, leur sémantique et les mappages de clavier, sans parler d'un nombre substantiel d'idiomes pour les tâches courantes.

Concevoir

Contrairement aux langages de programmation traditionnellement structurés, le code APL est généralement structuré comme des chaînes de monades ou dyadique fonctions et opérateurs agissant sur les tableaux . APL a de nombreuses primitives non standard (fonctions et opérateurs) qui sont indiquées par un seul symbole ou une combinaison de quelques symboles. Toutes les primitives sont définies pour avoir la même priorité et toujours associées à droite. Ainsi, APL est lu ou mieux compris de droite à gauche .

Les premières implémentations d'APL (vers 1970 environ) n'avaient pas de structures de contrôle de flux de boucle de programmation , telles que des boucles doou while, et des if-then-elseconstructions. Au lieu de cela, ils ont utilisé des opérations de tableau, et l'utilisation de constructions de programmation structurées n'était souvent pas nécessaire, car une opération pouvait être effectuée sur un tableau complet dans une seule instruction. Par exemple, la iotafonction ( ι) peut remplacer l' itération de la boucle for : ιN lorsqu'elle est appliquée à un entier positif scalaire donne un tableau à une dimension (vecteur), 1 2 3 ... N. Les implémentations plus récentes d'APL incluent généralement des structures de contrôle complètes , de sorte que la structure des données et le flux de contrôle du programme puissent être séparés clairement et proprement.

L'environnement APL est appelé espace de travail . Dans un espace de travail, l'utilisateur peut définir des programmes et des données, c'est-à-dire que les valeurs de données existent également en dehors des programmes, et l'utilisateur peut également manipuler les données sans avoir à définir un programme. Dans les exemples ci-dessous, l'interpréteur APL tape d'abord six espaces avant d'attendre la saisie de l'utilisateur. Sa propre sortie commence dans la première colonne.

      n  4 5 6 7
Affecte le vecteur de valeurs, {4 5 6 7}, à la variable n, une opération de création de tableau. Une expression APL équivalente mais plus concise serait . Les valeurs multiples sont stockées dans un tableau , l'opération étant effectuée sans boucles formelles ni langage de flux de contrôle . n 3 + 4n
      n 
4 5 6 7
Affiche le contenu de n, actuellement un tableau ou un vecteur.
      n+4
8 9 10 11
4 est maintenant ajouté à tous les éléments du vecteur n, créant un vecteur à 4 éléments {8 9 10 11}.
Comme ci-dessus, l'interpréteur d'APL affiche le résultat car la valeur de l'expression n'a pas été affectée à une variable (avec un ).
      +/n
22
APL affiche la somme des composantes du vecteur n, c'est-à-dire en 22 (= 4 + 5 + 6 + 7)utilisant une notation très compacte : lisez +/ comme "plus, over..." et un léger changement serait "multiply, over..."
      m  +/3+⍳4
      m
22
Ces opérations peuvent être combinées en une seule instruction, en rappelant qu'APL évalue les expressions de droite à gauche : crée d' abord un tableau, , puis 3 sont ajoutés à chaque composant, qui sont additionnés et le résultat stocké dans la variable , finalement affiché. 4[1,2,3,4]m

En notation mathématique normale, cela équivaut à : . Rappelez-vous que les expressions mathématiques ne sont pas lues ou évaluées de droite à gauche.

L'utilisateur peut enregistrer l'espace de travail avec toutes les valeurs, programmes et statuts d'exécution.

APL utilise un ensemble de symboles non ASCII , qui sont une extension de la notation arithmétique et algébrique traditionnelle. Le fait d'avoir des noms à caractère unique pour une seule instruction, des fonctions vectorielles à données multiples ( SIMD ) est un moyen par lequel APL permet une formulation compacte d'algorithmes pour la transformation de données, comme le calcul du jeu de la vie de Conway en une seule ligne de code. Dans presque toutes les versions d'APL, il est théoriquement possible d'exprimer n'importe quelle fonction calculable en une seule expression, c'est-à-dire en une seule ligne de code.

En raison du jeu de caractères inhabituel , de nombreux programmeurs utilisent des claviers spéciaux avec des touches APL pour écrire le code APL. Bien qu'il existe différentes manières d'écrire du code APL en utilisant uniquement des caractères ASCII, en pratique, cela n'est presque jamais fait. (On peut penser que cela soutient la thèse d'Iverson sur la notation en tant qu'outil de pensée .) La plupart des implémentations modernes, sinon toutes, utilisent des dispositions de clavier standard, avec des mappages spéciaux ou des éditeurs de méthode d'entrée pour accéder aux caractères non ASCII. Historiquement, la police APL était distinctive, avec des caractères alphabétiques italiques majuscules et des chiffres et symboles droits. La plupart des fournisseurs continuent d'afficher le jeu de caractères APL dans une police personnalisée.

Les partisans de l'APL affirment que les exemples de code dit en écriture seule ( code mal écrit et presque incompréhensible) sont presque invariablement des exemples de mauvaise pratique de programmation ou d'erreurs de débutant, qui peuvent se produire dans n'importe quel langage. Les partisans affirment également qu'ils sont beaucoup plus productifs avec APL qu'avec des langages informatiques plus conventionnels, et que des logiciels fonctionnels peuvent être mis en œuvre en beaucoup moins de temps et avec beaucoup moins de programmeurs qu'avec d'autres technologies.

Ils peuvent également prétendre que parce qu'il est compact et concis, APL se prête bien au développement et à la complexité de logiciels à plus grande échelle, car le nombre de lignes de code peut être considérablement réduit. De nombreux défenseurs et praticiens de l'APL considèrent également les langages de programmation standard tels que COBOL et Java comme relativement fastidieux. L'APL se trouve souvent là où le temps de mise sur le marché est important, comme avec les systèmes de trading.

Terminologie

APL fait une distinction claire entre les fonctions et les opérateurs . Les fonctions prennent des tableaux (variables ou constantes ou expressions) comme arguments et renvoient des tableaux comme résultats. Les opérateurs (similaires aux fonctions d'ordre supérieur ) prennent des fonctions ou des tableaux comme arguments et dérivent des fonctions associées. Par exemple, la fonction somme est dérivée en appliquant l' opérateur de réduction à la fonction d' addition . L'application du même opérateur de réduction à la fonction maximum (qui renvoie le plus grand de deux nombres) dérive une fonction qui renvoie le plus grand d'un groupe (vecteur) de nombres. Dans le langage J, Iverson a substitué les termes verbe à fonction et adverbe ou conjonction à opérateur .

APL identifie également les fonctionnalités intégrées au langage et représentées par un symbole ou une combinaison fixe de symboles, en tant que primitives . La plupart des primitives sont soit des fonctions, soit des opérateurs. Le codage APL est en grande partie un processus d'écriture de fonctions non primitives et (dans certaines versions d'APL) d'opérateurs. Cependant, quelques primitives ne sont considérées ni comme des fonctions ni comme des opérateurs, notamment des affectations.

Certains mots utilisés dans la littérature APL ont des significations différentes de celles des mathématiques et de la généralité de l'informatique.

Terminologie des opérateurs APL
Terme La description
fonction opération ou mappage qui prend zéro, un (droit) ou deux (gauche et droite) arguments qui peuvent être des scalaires, des tableaux ou des structures plus compliquées, et peuvent renvoyer un résultat tout aussi complexe. Une fonction peut être :
  • Primitif : intégré et représenté par un seul glyphe ;
  • Défini : comme une collection nommée et ordonnée d'instructions de programme ;
  • Dérivé : comme une combinaison d'un opérateur avec ses arguments.
déployer objet de valeur de données de zéro ou plusieurs dimensions orthogonales dans l'ordre des lignes principales dans lequel chaque élément est une donnée scalaire primitive ou un autre tableau.
niladique ne prenant ou n'exigeant aucun argument, nullary
monadique ne nécessitant qu'un seul argument ; à droite pour une fonction, à gauche pour un opérateur, unaire
dyadique nécessitant à la fois un argument gauche et un argument droit, binaire
ambivalent ou monadique utilisable dans un contexte monadique ou dyadique, permettant d'élider son argument gauche
opérateur opération ou mappage qui prend un (gauche) ou deux (gauche et droite) fonctions ou arguments de valeur de tableau (opérandes) et dérive une fonction. Un opérateur peut être :
  • Primitif : intégré et représenté par un seul glyphe ;
  • Défini : comme une collection nommée et ordonnée d'instructions de programme.

Syntaxe

APL a des représentations explicites des fonctions, des opérateurs et de la syntaxe, fournissant ainsi une base pour l'énoncé clair et explicite des fonctionnalités étendues dans le langage, et des outils pour les expérimenter.

Exemples

Bonjour le monde

Cela affiche " Hello, world " :

'Hello, world'

Un thème de conception dans APL consiste à définir des actions par défaut dans certains cas qui produiraient des erreurs de syntaxe dans la plupart des autres langages de programmation.

La constante de chaîne 'Hello, world' ci-dessus s'affiche, car l'affichage est l'action par défaut sur toute expression pour laquelle aucune action n'est spécifiée explicitement (par exemple, affectation, paramètre de fonction).

Exponentiation

Un autre exemple de ce thème est que l'exponentiation en APL s'écrit " 2*3", ce qui indique d'élever 2 à la puissance 3 (cela serait écrit " 2^3" dans certains autres langages et " 2**3" dans FORTRAN et Python) : de nombreux langages utilisent * pour signifie la multiplication comme dans 2*3 mais APL utilise 2×3pour cela. Cependant, si aucune base n'est spécifiée (comme avec l'instruction " *3" dans APL, ou " ^3" dans d'autres langages), dans la plupart des autres langages de programmation, il y aurait une erreur de syntaxe. APL suppose cependant que la base manquante est la constante du logarithme népérien e (2.71828....), et interprète donc " *3" comme " 2.71828*3".

Statistiques simples

Supposons que ce Xsoit un tableau de nombres. (+/X)÷⍴XDonne ensuite sa moyenne. La lecture de droite à gauche , ⍴Xdonne le nombre d'éléments dans X, et depuis ÷est un opérateur dyadique, le terme à sa gauche est également nécessaire. Il est entre parenthèses car sinon X serait pris (de sorte que la somme serait de X÷⍴X, de chaque élément de X divisé par le nombre d'éléments de X), et +/Xadditionne tous les éléments de X. En se basant sur cela, calcule l'écart type . De plus, puisque l'affectation est un opérateur, elle peut apparaître dans une expression, donc ((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5

SD((+/((X - AV(T+/X)÷⍴X)*2))÷⍴X)*0.5

placerait des valeurs appropriées dans T, AV et SD. Naturellement, on ferait de cette expression une fonction à usage répété plutôt que de la ressaisir à chaque fois.

Choisissez 6 numéros de loterie

L'expression en mode immédiat suivante génère un ensemble typique de numéros de loterie Pick 6  : six entiers pseudo-aléatoires allant de 1 à 40, garantis non répétitifs , et les affiche triés par ordre croissant :

x[x6?40]

Ce qui précède fait beaucoup, de manière concise, bien que cela puisse sembler complexe pour un nouvel APLer . Il combine les fonctions APL suivantes (également appelées primitives et glyphes ) :

  • La première à être exécutée (APL s'exécute de la plus à droite à la plus à gauche) est la fonction dyadique ?(nommée deallorsque dyadique) qui renvoie un vecteur composé d'un nombre sélectionné (argument de gauche : 6 dans ce cas) d'entiers aléatoires allant de 1 à un maximum spécifié ( argument de droite : 40 dans ce cas), qui, si ladite longueur maximale du vecteur ≥, est garanti non répétitif ; ainsi, générez/créez 6 entiers aléatoires allant de 1 à 40.
  • Ce vecteur est ensuite affecté ( ) à la variable x, car il est nécessaire plus tard.
  • Ce vecteur est ensuite trié dans l'ordre croissant par une fonction monadique , qui a comme argument droit tout ce qui se trouve à sa droite jusqu'à la prochaine parenthèse ou parenthèse fermée déséquilibrée . Le résultat de est les indices qui mettront son argument dans l'ordre croissant.
  • Ensuite, la sortie de est utilisée pour indexer la variable x, que nous avons enregistrée précédemment à cet effet, sélectionnant ainsi ses éléments dans l' ordre croissant .

Puisqu'il n'y a pas de fonction à gauche du x le plus à gauche pour dire à APL quoi faire avec le résultat, il l'affiche simplement à l'écran (sur une seule ligne, séparée par des espaces) sans avoir besoin d'instruction explicite pour le faire.

?a également un équivalent monadique appelé roll, qui renvoie simplement un entier aléatoire compris entre 1 et son seul opérande [à sa droite], inclus. Ainsi, un programme de jeu de rôle pourrait utiliser l'expression ?20pour lancer un dé à vingt faces.

nombres premiers

L'expression suivante trouve tous les nombres premiers de 1 à R. Dans le temps et dans l'espace, la complexité du calcul est (en notation Big O ).

(~RR∘.×R)/R1↓⍳R

Exécuté de droite à gauche, cela signifie :

  • Iota crée un vecteur contenant des entiers de1àR(siR= 6au début du programme,⍳Rest1 2 3 4 5 6)
  • Déposez le premier élément de ce vecteur ( fonction), c'est-à-dire 1. Ainsi 1↓⍳Rest2 3 4 5 6
  • Défini R sur le nouveau vecteur ( , primitive d' affectation ), c'est-à-dire,2 3 4 5 6
  • L' opérateur de / réplication est dyadique (binaire) et l'interpréteur évalue d'abord son argument de gauche (entièrement entre parenthèses) :
  • Générer le produit extérieur de Rmultiplié par R, c'est-à-dire une matrice qui est la table de multiplication de R par R ( °.×opérateur), c'est-à-dire,
4 6 8 dix 12
6 9 12 15 18
8 12 16 20 24
dix 15 20 25 30
12 18 24 30 36
  • Construire un vecteur de même longueur que Ravec 1à chaque endroit où le nombre correspondant à Rest dans la matrice de produit externe ( , inclusion ensemble ou élément de ou Epsilon opérateur), à savoir,0 0 1 0 1
  • Niez logiquement ( pas ) les valeurs dans le vecteur (changez les zéros en uns et les uns en zéros) ( , opérateur logique non ou Tilde ), c'est-à-dire1 1 0 1 0
  • Sélectionnez les éléments Rpour lesquels l'élément correspondant est 1( opérateur de / réplication ), c'est-à-dire,2 3 5

(Remarque, cela suppose que l'origine APL est 1, c'est-à-dire que les indices commencent par 1. APL peut être défini pour utiliser 0 comme origine, c'est-à- ι6dire 0 1 2 3 4 5, ce qui est pratique pour certains calculs.)

Tri

L'expression suivante trie une liste de mots stockée dans la matrice X en fonction de la longueur des mots :

X[X+.' ';]

Le jeu de la vie

La fonction suivante "life", écrite en Dyalog APL, prend une matrice booléenne et calcule la nouvelle génération selon Conway's Game of Life . Il démontre la puissance de l'APL pour implémenter un algorithme complexe en très peu de code, mais il est également très difficile à suivre à moins d'avoir une connaissance avancée de l'APL.

life{1 .3 4=+/,¯1 0 1∘.¯1 0 1∘.⌽⊂}

Suppression des balises HTML

Dans l'exemple suivant, également Dyalog, la première ligne affecte du code HTML à une variable txt, puis utilise une expression APL pour supprimer toutes les balises HTML ( explication ) :

      txt'<html><body><p>This is <em>emphasized</em> text.</p></body></html>'
      { /⍨ ~{∨≠\}'<>'} txt
This is emphasized text.

Appellation

APL tire son nom des initiales du livre d'Iverson A Programming Language , même si le livre décrit la notation mathématique d'Iverson , plutôt que le langage de programmation implémenté décrit dans cet article. Le nom est utilisé uniquement pour les implémentations réelles, en commençant par APL\360 .

Adin Falkoff a inventé le nom en 1966 lors de l'implémentation d'APL\360 chez IBM :

Alors que je passais devant le bureau que partageaient les trois étudiants, j'ai pu entendre les bruits d'une dispute en cours. J'ai passé la tête par la porte et Eric m'a demandé : « N'est-il pas vrai que tout le monde sait que la notation que nous utilisons s'appelle APL ? Je regrettais de devoir le décevoir en lui avouant que je n'avais jamais entendu ça s'appeler ainsi. D'où avait-il eu l'idée que c'était bien connu ? Et qui avait décidé de l'appeler ainsi ? En fait, pourquoi fallait-il l'appeler comme ça ? ? Un peu plus tard, j'ai entendu comment il était nommé. Lorsque l'effort de mise en œuvre a commencé en juin 1966, l'effort de documentation a également commencé. Je suppose que lorsqu'ils ont dû écrire à ce sujet, Falkoff et Iverson ont réalisé qu'ils devraient donnez-lui un nom. Il y a probablement eu de nombreuses suggestions à l'époque, mais je n'en ai entendu parler que de deux. Un groupe de la SRA à Chicago qui développait du matériel pédagogique en utilisant la notation était en faveur du nom "Mathlab". Une autre suggestion était de l'appeler "Iverson's Better Math" et de laisser les gens forger l'acronyme approprié. Cela a été jugé facétieux.

Puis un jour, Adin Falkoff entra dans le bureau de Ken et écrivit « A Programming Language » sur le tableau, et en dessous l'acronyme « APL ». C'est ainsi qu'il est né. Ce n'est qu'une semaine environ après cela qu'Eric Iverson m'a posé sa question, à un moment où le nom n'avait pas encore trouvé son chemin sur les treize milles de la Taconic Parkway d'IBM Research à IBM Mohansic.

APL est parfois réinterprété comme Array Programming Language ou Array Processing Language , faisant ainsi d' APL un backronym .

Sacoche pour ordinateur de conférence de la British APL Association (BAPLA).

Il y a toujours eu une coopération entre les fournisseurs APL et des conférences conjointes ont eu lieu régulièrement de 1969 à 2010. Lors de ces conférences, des marchandises APL étaient souvent distribuées, avec des motifs APL ou une collection de logos de fournisseurs. Les pommes étaient communes (en guise de jeu de mots sur la similitude de prononciation de apple et APL ) et l'extrait de code qui sont les symboles produits par la disposition classique du clavier APL lorsque vous maintenez la touche de modification APL enfoncée et que vous tapez "APL". *

Malgré tous ces efforts de la communauté, aucun logo universel indépendant du fournisseur pour le langage de programmation n'a émergé. Alors que les langages de programmation populaires ont de plus en plus établi des logos reconnaissables, Fortran en obtenant un en 2020, la British APL Association a lancé une campagne au second semestre 2021, pour établir un tel logo pour APL.

Utilisation

L'APL est utilisé à de nombreuses fins, notamment les applications financières et d' assurance , l' intelligence artificielle , les réseaux de neurones et la robotique . Il a été avancé que l'APL est un outil de calcul et non un langage de programmation ; sa nature symbolique et ses capacités de tableau l'ont rendu populaire auprès des experts du domaine et des scientifiques des données qui n'ont pas ou n'ont pas besoin des compétences d'un programmeur informatique .

APL est bien adapté à la manipulation d'images et à l'animation par ordinateur , où les transformations graphiques peuvent être codées sous forme de multiplications matricielles. L'une des premières sociétés d'infographie commerciale, Digital Effects , a produit un produit graphique APL nommé Visions , qui a été utilisé pour créer des publicités télévisées et des animations pour le film Tron de 1982 . Dernièrement, le simulateur de navigation de Stormwind utilise APL pour implémenter sa logique de base, son interface avec le middleware du pipeline de rendu et une grande partie de son moteur physique .

Aujourd'hui, l' APL reste à être utilisé dans un large éventail d'applications commerciales et scientifiques, par exemple la gestion des placements , la gestion des actifs , des soins de santé , et le profilage ADN , et par les amateurs.

Implémentations notables

APL\360

La première implémentation d'APL utilisant des symboles APL reconnaissables était APL\360 qui s'exécutait sur IBM System/360 , et a été achevée en novembre 1966, bien qu'à cette époque, elle n'ait été utilisée qu'au sein d'IBM. En 1973, ses réalisateurs, Larry Breed , Dick Lathwell et Roger Moore , ont reçu le prix Grace Murray Hopper de l' Association for Computing Machinery (ACM). Il a été décerné "pour leur travail dans la conception et la mise en œuvre d'APL\360, établissant de nouvelles normes en matière de simplicité, d'efficacité, de fiabilité et de temps de réponse pour les systèmes interactifs".

En 1975, le micro-ordinateur IBM 5100 offrait APL\360 comme l'un des deux langages interprétés intégrés basés sur la ROM pour l'ordinateur, avec un clavier et un écran prenant en charge tous les symboles spéciaux utilisés dans la langue.

Parmi les développements importants d'APL\360, citons CMS/APL, qui utilisait les capacités de stockage virtuel de CMS et d'APLSV, qui introduisaient des variables partagées, des variables système et des fonctions système. Il a ensuite été porté sur les plates-formes IBM System/370 et VSPC jusqu'à sa version finale en 1983, après quoi il a été remplacé par APL2.

APL\1130

En 1968, APL\1130 est devenu le premier système APL accessible au public, créé par IBM pour l' IBM 1130 . Il est devenu le logiciel de bibliothèque IBM Type-III le plus populaire publié par IBM.

APL*Plus et Sharp APL

APL*Plus et Sharp APL sont des versions d'APL\360 avec des extensions supplémentaires orientées métier telles que le formatage des données et des fonctionnalités pour stocker des matrices APL dans des fichiers externes. Ils ont été développés conjointement par deux sociétés, employant divers membres de l'équipe de développement IBM APL\360 d'origine.

Les deux sociétés étaient IP Sharp Associates (IPSA), une société de services APL\360 formée en 1964 par Ian Sharp, Roger Moore et d'autres, et STSC , une société de services de conseil et de partage de temps créée en 1969 par Lawrence Breed et d'autres. Ensemble, les deux ont développé APL*Plus et ont continué à travailler ensemble par la suite, mais développent APL séparément en tant qu'APL*Plus et Sharp APL. STSC a porté APL*Plus sur de nombreuses plates-formes avec des versions pour VAX 11, PC et UNIX, tandis qu'IPSA a adopté une approche différente à l'arrivée de l' ordinateur personnel et a rendu Sharp APL disponible sur cette plate-forme en utilisant du matériel PC-XT/360 supplémentaire. . En 1993, Soliton Incorporated a été créée pour prendre en charge Sharp APL et a développé Sharp APL en SAX (Sharp APL pour Unix). À partir de 2018, APL*Plus continue comme APL2000 APL+Win.

En 1985, Ian Sharp et Dan Dyer du STSC ont reçu conjointement le prix Kenneth E. Iverson pour la contribution exceptionnelle à l'APL .

APL2

APL2 était une réimplémentation significative d'APL par IBM qui a été développé à partir de 1971 et publié pour la première fois en 1984. Il fournit de nombreux ajouts au langage, dont le plus notable est la prise en charge des tableaux imbriqués (non rectangulaires). Depuis 2018, il est disponible pour les ordinateurs centraux exécutant z/OS ou z/VM et les postes de travail exécutant AIX , Linux , Sun Solaris et Microsoft Windows .

L'ensemble de l'équipe Produits et services APL2 a reçu le prix Iverson en 2007.

APLGOL

En 1972, APLGOL a été publié en tant que version expérimentale d'APL qui a ajouté des constructions de langage de programmation structuré au framework de langage. De nouvelles instructions ont été ajoutées pour le contrôle inter-instructions, l'exécution des instructions conditionnelles et la structuration des instructions, ainsi que des instructions pour clarifier l'intention de l'algorithme. Il a été mis en œuvre pour Hewlett-Packard en 1977.

Dyalog APL

Dyalog APL a été lancé pour la première fois par la société britannique Dyalog Ltd. en 1983 et, depuis 2018, est disponible pour les plates - formes AIX , Linux (y compris sur Raspberry Pi ), macOS et Microsoft Windows . Il est basé sur APL2, avec des extensions pour prendre en charge la programmation orientée objet et la programmation fonctionnelle . Les licences sont gratuites pour un usage personnel/non commercial.

En 1995, deux membres de l'équipe de développement - John Scholes et Peter Donnelly - ont reçu le prix Iverson pour leur travail sur l'interprète. Gitte Christensen et Morten Kromberg ont été co-récipiendaires du Iverson Award en 2016.

SNRA2000

NARS2000 est un interpréteur APL open source écrit par Bob Smith, un éminent développeur et implémenteur APL de STSC dans les années 1970 et 1980. NARS2000 contient des fonctionnalités avancées et de nouveaux types de données et fonctionne nativement sur Microsoft Windows et d'autres plates-formes sous Wine .

APLX

APLX est un dialecte multiplateforme d'APL, basé sur APL2 et avec plusieurs extensions, qui a été publié pour la première fois par la société britannique MicroAPL en 2002. Bien qu'il ne soit plus en développement ou en vente commerciale, il est maintenant disponible gratuitement auprès de Dyalog.

APL GNU

GNU APL est une implémentation libre d'APL étendu comme spécifié dans ISO/IEC 13751:2001 et est donc une implémentation d'APL2. Il fonctionne sous Linux (y compris sur le Raspberry Pi), macOS, plusieurs dialectes BSD et sous Windows (soit en utilisant Cygwin pour une prise en charge complète de toutes ses fonctions système, soit en tant que binaire Windows 64 bits natif avec certaines de ses fonctions système manquantes) . GNU APL utilise Unicode en interne et peut être scripté. Il a été écrit par Jürgen Sauermann.

Richard Stallman , fondateur du projet GNU , a été l'un des premiers à adopter APL, l'utilisant pour écrire un éditeur de texte en tant qu'élève du secondaire à l'été 1969.

Interprétation et compilation d'APL

L'APL est traditionnellement un langage interprété , ayant des caractéristiques de langage telles qu'un typage de variable faible peu adapté à la compilation . Cependant, avec les tableaux comme structure de données de base, il offre des opportunités de gains de performances grâce au parallélisme , au calcul parallèle , aux applications massivement parallèles et à l'intégration à très grande échelle (VLSI), et dès le départ, APL a été considéré comme un langage hautes performances. - par exemple, il a été noté pour la rapidité avec laquelle il pouvait effectuer des opérations matricielles compliquées "parce qu'il opère sur des tableaux et effectue des opérations comme l'inversion de matrice en interne".

Néanmoins, APL est rarement purement interprété et les techniques de compilation ou de compilation partielle qui sont ou ont été utilisées sont les suivantes :

Reconnaissance d'idiomes

La plupart des interprètes de l' APL soutiennent idiome reconnaissance et évaluer idiomes que les opérations simples. Par exemple, en évaluant l'idiome BV/⍳⍴Acomme une seule opération (où BVest un vecteur booléen et Aest un tableau), la création de deux tableaux intermédiaires est évitée.

bytecode optimisé

Un typage faible en APL signifie qu'un nom peut référencer un tableau (de n'importe quel type de données), une fonction ou un opérateur. En général, l'interpréteur ne peut pas savoir à l'avance de quelle forme il sera et doit donc effectuer des analyses, des vérifications de syntaxe, etc. à l'exécution. Cependant, dans certaines circonstances, il est possible de déduire à l'avance le type auquel un nom doit faire référence, puis de générer un bytecode qui peut être exécuté avec une surcharge d'exécution réduite. Ce bytecode peut également être optimisé à l'aide de techniques de compilation telles que le repliement constant ou l'élimination de sous-expressions communes . L'interpréteur exécutera le bytecode lorsqu'il est présent et lorsque toutes les hypothèses qui ont été faites sont satisfaites. Dyalog APL inclut la prise en charge du bytecode optimisé.

Compilation

La compilation d'APL a fait l'objet de recherches et d'expérimentations depuis que le langage est devenu disponible pour la première fois ; le premier compilateur est considéré comme le Burroughs APL-700 qui est sorti vers 1971. Afin de pouvoir compiler APL, des limitations de langage doivent être imposées. APEX est un compilateur APL de recherche écrit par Robert Bernecky et disponible sous la licence publique GNU .

Le compilateur STSC APL est un hybride d'un optimiseur de bytecode et d'un compilateur - il permet la compilation de fonctions en code machine à condition que ses sous-fonctions et ses globales soient déclarées , mais l'interpréteur est toujours utilisé comme bibliothèque d'exécution et pour exécuter des fonctions qui ne ne répondent pas aux exigences de compilation.

Normes

L'APL a été normalisé par le groupe de travail X3J10 de l' American National Standards Institute (ANSI) et l'Organisation internationale de normalisation (ISO) et la Commission électrotechnique internationale (CEI), ISO/CEI Joint Technical Committee 1 Subcommittee 22 Working Group 3. Le langage APL de base est spécifié dans l'ISO 8485:1989, et le langage APL étendu est spécifié dans l'ISO/CEI 13751:2001.

Les références

Lectures complémentaires

Vidéo

Liens externes

Ressources en ligne

Fournisseurs

Groupes d'utilisateurs et sociétés