J (langage)

Un article de Wikipédia, l'encyclopédie libre.

J (langage)
Date de première version 1990
Paradigme matriciel, fonctionnel, tacite,objet
Auteur Kenneth E. Iverson, Roger Hui
Développeur JSoftware
Dernière version J9.5.1 ()
Typage dynamique
Influencé par APL, FP, FL
A influencé NumPy, SuperCollider
Implémentations J, microJ
Système d'exploitation Multi-plateforme
Licence GPL
Site web http://www.jsoftware.com
Extension de fichier .ijs .ijx

Le langage J est un langage de programmation fonctionnelle développé par Kenneth Iverson et Roger Hui (en) en 1990. Il est présenté comme l'un des successeurs du langage APL (inventé par Iverson) dont il fait la synthèse et en reprend la philosophie avec une influence notoire des langages FP et FL (en) de John Backus.

À la différence d'APL, le langage J utilise uniquement le jeu de caractères ASCII. Gérant facilement des tableaux multidimensionnels, il se distingue par une notation infixée très compacte. Certains caractères qui fonctionnent par paires ([], {}, "", <>) dans la plupart des langages de programmation peuvent être utilisées ici individuellement. Le langage J fait appel à un vocabulaire particulier issu de la grammaire. Ainsi les fonctions sont appelées verbes et les constantes des noms. Les adverbes et les conjonctions modifiant les actions d'un verbe. Le langage J supporte la programmation tacite. C'est-à-dire que la programmation se fait par combinaisons de fonctions sans référence aucune à des noms d'argument. L'un de ses domaines de prédilection est l'analyse de données d'un point de vue mathématique, statistique ou logique. Il dispose d'une bibliothèque standard et de plusieurs bibliothèques graphiques. Il est utilisable depuis une console, un navigateur ou un environnement de développement intégré basé sur Qt. Le langage J s'interface avec le web et les bases de données.

Depuis , la septième version de J (J701) est sous double licence : GPLv3 ou une licence commerciale suivant l'usage envisagé.

Caractéristiques[modifier | modifier le code]

La programmation en langage J effectue des opérations vectorielles sur des tableaux multidimensionnels. Les verbes sont des fonctions d'un ou deux caractères qui s'appliquent à ces derniers. Il y a deux types de verbes: monadiques ou dyadiques. Les verbes dyadiques ont la particularité de disposer d'arguments avant et après. À la différence de la plupart des langages de programmation, les expressions sont évaluées de la droite vers la gauche.

Exemples[modifier | modifier le code]

  • Addition de deux chiffres

On utilise le verbe dyadique +

3 + 4
7
  • Déclaration d'une liste de chiffre et calcul de sa longueur
w =. 1 2 3 4 5
1 2 3 4 5
#w
5
  • Somme d'une liste de chiffres

Le verbe +/ dérive du verbe + et de l'adverbe insertion /.

Le verbe + est inséré entre chaque élément de la liste pour en obtenir la somme.

+/ w
15
  • Moyenne arithmétique d'une liste de chiffre

Nous avons le verbe +/ qui fait la somme de la liste des chiffres et le verbe # qui calcule la longueur de la liste. En utilisant le verbe % pour la division, cela donne :

(+/ % #)w
3

Cette séquence de trois verbes (+/ % #) est appelée fourche (fork). On peut l'utiliser comme une fonction:

.NB Moyenne arithmétique
moya =: +/ % #
moya w
3

.NB est utilisé pour les commentaires

  • Calcul de l'inverse d'une matrice 3x3
M =: 3 3 $ 3 4 7 0 0 4 6 0 3
M
3 4 7
0 0 4
6 0 3
%. M
   0  _0.125 0.1667
0.25 _0.3438 _0.125
   0    0.25      0

Le signe moins s'écrit _ et non - en langage J.

  • Supprimer une lettre dans une phrase en utilisant le verbe dyadique -.
'souffrir du soleil' -. 'f'
sourir du soleil

Plateformes[modifier | modifier le code]

J est disponible sur les plateformes Windows, Linux, Mac OS, Android, iOS, Raspberry Pi, et pour des architectures 32 ou 64 bits. D'anciennes versions sont disponibles pour MS-DOS, Windows CE, PocketPC ou OS/2.

L'interprète de commande écrit en C sert de socle commun à toutes les plateformes et facilite la portabilité.

Documentation[modifier | modifier le code]

La documentation du langage J comporte un dictionnaire composé de mots identifiés en tant que nom, verbe, adverbe et conjonction. Les verbes sont présentés sous leur forme monadique (un argument à droite) ou dyadique (argument de part et d'autre). cette documentation porte le nom de NuVoc.

Histoire[modifier | modifier le code]

Le contexte dans lequel est né le langage J a cela de particulier qu'il s'agissait au début d'apporter des améliorations au langage APL. L'une d'entre elles, assez radicale, étant l’usage de caractères ASCII au lieu de caractères spéciaux. C'est aussi le fruit d'une longue réflexion sur la rationalisation d'APL allant de 1978 à 1989 (APL existe déjà depuis 1964). Étant en semi-retraite, Kenneth Iverson décide de porter son attention à l'utilisation du langage APL pour l'enseignement. Mais pour ce faire, il est souhaitable que cette évolution du langage APL soit : imprimable sur une imprimante standard, disponible sur une large variété d'ordinateurs, simple et généraliste et, possiblement distribué en shareware afin qu'il soit accessible financièrement à des étudiants ou des écoles.

Ainsi, durant l'été 1989 Arthur Whitney (en), qui travaille pour la société canadienne I. P. Sharp Associates (en) (IPSA), rend visite à Kenneth Iverson. En partant de zéro, il construit un embryon d'interprète J en une après-midi codé en langage C sur un ordinateur PC AT&T 3B1 (en). Ce prototype d'une page implémente uniquement la fonction + et l'opérateur /. Kenneth Iverson l'étudie durant une semaine et le montre à Roger Hui, un autre employé de l'IPSA qu'il connaît en tant qu'utilisateur d'APL depuis 1981.

Ce dernier est fasciné par le style de programmation en langage C faisant un usage intensif et original du préprocesseur. Le à 4 heures de l'après-midi, ils se mettent à écrire les premières lignes de code de l'interprète J à partir du travail d'Arthur Whitney. À ce stade ils pensent encore développer un dialecte du langage APL qui n'utiliserait que les caractères ASCII codés sur 7 bits. Le nom J s'est imposé lorsqu'il a fallu sauvegarder le code source pour la première fois. L'anecdote raconte que Roger Hui a choisi J car c’est la touche centrale du clavier sur laquelle on a le plus de chance de tomber les yeux fermés.

Par la suite, Eugene McDonnell (en) de l'agence Reuters fournit les codes C pour les fonctions mathématiques tandis que D. L. Orth de chez IBM porte J sous l'architecture RS/6000 et Bernd Ulmann le fit pour OpenVMS. L. J. Dickey de l'Université de Waterloo (Canada) contribua au développement de J pour les autres plateformes dont SPARC.

La première présentation officielle de J eut lieu à la conférence du SIG APL de Toronto le et ensuite le à la conférence APL90 de Copenhague. L'arrivée du langage J crée une scission parmi les utilisateurs d'APL. Les uns apprécient que le langage soit enfin utilisable à partir d'un terminal ASCII classique car à cette époque un terminal APL sur trois était alors électromécanique, et peu de ceux avec écran disposaient de caractères programmables. Les autres, trouvant plus parlants les signes spéciaux d'APL (proches des mathématiques classiques, ou les généralisant) préféreront rester sur ce langage.

En février de cette même année, Eric Iverson (le fils de Kenneth Iverson) crée la société Iverson Software Incorporated (ISI) et en mai, Kenneth Iverson, Eugene McDonnell, Arthur Whitney et Roger Hui intègrent celle-ci pour pérenniser le développement du langage J. À la suite d'un désaccord, Arthur Whitney, quitte la société en 1991 pour développer son propre langage : le langage K. Le principal point de désaccord porte sur la complexité qu'a introduite la notion de rang (rank) dans le langage J. Néanmoins, la première version commerciale (version J2) sort en . Elle se décline en trois éditions : Professional, Standard et FreeWare. La dernière étant une version éducative gratuite ne fonctionnant que sous Windows 3.1. La version pour Windows 95 supporte OLE 2.0, ce qui en fait un module de calcul pour les applications de cette plateforme. Elle est dotée d'un EDI propriétaire spécialement développé pour l'occasion et appelé Window Driver (WD). Au-delà des États-Unis et du Canada, le langage bénéficie de distributeurs en Europe (France, Allemagne, Autriche) et en Océanie (Australie, Nouvelle-Zélande). Il s'ensuit la version J3 en .

La première conférence J a lieu le à l'Université de Toronto. Elle compte 123 participants. Une version J4 sort en . Cette dernière est aussi dotée de WD pour Linux reposant sur Java et Swing. Elle introduit aussi la programmation orientée objets et le support d'OpenGL.

En , la société ISI change de nom et devient Jsoftware et se consacre exclusivement au langage J. En sort la première version 64 bits pour Linux et Windows (version J5), et en sort la première version (J6) supportant Unicode (UTF-8). La vitesse d'exécution augmente d'un facteur 15 sous Windows, 9 sous MacOS et 6 sous Linux. En sort la version J7. Celle-ci signe la fin de WD en tentant de créer un EDI unifié basé sur Gtk pour plusieurs plateformes qui se nomme J Front End (JFE). Elle propose aussi un second EDI appelé JHS (J HTTP Server) qui a la particularité de fonctionner dans un navigateur. JHS repose sur Javascript et Ajax. L'idée sous-jacente étant de dissocier complètement l'interprète J (J Engine) du reste de son environnement (JFE ou JHS). La version 7 est également la première version à fonctionner sous iOS. En apparaît la version 8 dont JFE est cette fois-ci basée sur Qt. En , apparaît la version 9 qui apporte de nouvelles primitives pour les itérations.

Annexes[modifier | modifier le code]

Sources[modifier | modifier le code]

  • Dick Pountain, The Joy of J, BYTE, Volume 20, Number 9, September 1995, pp267-268

Bibliographie[modifier | modifier le code]

  • (en) Alan Holt, Network Performance Analysis: Using the J Programming Language, Springer-Verlag, (ISBN 978-1-84628-822-7), 2007.
  • (en) Clifford A. Reiter, Fractals, Visualization and J, (ISBN 978-1895721188), 2007.
  • (en) Norman J. Thomson, J - The Natural Language for Analytic Computing, Research Studies Press, Robotics and Mechatronics Series, (ISBN 978-0863802751), 2001.
  • (en) Howard A. Peelle, Mathematical Computing in J: Introduction, Research Studies Press, (ISBN 978-0863802812), 2005.

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]