# J (langage)

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 mars 2011, la septième version de J (J701) est sous double licence : GPLv3 ou une licence commerciale suivant l'usage envisagé.

## Caractéristiques

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

* Addition de deux chiffres
On utilise le verbe dyadique +
* Déclaration d'une liste de chiffre et calcul de sa longueur
* 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.
* 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 :
Cette séquence de trois verbes (+/ % #) est appelée fourche (fork). On peut l'utiliser comme une fonction:
.NB est utilisé pour les commentaires
* Calcul de l'inverse d'une matrice 3x3
Le signe moins s'écrit _ et non - en langage J.
* Supprimer une lettre dans une phrase en utilisant le verbe dyadique -.

## Plateformes

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

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

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 27 août 1989 à 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 26 février 1990 et ensuite le 13 août 1990 à 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 septembre 1994. 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 février 1996.
La première conférence J a lieu le 26 juin 1996 à l'Université de Toronto. Elle compte 123 participants. Une version J4 sort en mars 1998. 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 avril 2000, la société ISI change de nom et devient Jsoftware et se consacre exclusivement au langage J. En juillet 2004 sort la première version 64 bits pour Linux et Windows (version J5), et en juillet 2006 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 août 2010 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 février 2014 apparaît la version 8 dont JFE est cette fois-ci basée sur Qt. En décembre 2019, apparaît la version 9 qui apporte de nouvelles primitives pour les itérations.