IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Java pourrait être doté d’un interpréteur boucle : lecture - évaluation – impression


Sujet :

Java

  1. #1
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut Java pourrait être doté d’un interpréteur boucle : lecture - évaluation – impression
    Java pourrait être doté d’un interpréteur boucle : lecture - évaluation – impression (REPL)
    le projet Kulla nait sur OpenJDK

    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 ?

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Points : 3 768
    Points
    3 768
    Billets dans le blog
    12
    Par défaut
    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 ?

  3. #3
    Membre émérite
    Avatar de Voyvode
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 476
    Points : 2 678
    Points
    2 678
    Par défaut
    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.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2012
    Messages : 29
    Points : 110
    Points
    110
    Par défaut
    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).

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    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?-)

  6. #6
    Membre confirmé Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Points : 466
    Points
    466
    Par défaut
    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.

  7. #7
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut
    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

  8. #8
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    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

  9. #9
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut Jython
    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

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    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.

  11. #11
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    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])

  12. #12
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut
    Bonjour,

    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 ?

    Merci de me répondre

    Salutations

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    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 ?
    Passons sur le fait que JDK 8 est sorti en Mars et que JDK 7 date de 2011.

    Quels points avantageux exactement ?
    Si tu veux parler du typage dynamique, peut-être parce que c'est impossible car totalement antinomique au langage ?

    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...

  14. #14
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut Une idée d'implemetation
    Bonjour,

    Non, il faudrait le même invite que python mais pour java.

    Voici un petit algorithme que j'imagine pour son implemetation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Begin.
    Ask : "whould you like to save your next commands in a source java file ? y/n"
     
    if answer == y
     
       show the stop button
        When the user type enter.
           If this command is valid
             Write it in the file
     
     
    When the user click stop button.
     
    if the file hase been saved ?
      show message : "your file has been saved to" + absolutefilepath.
     
    If answer == n
     
    Enter in the normal interactive mode whithout savig commands 
    if the user presss enter
       check the command synthaxe.
        if there is a syntace error.
         println (syntaxe error at : position incorrect word : wrond word.
    else
       Execute command.
     
    End

    J'espère m'être bien fait comprendre

    J'attends vos réactions

    Salutations

    Citation Envoyé par thelvin Voir le message
    J'ai rien compris à ces deux phrases. Par exemple qui d'autre qu'un développeur va utiliser une invite Python ?

    Personne d'autre mais ça peut fortement les aider pour le débugage et c'est dans ce cadre là que j'aurais besoin d'une tel fonction en tant que développeur java.


    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.
    Quel est la raison technique qui fait qu'avec java, une telle fonction est inimaginable et reste du domaine du fantasme ?

    Merci de me répondre

    Salutations

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Citation Envoyé par Battant Voir le message
    Quel est la raison technique qui fait qu'avec java, une telle fonction est inimaginable et reste du domaine du fantasme ?
    Le paragraphe que tu cites dit lui-même que ce n'est pas inimaginable.

    Il dit aussi que ça sera forcément très différent. Pour Java comme pour tout langage par encapsulation de classe, par blocs, et à typage statique. Parce que chacun de ces attributs force des contraintes sur le mécanisme de compilation qui ne peuvent pas être résolues en tapant le code au fur et à mesure. Python n'ayant aucun des trois, il peut.

  16. #16
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut Liste d'implémentations existantes.
    Bonjour,

    Bien que les implémentations soient différentes , pourriez-vous svp me donner une liste de liens vers ces dernière ?

    Je serais intéressé à voir comment cela fonctionne sur éclipse.

    Salutations

  17. #17
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Citation Envoyé par Battant Voir le message
    Bien que les implémentations soient différentes , pourriez-vous svp me donner une liste de liens vers ces dernière ?
    Désolé non, je les ai vues passer ici ou là, mais ça ne m'intéressait pas, et je n'ai pas noté où les retrouver.

  18. #18
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    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

  19. #19
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut
    Bonjour,

    Citation Envoyé par thelvin Voir le message
    Désolé non, je les ai vues passer ici ou là, mais ça ne m'intéressait pas, et je n'ai pas noté où les retrouver.
    Si quelqu'un trouve l'une ou l'autre de ces implémentation, merci de poster le lien sur ce forum.

    En attendant, je chercherai de mon côté.

    Salutations

  20. #20
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 130
    Points
    9 130
    Par défaut
    si j'ai bien compris il s'agit de faire un truc à la jline

    lancer une jvm et avoir un prompt pour exécuter des commandes est un truc qui existe dans quelques outils

    il y a même SshTerminal qui permet d'exposer une session jline sur ssh

    qui dit prompt et commande dit langage de commande
    il faut donc un interprète

    et là il y a déjà un standard dans les dernières version.
    jjs n'est rien de plus qu'une boucle d'évaluation reposant sur la JVM et utilisant le langage javascript.

    je ne saisi pas bien le but du projet

    A+JYT

Discussions similaires

  1. Java EE 7 pourrait être très orienté Cloud
    Par Hinault Romaric dans le forum Java EE
    Réponses: 25
    Dernier message: 09/09/2012, 02h04
  2. Graal : le compilateur dynamique Java pourrait être utilisé dans les JVM
    Par Hinault Romaric dans le forum Général Java
    Réponses: 40
    Dernier message: 05/04/2012, 00h59
  3. Intéropérabilité entre un client java et serveur dot net
    Par miss_2000 dans le forum Services Web
    Réponses: 1
    Dernier message: 01/12/2006, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo