Java pourrait être doté d'un interpréteur boucle : lecture - évaluation - impression (REPL)
Le projet Kulla nait sur OpenJDK

Le , par Hinault Romaric

0PARTAGES

7  0 
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 :

  • 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 ?

Que pensez-vous de ce projet ? REPL est-il utile pour le langage Java ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Lacunasaurus
Membre régulier https://www.developpez.com
Le 07/08/2015 à 15:05
La prise en charge de REPL est l’une des fonctionnalités les plus attendues de Java 9
Plus que le projet Jigsaw, l'api Json, et autres ?

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...
4  1 
Avatar de adiGuba
Expert éminent sénior https://www.developpez.com
Le 02/10/2014 à 17:52
Citation Envoyé par sekaijin Voir le message
la JSR-223, Scripting for the Java Platform permet de changer de langage
jjs 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++
3  0 
Avatar de yahiko
Rédacteur/Modérateur https://www.developpez.com
Le 06/08/2015 à 19:53
Cet 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.
3  0 
Avatar de Cyäegha
Membre régulier https://www.developpez.com
Le 05/09/2014 à 9:30
Pour 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).
2  0 
Avatar de Cyäegha
Membre régulier https://www.developpez.com
Le 02/10/2014 à 22:13
Citation Envoyé par thelvin Voir le message
Si on veut du typage dynamique et qu'on "aime bien des trucs de Java" il y a plusieurs solutions :
- Langages de scripts basés sur une JVM et ayant donc accès aux classes Java, mais qui ne sont pas le langage Java lui-même : Groovy, Scala, Clojure, etc.
- Faire du Java d'habitude et déléguer ce qu'on aimerait faire en langage de script, à un langage de script : JavaScript, Python, autre...
Scala 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...

Citation Envoyé par sekaijin Voir le message
si j'ai bien compris il s'agit de faire un truc à la jline
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.

Citation Envoyé par sekaijin Voir le message
je ne saisi pas bien le but du projet
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.
2  0 
Avatar de adiGuba
Expert éminent sénior https://www.developpez.com
Le 25/08/2015 à 22:45
Citation Envoyé par sekaijin Voir le message
je maistrise suffisement JS pour le savoir
mais là dans JJS il s'agit de manipuler des objet Java de la JVM
il s'agit d'instance de classe java.
Oui 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++
2  0 
Avatar de professeur shadoko
Membre expérimenté https://www.developpez.com
Le 10/09/2014 à 9:50
Citation Envoyé par Battant Voir le message

J'ai compris que vous êtes septique face à python mais alors pourquoi ne pas inclure les points avantageux de python dans open jdk 7 ?
C'est quoi py4j ?
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éçu
1  0 
Avatar de sekaijin
Expert éminent https://www.developpez.com
Le 02/10/2014 à 17:41
Je 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 : Sélectionner tout
1
2
3
jjs> var date = Date()
jjs> "Date and time: ${date}"
Date and time: Mon Aug 19 2013 19:43:08 GMT+0400 (MSK)
dans ces commande je peux créer des objets appeler des méthode voir des attributs
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+JYT
1  0 
Avatar de sekaijin
Expert éminent https://www.developpez.com
Le 03/10/2014 à 21:42
Citation Envoyé par Cyäegha Voir le message
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.
quoi 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.
Citation Envoyé par Cyäegha Voir le message
- 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.
On peut très bien faire ça avec jjs invoquer les méthode des objets du projet instancier des classes tester in situ.
Citation Envoyé par Cyäegha Voir le message
- 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).
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.
Citation Envoyé par Cyäegha Voir le message
- 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.
Je ne suis toujours pas convaincu.
Pourquoi pas.
Mais je pense qu'il y a bien des choses à améliorer dans Java.

A+JYT
1  0 
Avatar de OPi
En attente de confirmation mail https://www.developpez.com
Le 06/08/2015 à 17:31
Citation Envoyé par sazearte Voir le message
Python […] langage non typé
Python est fortement typé, mais typé dynamiquement.
1  0 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web