Donc bon, ça parle de Nice, un langage pour la JVM, sous licence GPL, dont je n'avais jamais entendu parlé et qui date un peu (2003, soit entre Java 1.4, sorti en 2002 et Java 5 sorti en 2004), dont le développement a cessé.
En les parcourant, je me rend compte que la plupart ont soit été ajoutées à Java dans les versions ultérieures, soit sont présentes dans Kotlin :
lambdas (appelées ici "anonymous methods")
string multilignes
"automatic contructors", qui rappellent les data classes de Kotlin ou les records de Java 16 (sans être identique ni à l'un ni à l'autre)
interfaces avec implémentation de méthode par défaut
arguments nommés et possiblement avec valeur par défaut (ce qui les rend optionnels dans ce cas)
mot-clé var pour les variables locales (avec inférance le type)
nullabilité indiquée dans le type des variables et vérifiée à la compilation, comme avec Kotlin. La syntaxe diffère. En Nice le point d'interrogation est situé avant : ?String.
cast automatique dans un if avec une condition instanceof
"abstract interfaces", qui permettent la même chose que les extensions methods de Kotlin : ajouter du comportement sur des classes existantes
D'autres semblent terriblement banales mais n'étaient pas présentes dans Java avant la version 52 :
les enums (qui, comme ceux de Java, peuvent avoir des attributs)
la généricité ("parametric classes")
les boucles foreach avec la même syntaxe que Java for (String s : strings), mais avec les ranges en plus : for(int i : 1..10).
Nice intègre aussi la programmation par contrats (ce n'est pas encore redevenu à la mode, il faudra encore quelques années d'attentes avant qu'on redécouvre ça).
Pour conclure :
Java se modernise, mais ça fait 20 ans que des problèmes d'ergonomie du langage ont été vu et que des solutions ont été imaginées pour y remédier. Bien sûr il n'est pas rare d'avoir des techniques ou des concepts traités jadis dans la recherche qui refont surface bien des années plus tard ; ici je trouvais intéressant de voir un cas qui concerne l'évolution d'un langage de programmation en particulier.
Et donc le rapport avec la choucroute : Kotlin est très très proche de Nice en termes de fonctionnalités. Si proche que je me demande si Nice n'est pas une source d'inspiration directe. Je n'aurais pas été étonné d'apprendre qu'un des auteurs de Nice ait participé de près ou de loin à l'élaboration de Kotlin, mais il semblerait que ce ne soit pas le cas.
P.S. : les releases du compilo sont sur Sourceforge. Je n'ai pas essayé de jouer avec, je ne sais pas s'il est encore utilisable aujourd'hui. Il semblerait que toutes les fonctionnalités ne sont pas implémentées (la dernière release est la 0.9.3 et la roadmap indique que la 1.0 ajoutera les enums).
L'arrivée prochaine de ces fonctionnalités avait peut-être déjà été annoncée, auquel cas ce n'est pas si étonnant de les avoir implémentées de façon identique. Il doit être possible de tirer cela au clair en écumant les JEP, mais je vais m'occuper à autre chose. ↩
Kotlin est très très proche de Nice en termes de fonctionnalités. Si proche que je me demande si Nice n'est pas une source d'inspiration directe.
Pas directement, je ne crois pas non. Andrey Breslav (Lead Language Designer) a fait une conférence en 2018 (en russe, slides PDF en anglais dispo ici) dans laquelle il développe les langages qui ont inspirés Kotlin: Java, Scala, C#, Groovy, Gosu pour les principaux.
Par contre, comme tu le dis les limitations de Java ont été identifiées il y a longtemps pour la plupart, et ce n'est pas surprenant que des solutions similaires soient proposées. Ou alors Nice a effectivement influencés Kotlin, mais indirectement via d'autres langages.
# Nice
Posté par potate . Évalué à 5.
Il y a de cela quelques temps, je trainais sur le wiki c2, et je suis tombé là dessus : http://wiki.c2.com/?NiceLanguage
Donc bon, ça parle de Nice, un langage pour la JVM, sous licence GPL, dont je n'avais jamais entendu parlé et qui date un peu (2003, soit entre Java 1.4, sorti en 2002 et Java 5 sorti en 2004), dont le développement a cessé.
La page du projet m'a mené au manuel utilisateur qui détaille les fonctionnalités prévues du langage1.
En les parcourant, je me rend compte que la plupart ont soit été ajoutées à Java dans les versions ultérieures, soit sont présentes dans Kotlin :
var
pour les variables locales (avec inférance le type)?String
.instanceof
D'autres semblent terriblement banales mais n'étaient pas présentes dans Java avant la version 52 :
for (String s : strings)
, mais avec les ranges en plus :for(int i : 1..10)
.Nice intègre aussi la programmation par contrats (ce n'est pas encore redevenu à la mode, il faudra encore quelques années d'attentes avant qu'on redécouvre ça).
Pour conclure :
Java se modernise, mais ça fait 20 ans que des problèmes d'ergonomie du langage ont été vu et que des solutions ont été imaginées pour y remédier. Bien sûr il n'est pas rare d'avoir des techniques ou des concepts traités jadis dans la recherche qui refont surface bien des années plus tard ; ici je trouvais intéressant de voir un cas qui concerne l'évolution d'un langage de programmation en particulier.
Et donc le rapport avec la choucroute : Kotlin est très très proche de Nice en termes de fonctionnalités. Si proche que je me demande si Nice n'est pas une source d'inspiration directe. Je n'aurais pas été étonné d'apprendre qu'un des auteurs de Nice ait participé de près ou de loin à l'élaboration de Kotlin, mais il semblerait que ce ne soit pas le cas.
P.S. : les releases du compilo sont sur Sourceforge. Je n'ai pas essayé de jouer avec, je ne sais pas s'il est encore utilisable aujourd'hui. Il semblerait que toutes les fonctionnalités ne sont pas implémentées (la dernière release est la 0.9.3 et la roadmap indique que la 1.0 ajoutera les enums).
Archive.org confirme qu'il existait à l'époque ↩
L'arrivée prochaine de ces fonctionnalités avait peut-être déjà été annoncée, auquel cas ce n'est pas si étonnant de les avoir implémentées de façon identique. Il doit être possible de tirer cela au clair en écumant les JEP, mais je vais m'occuper à autre chose. ↩
[^] # Re: Nice
Posté par Spyhawk . Évalué à 4.
Pas directement, je ne crois pas non. Andrey Breslav (Lead Language Designer) a fait une conférence en 2018 (en russe, slides PDF en anglais dispo ici) dans laquelle il développe les langages qui ont inspirés Kotlin: Java, Scala, C#, Groovy, Gosu pour les principaux.
Par contre, comme tu le dis les limitations de Java ont été identifiées il y a longtemps pour la plupart, et ce n'est pas surprenant que des solutions similaires soient proposées. Ou alors Nice a effectivement influencés Kotlin, mais indirectement via d'autres langages.
[^] # Re: Nice
Posté par Spyhawk . Évalué à 3. Dernière modification le 25 août 2021 à 13:46.
Un peu tardif, mais Andrey Breslav a récemment mis en ligne la présentation sur le design du langage et ses origines, en version anglais cette fois: Shoulders of Giants: Languages Kotlin learned from - Andrey Breslav - GeekOUT 2018.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.