![](https://www.developpez.com/images/logos/programmation.png)
« J est un langage de programmation évolué à usage général particulièrement adapté à l'analyse mathématique, statistique et logique des données. C'est un outil puissant pour développer des algorithmes et explorer des problèmes qui ne sont pas encore bien compris », précisent ses concepteurs.
J est écrit en C portable et est disponible pour Windows, Linux, Mac, iOS, Android et Raspberry Pi. J peut être installé et distribué gratuitement. Les sources sont fournies sous licence commerciale et sous licence GPL 3.
Quelle plus-value par rapport à l’existant ?
En plus de la programmation fonctionnelle, le langage J propose les paradigmes tacite, objet et matriciel. C’est sur le dernier que, d’après ses concepteurs, repose sa singularité. En effet, ces derniers proposent aux habitués de langages comme le C d’abandonner le paradigme de boucles au profit d’expressions matricielles équivalentes. En guise d’exemple, la seule ligne de code mandel =: 3 : '(2 > | (y + _&[`*: @.(2&>@:|))^:(i.20) y) i. 0'"0 dans le bloc qui suit permet de provoquer l’exécution, une vingtaine de fois, de l’équation z_(n+1) = z_n**2 + C.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | load'viewmat' size =: 100 NB. z_0 = C NB. z_(n+1) = z_n**2 + C NB. NB. We iterate this equation at most 20 times NB. but short-circuit out (and return inf "_") if the value is > 2 NB. Then we compute the magnitudes of every value NB. And find the first result that is > 2 mandel =: 3 : '(2 > | (y + _&[`*: @.(2&>@:|))^:(i.20) y) i. 0'"0 plane =: (j.i.size) + (size, size) $ i.size center =: (0.75 * size) j. (0.5 * size) scale =: % 0.35 * size NB. Run `mandel` over out coordinate plane and plot it viewmat mandel scale * plane – center |
Code : | Sélectionner tout |
1 2 3 4 5 | for(i = 0;i<sizeof(x)/sizeof(x[0]);++i) for(j = 0;j<sizeof(y)/sizeof(y[0]);++j) z = x[i] + y[i][j]; } } |
D’après les concepteurs du langage, l’approche J est meilleure pour plusieurs raisons : un code plus court est plus aisé à comprendre ; l’utilisation du paradigme matriciel permet de s’appuyer sur des expressions (au sens d’expressions littérales) plutôt que sur des instructions, ce qui permet d’obtenir des blocs de code beaucoup plus compact là où il aurait fallu d’imbriquer plusieurs structures de boucles.
« Le code C exige que le programmeur descende au niveau des éléments individuels du tableau. Un programmeur J pense en termes de tableaux entiers, en les combinant à l'aide de primitives qui permettent une manipulation directe des tableaux », ajoute l’équipe de développement. En fait cette dernière est d’avis que « l’approche que J adopte pour l’itération est bien meilleure que celle des autres langages. » Ce développement des concepteurs du J suggère que les structures de boucles n’ont pas leur place dans les langages de programmation impératifs. Le langage donne néanmoins la possibilité aux programmeurs d’écrire du code dans un style impératif proche du C en mettant sur pied des boucles. Ci-dessous, la liste des structures de contrôle disponibles avec le langage.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | assert. T break. continue. for. T do. B end. for_xyz. T do. B end. goto_name. label_name. if. T do. B end. if. T do. B else. B1 end. if. T do. B elseif. T1 do. B1 elseif. T2 do. B2 end. return. select. T case. T0 do. B0 fcase. T1 do. B1 case. T2 do. B2 end. throw. try. B catch. B1 catchd. B2 catcht. B3 end. while. T do. B end. whilst. T do. B end. |
Et si le « gap » pouvait être comblé à l’aide de bibliothèques appropriées ? Armadillo par exemple en est rendu à sa version 9.8. C’est une bibliothèque C++ dédiée aux mathématiques matricielles. Elle met à la disposition des programmeurs une syntaxe et des fonctionnalités similaires à celles qu’offre le langage de script Matlab. Les programmeurs Haskell pour leur part disposent de la bibliothèque « linear » conçue pour la manipulation de vecteurs. Avec de tels outils en main, le programmeur doit pouvoir arriver à penser comme le suggèrent les créateurs du langage J : faire usage de structures matricielles pour résoudre des problèmes auxquels on apporte généralement solution à l’aide de structures de contrôles, notamment, des boucles. Deux camps s’opposent : les langages avec paradigme de programmation matriciel et ceux auxquels on adjoint des bibliothèques. Après, il faut ajouter les aptitudes de l’opérateur qu’est le programmeur.
Source : jsoftware
Et vous ?
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
Voir aussi :
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
Vous avez lu gratuitement 0 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.