Java : le projet Kulla approuvé
Il permettra de doter la plateforme d'un interpréteur boucle : lecture - évaluation - impression (REPL)
Le 2014-09-04 18:25:06, par Hinault Romaric, Responsable .NET
Mise à jour du 02/10/2014 : le projet Kulla approuvé
Le JDK sera doté dans une version future de fonctionnalités REPL (Read Evaluate Print Loop). Après un vote qui a eu lieu le 15 septembre dernier, le projet Kulla a été adopté par 14 voix pour, contre 0 vote négatif et aucun veto.
La JEP (JDK Enhancement Proposal) du projet est déjà disponible en ligne. Elle servira de feuille de route pour son développement. Elle décrit notamment les objectifs du projet, les motivations, les alternatives, les risques, etc.
Dans ce document, on apprend que la rétroaction immédiate qu’apportera ce projet est importante lors de l’apprentissage d’un langage de programmation. En raison de cette omission, de nombreuses écoles se sont éloignées de Java pour adopter des langages comme Python, qui disposent d’un REPL.
Selon la JEP du projet, ces fonctionnalités feront partie du JDK 9.
Consulter la JEP du projet
Maj de Hinault Romaric
La plateforme Java pourrait dans le futur être dotée de fonctionnalités REPL (Read Evaluate Print Loop) comme pour le langage de programmation LISP.
Les développeurs d’OpenJDK, la déclinaison open source de Java, étudient la possibilité d’ajouter officiellement l’outil au langage de programmation.
La discussion est effectuée dans le cadre du projet Kulla, qui a vu le jour le 27 août dernier. La mise en œuvre d’un tel programme permettra une programmation interactive, de telle sorte que tout ce qui entre au clavier est systématiquement évalué.
Avec ce mode de fonctionnement basé sur une boucle : lecture - évaluation – impression (REPL), l'interpréteur :
« Du point de vue du développeur, il est agréable d’être en mesure d’interagir avec le code pendant son exécution en temps réel, sans avoir à recompiler/redéployer », soutient Michael Facemire, analyste chez Forrester.
REPL est déjà implémenté dans la plupart des langages dynamiques et fonctionnels, y compris Scala et Clojure. Une implémentation pour Java existe même déjà en ligne sur GitHub. Cependant, Martin Odersky, fondateur de Scala, voit des limites à l’utilisation de REPL dans Java.
« Le problème avec Java est que c’est un langage fondamentalement orienté déclaration. Vous écrivez une déclaration, et c’est lorsqu’elle s’exécute qu’elle a un effet. REPL en revanche est orienté expression. Vous écrivez une expression et REPL montre le résultat, un peu comme une calculatrice », explique Martin Odersky, qui estime que REPL ne sera pas aussi utile avec Java que pour un langage orienté expression.
Le vote pour le projet va débuter le 10 septembre prochain. S’il est approuvé, le code cloné à partir de JDK9 sera utilisé pour créer l’outil.
Source : OpenJDK
Et vous ?
Que pensez-vous de ce projet ? REPL est-il utile pour le langage Java ?
Le JDK sera doté dans une version future de fonctionnalités REPL (Read Evaluate Print Loop). Après un vote qui a eu lieu le 15 septembre dernier, le projet Kulla a été adopté par 14 voix pour, contre 0 vote négatif et aucun veto.
La JEP (JDK Enhancement Proposal) du projet est déjà disponible en ligne. Elle servira de feuille de route pour son développement. Elle décrit notamment les objectifs du projet, les motivations, les alternatives, les risques, etc.
Dans ce document, on apprend que la rétroaction immédiate qu’apportera ce projet est importante lors de l’apprentissage d’un langage de programmation. En raison de cette omission, de nombreuses écoles se sont éloignées de Java pour adopter des langages comme Python, qui disposent d’un REPL.
Selon la JEP du projet, ces fonctionnalités feront partie du JDK 9.
Maj de Hinault Romaric
La plateforme Java pourrait dans le futur être dotée de fonctionnalités REPL (Read Evaluate Print Loop) comme pour le langage de programmation LISP.
Les développeurs d’OpenJDK, la déclinaison open source de Java, étudient la possibilité d’ajouter officiellement l’outil au langage de programmation.
La discussion est effectuée dans le cadre du projet Kulla, qui a vu le jour le 27 août dernier. La mise en œuvre d’un tel programme permettra une programmation interactive, de telle sorte que tout ce qui entre au clavier est systématiquement évalué.
Avec ce mode de fonctionnement basé sur une boucle : lecture - évaluation – impression (REPL), l'interpréteur :
- R : lit une expression ;
- E : évalue (calcule le résultat de) cette expression ;
- P : imprime sur la sortie standard le résultat de l'évaluation ;
- L : recommence en R.
« Du point de vue du développeur, il est agréable d’être en mesure d’interagir avec le code pendant son exécution en temps réel, sans avoir à recompiler/redéployer », soutient Michael Facemire, analyste chez Forrester.
REPL est déjà implémenté dans la plupart des langages dynamiques et fonctionnels, y compris Scala et Clojure. Une implémentation pour Java existe même déjà en ligne sur GitHub. Cependant, Martin Odersky, fondateur de Scala, voit des limites à l’utilisation de REPL dans Java.
« Le problème avec Java est que c’est un langage fondamentalement orienté déclaration. Vous écrivez une déclaration, et c’est lorsqu’elle s’exécute qu’elle a un effet. REPL en revanche est orienté expression. Vous écrivez une expression et REPL montre le résultat, un peu comme une calculatrice », explique Martin Odersky, qui estime que REPL ne sera pas aussi utile avec Java que pour un langage orienté expression.
Le vote pour le projet va débuter le 10 septembre prochain. S’il est approuvé, le code cloné à partir de JDK9 sera utilisé pour créer l’outil.
Source : OpenJDK
Et vous ?
-
adiGubaExpert éminent séniorjjs utilise le moteur Nashorn intégré au JDK, donc cela n'exécute pas du Java mais du JavaScript...
Donc l'objectif de cette JEP c'est de proposer la même chose en Java...
a++le 02/10/2014 à 17:52 -
yahikoRédacteur/ModérateurCet outil donne une vision un peu erronée de la structure et de la logique d'un programme Java. Pas certain que le but pédagogique soit bien atteint avec une telle approche.le 06/08/2015 à 19:53
-
LacunasaurusMembre régulierLa prise en charge de REPL est l’une des fonctionnalités les plus attendues de Java 9
Personnellement, sans vouloir critiquer négativement cet ajout qui reste bon à prendre, je ne vois pas trop ce que ça va apporter en plus à part à ne pas à avoir à lancer un IDE pour pouvoir tester en live 3 ligne de codes.
Tant d'énergie dépensée pour séduire des débutants qui n'en seront pas moins performant en java en ayant commencé (et continué) sur un langage permettant une plus grande facilité de compréhension de la programmation.
Ça me donne l'image d'un vendeur de produit qui va faire les sorties d'écoles afin de rendre le plus tôt possible accro à sa marque...
Pendant ce temps Microsoft sort son IDE phare en gratuit avec un émulateur Android et des fonctionnalités web qui semble (sur le papier) géniales,
Google prévois un langage spécifique à Android et le support de Dart pour cette dernière plateforme histoire de ne plus être dépendant d'Oracle (sans compter les X langages et frameworks avant-gardistes),
Php améliore ses performances,
Javascript permet de faire des applications robustes aussi bien en client qu'en serveur....
Bref si oracle veut prendre la place des langages débutants, autant qu'ils le fasse en améliorant le langage, ses fonctionnalités, son accèssiblité, sa pérennité (cf: google et android) ... pas en lachant un shell qui sera utilisé pendant 4 heures par les débutant avant de lancer un éclipse, netbeans, intellij, etc...le 07/08/2015 à 15:05 -
CyäeghaMembre régulierPour ma part, en Scala, je n'utilise guère le REPL, mais j'utilise bien les worksheets proposées par le plugin Scala pour Intellij IDEA (il y a la même chose dans le plugin pour Eclipse), qui ont grosso modo la même utilité, mais en plus flexible (on peut modifier les expressions déjà entrées, et écrire des expressions sur plusieurs lignes sans se poser de questions). Si Java se dote d'un REPL, on verra peut-être aussi arriver des worksheets dans les IDE.
Quand à l'intérêt de ce genre de choses, j'en vois deux (par rapport à faire la même chose dans un main en Java) :
- on n'a pas besoin d'ajouter des logs ou de débugger pour voir immédiatement la valeur d'une expression
- l'exécution est immédiate, le cycle compilation/exécution est masqué
Ça ne parait peut-être pas beaucoup à première vue, mais ça fait gagner un peu de temps quand on expérimente ou test de nouvelles choses, et surtout, ça fait paraitre ce genre d'expérimentation plus "naturelle" (pour moi en tous cas).le 05/09/2014 à 9:30 -
CyäeghaMembre régulierScala est typé statiquement. Accessoirement, je connais peu de monde qui le présenterait comme un "langage de script". On peut faire du scripting avec si on en a vraiment envie, mais ça n'est pas franchement l'utilisation prépondérante...
Non. Jline est une librairie pour faciliter l'écriture d'applications présentant une interface en ligne de commande, dans laquelle on va entrer des commandes spécifiques à l'application en question. Son but n'est pas d'interpréter du code Java.
Le but est de doter le langage JAVA d'un REPL, ni plus, ni moins. Si tu es familier avec jjs, tu connais le principe ; sauf que jjs sert à exécuter du javascript (sur le moteur Nashorn), et qu'on parle ici d'exécuter du java.
Quand à l'utilité d'un REPL (s'il est bien conçu), je vois au moins quatre raisons (mais il y en a surement d'autres) :
- Pour un débutant, c'est une façon plus immédiate de découvrir la syntaxe d'un langage que de passer explicitement par les étapes d'écriture dans un fichier source/compilation/exécution. Le feedback est plus rapide.
- Si on a dans le classpath du REPL les classes du projet sur lequel on est en train de travailler*, on peut appeler des méthodes pour les tester de façon interactive : c'est un outil de debugging supplémentaire.
- Pendant le développement, c'est utile pour expérimenter des bouts de code rapidement - c'est une façon instantanée de faire du prototypage (à petite échelle, s'entend).
- Quand on répond à une question sur StackOverflow et qu'on a une ou deux lignes de code d'exemple à ajouter, c'est bien pratique pour vérifier rapidement qu'on n'a pas fais d'erreur de syntaxe. Bon, OK, ce n'est pas le cas d'utilisation le plus important...
* : Ça peut être facilité par l'outil de build utilisé - c'est le cas avec SBT en Scala par exemple, et ça arrivera surement aussi en Java.le 02/10/2014 à 22:13 -
adiGubaExpert éminent séniorOui il s'agit d'instance de classe Java manipulé en JavaScript.
C'est une des fonctionnalité du moteur Nashorn...
Et ?
Ca ne change rien au fait que le language soit du JavaScript... pas du Java.
Et je ne vois toujours pas le problème à proposer deux "REPL" pour deux langages distinct.
a++le 25/08/2015 à 22:45 -
professeur shadokoMembre chevronnéeh eh j'aime le "septique"
c'est effectivement pour des raisons d'hygiène que je tiens Python à distance ....
py4J est un canevas de code qui permet la communication entre du code Python et du code Java: j'ai bien aimé l'idée de principe mais j'ai pas expérimenté ... je pourrais être déçule 10/09/2014 à 9:50 -
sekaijinExpert éminentJe ne comprends toujours pas
que fais de plus ce projet qu'on n'a pas déjà dans la JVM en standard
Aujourd'hui sans ce projet je lance une JVM
j'ai un prompt
je tappe une commande
j'obtient une réponse
je tape une autre commande
j'ai une autre réponse
etc.
Code : 1
2
3jjs> var date = Date() jjs> "Date and time: ${date}" Date and time: Mon Aug 19 2013 19:43:08 GMT+0400 (MSK)
faire des loops des ifs des switchs
la JSR-223, Scripting for the Java Platform permet de changer de langage
Qu'apporte de plus ce projet ?
A+JYTle 02/10/2014 à 17:41 -
sekaijinExpert éminentquoi qu'il arrive si on peut taper à l'interface du java vu que java est conçu pour être compiler il faudra faire quelques concessions. Je ne suis pas sur que ce soit la meilleure solution pour un débutant.
On peut très bien faire ça avec jjs invoquer les méthode des objets du projet instancier des classes tester in situ.
La aussi on peut très bien faire ça avec jjsi la seul chose qu'on ne peut pas faire c'est créer des classes. (enfin c'est compliqué)
Soit le REPL utilise la syntaxe Java pure et il n'est pas possible d'ajouter dynamiquement des méthodes donc on en revient à ce que fait aujourd'hui jjs (à la syntaxe près)
soit le REPL permet d'injecter et de modifier des méthodes dynamiquement est on n'a plus la syntaxe Java pure. le projet perds donc sont intérêt puisque d'autre langage de la jvm savent le faire aujourd'hui et le scripting langage framework permet de faire un REPL avec l'un d'entre eux.
Je ne suis toujours pas convaincu.
Pourquoi pas.
Mais je pense qu'il y a bien des choses à améliorer dans Java.
A+JYTle 03/10/2014 à 21:42 -
OPiMembre actifle 06/08/2015 à 17:31