Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

Java : le projet Kulla approuvé
Il permettra de doter la plateforme d'un interpréteur boucle : lecture - évaluation - impression (REPL)

Le , 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 :

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


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Gugelhupf Gugelhupf - Modérateur http://www.developpez.com
le 04/09/2014 à 19:40
Je n'en vois pas trop l'utilité comme ça... mais peut-être que ça pourra servir à mettre en place des règles métiers de manière dynamique comme Drools ?
Avatar de Voïvode Voïvode - Membre émérite http://www.developpez.com
le 04/09/2014 à 20:18
Ce n’est peut-être pas indispensable pour un langage comme Java, mais l’utilité du REPL n’est plus à démontrer.

Je pense que beaucoup apprécient des langages comme Python parce qu’ils donnent la possibilité de « dialoguer » avec son programme. L’air de rien, cela rend le développement nettement plus concret.
Avatar de Cyäegha Cyäegha - Membre régulier http://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).
Avatar de professeur shadoko professeur shadoko - Membre expérimenté http://www.developpez.com
le 05/09/2014 à 10:24
dans ce cas il faut enlever le "P" et le remplacer par une notion plus abstraite (alimenter un Stream)
(eh eh ça me rappelle les bons vieux Shells sauf qu'au lieu de mettre simplement du texte on produit des objets - comme en PowerShell?-)
Avatar de bruneltouopi bruneltouopi - Membre confirmé http://www.developpez.com
le 05/09/2014 à 10:35
Il parait que Oracle voit de plus en plus que Java a pris du retard sur les nouveaux langages.
C'est une bonne nouvelle après l'insertion des expressions lambda.c'est déjà pas j'attend cela avec impatience.
Avatar de Battant Battant - Membre habitué http://www.developpez.com
le 06/09/2014 à 0:42
Bonjour,

J'ai découvert cette fonction avec python. Un tel mode devrais selons moi premièrement demander si le développeur souhaite enregistrer le code qu'il pape dans un fichier et si oui sous quel non

Ensuite on devrait pouvoir arrêter l'enregistrement à tout moment et renouveler la procédure pour d'autre fichier. Il pourrait même avoir un mode réservé au développeur ou le code exécuter s'affiche en cour d'exécution.

Le fait que java ne soit pas un langage orienté expression n'est à mon avis pas une raison valable pour ne pas implémenter cela comme python le fait et cette fonctionnalité me permettrai de mieux profiler un programme dénigre mon code et mieux comprendre pourquoi tel ou tel erreur ou exception survien.
C'est une des raisons pour lesquelles j'ai hésiter a commencer mon projet en python je suis pari finalement sur java et swing que je connais bien et dont j'ai vu que la réactivité et les thread étaient bien gérer. il y a toutefois des aspect de python que je trouve intéressant comme le typage dynamique, l'héritage multiple voir supprimer des classes ou des propriétés en cours d'exécution.

Quel serais le bon système ?

Jython ?

J'attends vos réaction

Salutations
Avatar de professeur shadoko professeur shadoko - Membre expérimenté http://www.developpez.com
le 08/09/2014 à 10:50
ne pas confondre soupçonner et sonner la soupe
on peut avoir des raisons d'utiliser des langages orientés script dans certaines circonstances (j'utilise Groovy)
mais aussi de bonnes raisons de ne pas les utiliser: je travaille dans le monde scientifique où les pythoneurs et les pythonisses abondent et vraiment les excès de python nuisent grave à la digestion
Avatar de Battant Battant - Membre habitué http://www.developpez.com
le 08/09/2014 à 19:50
Citation Envoyé par professeur shadoko  Voir le message
ne pas confondre soupçonner et sonner la soupe
on peut avoir des raisons d'utiliser des langages orientés script dans certaines circonstances (j'utilise Groovy)
mais aussi de bonnes raisons de ne pas les utiliser: je travaille dans le monde scientifique où les pythoneurs et les pythonisses abondent et vraiment les excès de python nuisent grave à la digestion

Et que pensez-vous de jython ?

Merci de me répondre

Salutations
Avatar de thelvin thelvin - Modérateur http://www.developpez.com
le 09/09/2014 à 1:08
Citation Envoyé par Battant  Voir le message
Ensuite on devrait pouvoir arrêter l'enregistrement à tout moment et renouveler la procédure pour d'autre fichier. Il pourrait même avoir un mode réservé au développeur ou le code exécuter s'affiche en cour d'exécution.

J'ai rien compris à ces deux phrases. Par exemple qui d'autre qu'un développeur va utiliser une invite Python ?

Citation Envoyé par Battant  Voir le message
Le fait que java ne soit pas un langage orienté expression n'est à mon avis pas une raison valable pour ne pas implémenter cela comme python le fait et cette fonctionnalité me permettrai de mieux profiler un programme dénigre mon code et mieux comprendre pourquoi tel ou tel erreur ou exception survien.

Pas "valable" ? C'est une raison qui pointe que c'est impossible, par état de fait. Python peut proposer son invite parce qu'il est ce qu'il est, et Java étant fondamentalement différent il ne pourra pas faire de le même manière.
Ça veut pas dire qu'un genre d'invite Java qui servirait à la même chose, n'est pas concevable, il existe des trucs de ce genre. Mais leur fonctionnement est fatalement différent, sans quoi le langage proposé serait autre chose que du Java.
Avatar de professeur shadoko professeur shadoko - Membre expérimenté http://www.developpez.com
le 09/09/2014 à 10:10
Citation Envoyé par Battant  Voir le message
Et que pensez-vous de jython ?

je ne pense plus ....
mais sur notre projet jython pose quelques problèmes avec d'autres librairies python ... et j'aimerai qu'on laisse tomber pour faire une interface Py4J (quoique je ne sois pas sûr que ça résolve tout)
je redoute les querelles de chapelle (mais ça ne m'empêche pas de penser que les tonnes de librairies scientifiques python vont poser de sacrés problèmes à long terme, et ça m'agace de me faire friter par des gens par ailleurs très brillants qui ont des préjugés contre Java.... alors je leur chante une adaptation du "python" de Charles Trenet [http://www.paroles.net/charles-trene...erpent-python])
Offres d'emploi IT
Chef de Produit - stage
Work4 Labs - Ile de France - Paris
Lead développeur .Net h/f
EASY PARTNER - Ile de France - Paris (75000)
Ingénieur développeur web (H/F)
CTS - Midi Pyrénées - Toulouse (31000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil