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 : le JDK 12 est disponible, il prend en charge Unicode 11 et les expressions Switch


Sujet :

Java

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 257
    Points
    66 257
    Par défaut Java : le JDK 12 est disponible, il prend en charge Unicode 11 et les expressions Switch
    Java : le JDK 12 est disponible en version bêta, il prend en charge Unicode 11
    et dispose d'un nouveau format de clé privée codé x25519 et x448

    Oracle a rendu disponible une version expérimentale du JDK 12 sur les plateformes Linux, Windows et MacOS pour tester les nouvelles fonctionnalités apportées et les améliorer en cas de besoin avant la date de sortie générale qui est prévue pour le 19 mars 2019. En septembre 2017, Oracle annonçait qu’il y aura à l’avenir deux versions du JDK par an du fait que Java soit en concurrence directe avec d’autres plateformes qui sont mises à jour plus souvent. La firme a tenu parole puisque après avoir lancé, il y a quelques mois environ, la version 11 de sa plateforme Java SE, le JDK 12 vient d’être présenté en bêta test.

    Rappelons que la plateforme Java SE est composée de JSR (définissant les spécifications de Java), JDK (comprenant les bibliothèques logicielles de Java), JRE (l’environnement d’exécution de Java également inclus dans JDK) et intègre des améliorations techniques avec les nouvelles fonctionnalités telles que la prise en charge d’une nouvelle forme de pool de constante CONSTANT_Dynamic, le mot clé var pour la déclaration des paramètres formels d’une expression typée implicitement et un “gabage collector” ou ramasse-miettes Epsilon pour générer l’allocation de mémoire sans implémenter de mécanismes de récupération de mémoire.

    Nom : c1.png
Affichages : 83456
Taille : 105,5 Ko

    Le JDK 12 est présenté comme une implémentation de référence de la version 12 de la plateforme Java SE. Il est caractérisé par neuf nouveautés et de nouvelles fonctionnalités telles que la prise en charge de Unicode 11 donc plus amélioré que le JDK 11 (qui prend en charge Unicode 10), l’annulation de la valeur par défaut keytool-keyalg, un nouveau format de clé privée codé x25519 et x448 compatible avec la norme RFC 8410. On compte en tout neuf caractéristiques essentiels du JDK 12 :

    • Shenandoah : c’est un ramasse-miettes à faible temps de pause en effectuant le travail d’évacuation simultanée entre les threads java en cours d’exécution. Les temps de pause sont indépendants de la taille du tas ;
    • suite Microbenchmark : c’est un outil pour aider les développeurs à utiliser les micro-critères existant déjà dans le code source du JDK ou en créer de nouveaux ;
    • expression de commutation : apporte quelques modifications à l’instruction switch pour la rendre plus flexible ;
    • littéraux de chaînes bruts : permet aux développeurs de créer leurs propres littéraux et de les ajouter au langage ;
    • API de constantes JVM : permet d’ajouter une API pour les descriptions nominales des principaux artéfacts de classes et de fichiers de classe, en particulier les constantes pouvant être chargées à partir du pool de constantes ;

    • un apport AArch64, pas deux : sert à supprimer toutes les sources liées aux arm64port pour permettre à tous les contributeurs de concentrer leurs efforts sur une implémentation ARM 64 bits unique et d’éliminer le travail en double requis par la maintenance de deux ports ;
    • archives CDS par défaut : sert à améliorer le processus de génération JDK afin de générer une archive CDS (Class Data Sharing) à l’aide de la liste de classe par défaut sur des plateformes 64 bits ;
    • collections mélangées abandonnées pour G1 : permet d’annuler les collections d’éléments lorsqu’elles peuvent dépasser la cible de pause ;
    • retournez rapidement la mémoire validée non utilisée de G1 : améliore le récupérateur G1 pour qu’il puisse renvoyer automatiquement la mémoire heap de Java au système d’exploitation lorsqu’il est inactif.

    Il intègre également des nouveaux apports et des modifications majeures comme un nouvel indicateur de ligne de commande pour un rapport d’erreur plus étendu dans les journaux d’incidents, la propriété système user.timezone a été modifiée et peut maintenant renvoyer une valeur null selon sa configuration ou encore de nouvelles options d’interdiction et d’autorisation pour la propriété système java.security.manager et bien d’autres.

    Oracle a pris la peine de décrire chaque fonctionnalité pris en compte par le JDK 12 et notifie cependant que ce dernier ne prend pas encore en compte le formatage de nombre compact. Il faut savoir que le formatage de nombre compact fait référence à la représentation d’un nombre sous une forme courte ou lisible par l’homme.
    Il encourage les développeurs à tester le l’outil et à faire part de leurs commentaires et suggestions par rapport à d’éventuels problèmes ou bugs rencontrés afin d’aider à le peaufiner et a mis à la disposition de la communauté une page dédiée qui présente les résultats des tests toutes les semaines.

    Source : JDK 12, Note de version

    Et vous ?

    Êtes-vous un développeur Java ? Que pensez-vous de ces fonctionnalités de la version bêta du JDK 12 ?
    L'avez-vous déjà testé ? Partagez avec nous vos impressions

    Voir aussi

    Andrew Haley de Red Hat donne son avis sur l'avenir d'OpenJDK, l'implémentation libre de Java SE, après la sortie de JDK 11 sous licence commerciale

    JDK 11 : trois nouveautés sont prévues ainsi que la suppression de JAVA EE, JavaFX et CORBA, dans le cadre des mises à jour semestrielles

    JDK 10 : les fonctionnalités de la prochaine version de Java sont désormais gelées, la sortie est attendue pour le 20 mars 2018

    Java 8 ne va plus recevoir de mises à jour et correctifs de sécurité à partir de septembre à moins de passer à un support commercial
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 257
    Points
    66 257
    Par défaut Java 12 ne prendra probablement pas en charge les littéraux de chaîne bruts
    Java 12 ne prendra probablement pas en charge les littéraux de chaîne bruts
    la proposition d'amélioration JDK (JEP) suggère qu'on les supprime

    Les tests pour finaliser la sortie originale du JDK 12 de Java en janvier prochain continuent depuis la disponibilité de la version bêta. Comme rapporté le mardi dernier, cette version bêta est caractérisée par neuf nouveauté essentielles et quelques nouvelles fonctionnalités. Le JDK 12 prend en charge Unicode 11, un nouveau format de clé privée codé x25519 et x448 compatible avec la norme RFC 8410 etc… L’une des principales caractéristiques de cette version est la prise en charge des littéraux de chaînes bruts. Les littéraux de chaînes de caractères permettent au développeur de créer leurs propres littéraux et de les ajouter au langage. L’ajout de cette fonctionnalité dans le langage s’est fait aussi dans le but d’aider les développeurs à exprimer plus facilement des séquences de caractères, à fournir des chaînes ciblées pour les grammaires, et à couvrir plusieurs lignes de sources. Toutefois, la proposition d'amélioration JDK (JEP), un processus élaboré par Oracle Corporation pour collecter des propositions d'amélioration du kit de développement Java et d'OpenJDK, vient de proposer qu’on supprime ces littéraux de la nouvelle version de JDK 12.

    La JEP donne plusieurs raisons à cette proposition de suppression. La plupart de ces raisons se basent principalement sur des commentaires reçus qui ressortent quelques limites de cette fonctionnalité. « En examinant les commentaires que nous avons reçus, je ne suis plus convaincue que nous ayons encore trouvé le bon compromis entre complexité et expressivité, ou que nous en avons suffisamment exploré l’espace de conception pour être sûr que la conception actuelle est la meilleure que nous puissions faire. En le retirant, nous pouvons continuer à affiner la conception, explorer plus d'options et viser un aperçu répondant réellement aux exigences du processus de fonction de prévisualisation (JEP 12) », écrit dans un mail, Brian Goetz, architecte de langage Java chez Oracle.

    Nom : java.png
Affichages : 100731
Taille : 40,2 Ko

    Dans le mail adressé à la communauté, il expose quelques-uns de ces commentaires qui « sont sont incomplets et sans ordre particulier » :

    • la séquence à deux guillemets ‘’ peut être confondue pour une chaîne vide mais en fait c’est un délimiteur ;
    • bien que ce soit cool que nous puissions intégrer une série de dix-sept devis dans une chaîne de caractères entre dix-huit guillemets, ces chaînes peuvent également être difficiles à lire ;
    • il n’y pas de voie directe pour démarrer ou de terminer un littéral de chaîne brute avec un backquote ;
    • les littéraux de chaîne brute peuvent être multilignes mais les chaînes traditionnelles de littéraux ne peuvent pas l'être. Alternativement, les littéraux multilignes doivent aussi être brut, ce qui ne correspond pas toujours à ce que l’utilisateur veut. C’est un inutile asymétrie, étant donné que ces propriétés sont logiquement indépendantes, et ces asymétries augmentent généralement la charge cognitive de l'utilisateur ;
    • le caractère backquote est un peu léger ; il est facile à manquer et peut donc semer la confusion lorsque la chaîne se termine et le code le contenant reprend ;
    • la règle "nombre illimité de guillemets" peut contraindre les IDE sur le point de savoir si une séquence de guillemets est open-contents-close, ou un grand séparateur d'ouverture, limiter leur capacité à aider en remplissant les délimiteurs de fermeture et placer le curseur au bon endroit. Nous voulons que Java reste conviviales.


    A ce dernier commentaire, un internaute répond suivant ces lignes « honnêtement, cela me semble être un argument insensé. Les littéraux de chaîne bruts fonctionnent déjà assez bien dans IntelliJ, avec la surbrillance et tout. Visual Studio Code pourrait être facilement modifié pour prendre cela en charge, en prenant en compte des schémas similaires d'autres langages de programmation déjà pris en charge, en particulier Markdown. Les surligneurs basés sur des expressions régulières pourraient très facilement prendre en charge cette syntaxe en utilisant des références arrière. Et quand tout le reste échoue, les expressions comme hardcoding `, ``, ```, ```` ne semble pas être la plus mauvaise façon de le faire en Java ».

    Un autre, estime qu’il ne voit pas pourquoi l’on se pose beaucoup de questions sur une chose qui paraît assez simple. Il propose, pour palier au problème des littéraux, de copier purement et simplement l’implémentation d’un autre langage pour clore le débat. Brian Goetz, toujours dans son mail, pense que laisser la chose dans l’état actuel ne va pas dans l’avantage au langage et qu’il faudra attendre peut-être un plus pour intégrer cette fonctionnalité de façon permanente. Il finit son mail en déclarant que « nous pensons pouvoir faire mieux sur certains ou plusieurs de ces fronts. L'un des avantages de la nouvelle cadence plus rapide est que le coût de rater un train (même celui auquel vous êtes déjà monté, mais qui n'a pas encore quitté la gare) est beaucoup plus bas. Et, en supposant qu'il soit peu probable que nous quittions Preview sans modification, retirer maintenant ne modifie pas la date probable à laquelle cette fonctionnalité deviendra permanente, car nous voudrions probablement reprévisualiser une version modifiée de toute façon ».

    Doit-on s’attendre à voir cette fonctionnalité à la date de sortie définitive ou sera-t-elle retiré pour cette version du langage ? Pour l’instant rien n’est encore décidé et les tests pour rendre la version stable se poursuivent.

    Source : Brian Goetz

    Et vous ?

    Qu'en pensez-vous ?
    Selon vous, les littéraux devrait-ils être supprimés de JDK 12 ? Pourquoi ?

    Voir aussi

    Java : le JDK 12 est disponible en version bêta, il prend en charge Unicode 11 et dispose d'un nouveau format de clé privée codé x25519 et x448

    Andrew Haley de Red Hat donne son avis sur l'avenir d'OpenJDK, l'implémentation libre de Java SE, après la sortie de JDK 11 sous licence commerciale

    JDK 11 : trois nouveautés sont prévues ainsi que la suppression de JAVA EE, JavaFX et CORBA, dans le cadre des mises à jour semestrielles

    JDK 10 : les fonctionnalités de la prochaine version de Java sont désormais gelées, la sortie est attendue pour le 20 mars 2018

    Java 8 ne va plus recevoir de mises à jour et correctifs de sécurité à partir de septembre à moins de passer à un support commercial
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ils se prennent bien la tête pour pas grand chose. La syntaxe C# est très simple (un préfixe @ avant le début de la chaine) et ne pose pas de souci majeur. Après je ne connais pas les spécificités de la feature qui était prévue pour Java, donc il est possible que quelque chose m'ait échappé...

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    @tomlev : le problème c'est justement le préfixe. Et c'est leurs boulots de se prendre la tête 😉

    La solution de C# impose de doubler toutes les double-quotes de la chaîne, et l'objectif étant justement d'éviter cela...

    Le ` a l'avantage d'être un peu moins utilisé (quoique).
    Mais j'aime pas trop la syntaxe...

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ils se prennent bien la tête pour pas grand chose. La syntaxe C# est très simple (un préfixe @ avant le début de la chaine) et ne pose pas de souci majeur. Après je ne connais pas les spécificités de la feature qui était prévue pour Java, donc il est possible que quelque chose m'ait échappé...
    On parle de java la moindre fonctionnalité est un immense bordel infâme bref rien de nouveau sous la tasse de café

  6. #6
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    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 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Le JDK12 offre une feature assez intéressante avec le Switch Expressions (JEP 325)

    Avant :
    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
    int numLetters;
    switch (day) {
        case MONDAY:
        case FRIDAY:
        case SUNDAY:
            numLetters = 6;
            break;
        case TUESDAY:
            numLetters = 7;
            break;
        case THURSDAY:
        case SATURDAY:
            numLetters = 8;
            break;
        case WEDNESDAY:
            numLetters = 9;
    }
    Avec Java 12:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int numLetters = switch (day) {
        case MONDAY, FRIDAY, SUNDAY -> 6;
        case TUESDAY                -> 7;
        case THURSDAY, SATURDAY     -> 8;
        case WEDNESDAY              -> 9;
    };
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 92
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par redcurve Voir le message
    On parle de java la moindre fonctionnalité est un immense bordel infâme bref rien de nouveau sous la tasse de café
    Juste que ceux qui développent Java essaient de voir un peu plus loin que "Cette feature est trop génial, on l'a rajoute".
    Rétrocompatibilité, utilisabilité, évolution futur...

  8. #8
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ils se prennent bien la tête pour pas grand chose. La syntaxe C# est très simple (un préfixe @ avant le début de la chaine) et ne pose pas de souci majeur. Après je ne connais pas les spécificités de la feature qui était prévue pour Java, donc il est possible que quelque chose m'ait échappé...
    Le fonctionnement de C# a en effet l'avantage d'être simple, mais il n'est pas parfait, loin de là. La syntaxe des chaines préfixées par @ de C# n'est d'ailleurs pas un "raw string" dans le sens ou on l'entend en général, vu que le guillemet doit-être échappé.
    Ce qu'on appelle habituellement, une "raw string", c'est une séquence de caractère sans aucune séquence d’échappement. C'est les délimiteurs de la séquence qui varient suivant le besoin du contenu.

    Par exemple en Rust les chaines brutes sont préfixées par "r" et autant de "#" qu'il doit y en avoir après le guillemet fermant.
    Code Rust : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let chaine_brute1 = r"Chaine pouvant contenir des \  sans échappement";
    let chaine_brute2 = r#"Chaine pouvant aussi contenir des " sans échappement "#;
    let chaine_brute3 = r##" Chaine pouvant aussi contenir un "# sans échappement "##;
    ...

    De ce que j'ai compris du message de Brian Goetz, Java avait prévu d'utiliser le même nombre de backquote en début et fin de chaine, ce qui aurait donné:
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var chaine_brute1 = `Chaine pouvant contenir des \ et " sans échapement`;
    var chaine_brute2 = ``Chaine pouvant aussi contenir des ` sans échappement``;
    var chaine_brute3 = ```Chaine pouvant aussi contenir des `` sans échappement```;

    Pour moi, certains des argument de Brian Goetz sont convaincants :
    • il n’y pas de voie directe pour démarrer ou de terminer un littéral de chaîne brute avec un backquote
    • il n’y plus beaucoup de caractères de ponctuation non utilisés en Java et il faudrait peut être garder la backquote pour d'autres futur usages. (l'argument est présent dans le message originel mais pas repris dans l'article developpez.com)


    Pour les autres points, je suis moins d'accord, notamment parce que la coloration syntaxique résout la plupart des problèmes évoqués

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par Uther Voir le message
    les chaines brutes (…) il n’y plus beaucoup de caractères de ponctuation non utilisés
    Quelqu'un a-t-il déjà suggéré une approche différente : la mise en forme de texte ?

    Habituellement utilisé (dans les traitements de textes) pour souligner, mettre en gras ou en italique. Elle pourrait servir pour désigner (au compilateur) ce qui est du texte. Il n'y aurait donc plus besoin naturellement de séquences d'échappement.

    Ceci casserait l'habitude de pouvoir travailler notre code avec un simple éditeur de texte mais serait-ce si mal ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let chaine_brute_par_nature_elles_seraient_toutes_brutes = Chaine pouvant contenir des \  " ' sans besoins d'aucuns échappements;

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Ceci casserait l'habitude de pouvoir travailler notre code avec un simple éditeur de texte mais serait-ce si mal ?
    Perso je ne souhaite pas cela du tout.
    Qu'un EDI fassent une coloration syntaxique c'est une chose, mais il faut rester sur un format texte !

    Déjà cela aurait un impact énorme sur l'écosystème, puisqu'il faudrait adapter tous les EDI et tous les outils manipulant le source, et ça fait beaucoup de monde !

    Mais en plus on perdrait toute la simplicité du format texte, simplement pour "cacher" un séparateur.
    Impossible de manipuler ou de générer du code à la volé de manière simple, car outre la structure du code il faudrait respecter ce nouveau format...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Perso je ne souhaite pas cela du tout.
    Qu'un EDI fassent une coloration syntaxique c'est une chose, mais il faut rester sur un format texte !
    Qu'est ce qui définit un format texte ? Rien n'empêcherait d'en avoir un avec des "flags" sur les caractères.

    Sinon on peut aussi rester sur un format de texte classique mais l'EDI nous cachant la complexité des caractères d'échappements.

    A l'instar de la touche "Verr Maj" un double clique sur la touche ["] pourrait nous mettre en mode "entrée de texte" et on pourrait écrire vraiment n'importe quoi même faire des retours à la lignes tant qu'on ne re double clique pas sur la touche ["] pour revenir en mode "code". En interne ça écrirait du code normal.


    Si vous avez déjà écrit des expressions régulières, déjà que c'est assez dur de les relire, alors entre les caractères d'échappements du format texte... et ceux des expressions cela devient vite le bordel. Si il y avait un moyen (comme je viens de présenter) de les supprimer rendant le code plus lisible ce serait bien mieux.

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Qu'est ce qui définit un format texte ? Rien n'empêcherait d'en avoir un avec des "flags" sur les caractères.
    Ben un format texte c'est un fichier constitué de caractères, donc ces flags seraient des caractères et c'est exactement de quoi il est question : comment choisir ces caractères en gardant une bonne lisibilité et sans avoir à utiliser de caractères d'échappement (ou le moins possible).

    Citation Envoyé par ijk-ref Voir le message
    Sinon on peut aussi rester sur un format de texte classique mais l'EDI nous cachant la complexité des caractères d'échappements.

    A l'instar de la touche "Verr Maj" un double clique sur la touche ["] pourrait nous mettre en mode "entrée de texte" et on pourrait écrire vraiment n'importe quoi même faire des retours à la lignes tant qu'on ne re double clique pas sur la touche ["] pour revenir en mode "code". En interne ça écrirait du code normal.
    Sauf que ça c'est une fonctionnalité de l'EDI, et non pas du langage.
    Rien n'empêche un EDI de proposer cela dès maintenant... Mais on n'aurait plus une correspondance exact entre le code visible dans l'EDI et le fichier source...


    Citation Envoyé par ijk-ref Voir le message
    Si vous avez déjà écrit des expressions régulières, déjà que c'est assez dur de les relire, alors entre les caractères d'échappements du format texte... et ceux des expressions cela devient vite le bordel. Si il y avait un moyen (comme je viens de présenter) de les supprimer rendant le code plus lisible ce serait bien mieux.
    Ben c'est exactement l'objectif de la proposition.
    `a\. "hello" ` serait l'équivalent de "a\\. \"hello\"" .

    Et le problème relevé, c'est que si ça marche super bien pour les expressions régulières, ça peut poser problème pour d'autres types de codes utilisant le caractère ` comme des scripts shell ou du SQL...



    Le rythme des 6 mois entre chaque version permet de décaler ça pour y réfléchir encore un peu...

  13. #13
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Quelqu'un a-t-il déjà suggéré une approche différente : la mise en forme de texte ?

    Habituellement utilisé (dans les traitements de textes) pour souligner, mettre en gras ou en italique. Elle pourrait servir pour désigner (au compilateur) ce qui est du texte. Il n'y aurait donc plus besoin naturellement de séquences d'échappement.

    Ceci casserait l'habitude de pouvoir travailler notre code avec un simple éditeur de texte mais serait-ce si mal ?
    Les IDE font déjà ça en partie : c'est la coloration syntaxique.

    Ils peuvent théoriquement aller plus loin et faire ce que vous préconisez. Il convertiraient le texte formaté en Java classique, ainsi, il n'y aurait même pas besoin de modifier le langage Java lui même. Mais ils ne le font pas car au final, ça n'est pas plus pratique pour les développeurs.

    Gérer de la mise en forme de texte au clavier, ça n'est pas pratique et avec la souris, c'est moins productif. Personnellement, j'ai assez d'ennuis avec le formatage de textes Word, j'ai pas envie d'avoir les même soucis en programmant. D'ailleurs, sous Word je finis souvent par faire afficher les caractères cachés.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ben un format texte c'est un fichier constitué de caractères, donc ces flags seraient des caractères (…)
    Non, si le format texte d'origine n'avait que des lettres minuscules ma proposition serait de rajouter les lettres majuscules et pas comme tu l'entends d'utiliser un caractère pour dire qu'on passe en majuscule.

    Mais peu importe, rien ne sert de parler de cela, ceci complexifie le sujet inutilement.

    Citation Envoyé par adiGuba Voir le message
    Sauf que ça c'est une fonctionnalité de l'EDI, et non pas du langage.
    Justement ! Modifier un langage, rajouter une énième syntaxe sur le traitement de chaines de caractères en espérant vainement qu'il traite mieux les syntaxes de sujets qui n'ont rien à voir avec le langage de base…

    Mon point de vue est qu'un langage n'a besoin que d'une seule et unique syntaxe de traitement de chaines de caractères. Ensuite c'est à l'EDI de nous "cacher" le traitement des caractères d'échappement. Te rends-tu compte que cette approche permet de traiter correctement ton script SHELL ou ton SQL sans aucun artifice supplémentaire ?

    Citation Envoyé par adiGuba Voir le message
    Rien n'empêche un EDI de proposer cela dès maintenant... Mais on n'aurait plus une correspondance exact entre le code visible dans l'EDI et le fichier source...
    Justement ! (encore !) Ma méthode permet justement que les chaines de caractères aient une exact correspondance entre le code visible dans l'EDI et le fichier source. Donc là sur le coup c'est toi qui te contredis

  15. #15
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Justement ! (encore !) Ma méthode permet justement que les chaines de caractères aient une exact correspondance entre le code visible dans l'EDI et le fichier source.
    Alors je n'ai pas compris.
    Quel est donc ta méthode ?
    Montre moi un bout de code...

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par Uther Voir le message
    (…) Mais ils ne le font pas car au final, ça n'est pas plus pratique pour les développeurs.
    Oui, ce qui existe actuellement est pratique pour les développeurs… d'où surement leur proposition d'une énième syntaxe sur les chaines de caractères

    Citation Envoyé par Uther Voir le message
    Gérer de la mise en forme de texte au clavier, ça n'est pas pratique et avec la souris, c'est moins productif. Personnellement, j'ai assez d'ennuis avec le formatage de textes Word, j'ai pas envie d'avoir les même soucis en programmant. D'ailleurs, sous Word je finis souvent par faire afficher les caractères cachés.
    Je ne pense pas du tout que ce soit comparable. Il n'est pas question de gérer différentes tailles, différentes polices, différentes couleurs, etc.. mais juste de passer à un mode "texte". Ce qui nécessite qu'une touche pour entrer et en sortir. Je préconise pour ça d'utiliser un double-clique sur une touche choisie du clavier, cela reste très simple (et pratique) au clavier et ne monopolise aucune "vraie" touche.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Alors je n'ai pas compris.
    Quel est donc ta méthode ?
    Montre moi un bout de code...
    Je crois avoir mélangé "code source" et "code généré" n'empêche que...

    Quand tu écris string message = "bonjour ""adiGuba"" !";

    C'est à dire que bonjour "adiGuba" ! est enregistré dans la variable message et non bonjour ""adiGuba"" !

    Donc si mon EDI affichait string message = bonjour "adiGuba" !;

    Je pense donc être bien plus proche de ce que devrait être le code source que la méthode classique le dénaturant.

    (Surtout qu'il ne serait pas impossible d'avoir un (nouveau) format texte permettant de l'écrire directement comme cela… mais comme je l'ai dit n'en parlons pas et restons sur une conversion classique pour ne pas étendre les problèmes de compréhension)

  18. #18
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Mais on en revient au même point :
    • Le code affiché dans l'EDI ne correspond pas au code contenu dans le fichier source (et c'est pas forcément souhaitable)
    • C'est une fonctionnalité d'un EDI, alors qu'on parle d'une fonctionnalité du langage indépendante d'un quelconque éditeur...

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Mais on en revient au même point :
    • Le code affiché dans l'EDI ne correspond pas au code contenu dans le fichier source (et c'est pas forcément souhaitable)
    • C'est une fonctionnalité d'un EDI, alors qu'on parle d'une fonctionnalité du langage indépendante d'un quelconque éditeur...
    Ne pas confondre la fin et les moyens. Votre but est d'avoir du texte le plus lisible, concis et facile à entrer. Votre moyen est de modifier le compilateur pour qu'il s'adapte à chaque situation différente de texte.

    Problème que l'on rencontre dans tous les langues textuels où chacun apporte ses solutions différentes toutes adaptées à des cas particuliers et jamais généraux.

    En regardant ce problème universel je trouve absurde de toujours seulement proposer des rustines en bouts de chaines alors qu'il pourrait y avoir un "moyen" universel unique (indépendant de tous langues)

    Ce moyen "inimaginable" car modifiant ce que l'on imagine des compilateurs... pourraient réaliser bien mieux avec un format texte évolué (moins de 70 ans)… et plus pratique pour nous humains (quand il est nécessaire de différencier des zones de textes de nature différente)

  20. #20
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 257
    Points
    66 257
    Par défaut Les littéraux de chaîne bruts ont été supprimés de Java 12
    Les littéraux de chaîne bruts ont été supprimés de Java 12
    comme l'a suggéré la proposition d'amélioration JDK (JEP)

    Dans la deuxième semaine de ce mois, Oracle avait lancé la version bêta du JDK 12 sur les plateformes Linux, Windows et MacOS pour tester les nouvelles fonctionnalités apportées et les améliorer en cas de besoin avant la date de sortie générale qui est prévue pour le 19 mars 2019. Le JDK est caractérisé par neuf nouveautés essentielles. Il apporte de nouvelles fonctionnalités telles que la prise en charge d'Unicode 11, donc plus amélioré que le JDK 11 (qui prend en charge Unicode 10), l’annulation de la valeur par défaut keytool-keyalg, un nouveau format de clé privée codé x25519 et x448 compatible avec la norme RFC 8410. L’une des principales caractéristiques de cette version du JDK est la prise en charge des littéraux de chaînes bruts.

    Les littéraux de chaînes de caractères permettent au développeur de créer leurs propres littéraux et de les ajouter au langage. L’ajout de cette fonctionnalité dans le langage s’est fait aussi dans le but d’aider les développeurs à exprimer plus facilement des séquences de caractères, à fournir des chaînes ciblées pour les grammaires, et à couvrir plusieurs lignes de sources. Par la suite, l’équipe de propositions d'amélioration du JDK (JEP), le processus permettant à Oracle Corporation de collecter des propositions d'amélioration du kit de développement Java et du OpenJDK, a proposé qu’on supprime ces littéraux de la nouvelle version du JDK.

    Nom : java.png
Affichages : 100731
Taille : 40,2 Ko

    La JEP ajoute comme information qu’un littéral de chaîne brut est constitué d'un ou de plusieurs caractères enfermés dans des séquences de pics de contrôle (\u0060, citation arrière , accent grave). Un littéral de chaîne brut s'ouvre avec une séquence d'un ou plusieurs backticks. Le littéral de chaîne brut se ferme quand une séquence de pièces jointes de longueur égale est rencontrée lorsqu’elle a été ouverte avec le littéral de chaîne brut. Toute autre séquence de contrecoups est traitée comme faisant partie du corps de la chaîne. Le PEC a fourni plusieurs raisons à cette proposition de suppression, la majorité sur basés principalement sur des commentaires reçus qui ressortent quelques limites de cette fonctionnalité.

    Brian Goetz, architecte de langage Java chez Oracle a tenu à apporter quelques clarifications à cette proposition : « en examinant les commentaires que nous avons reçus, je ne suis plus convaincue que nous ayons encore trouvé le bon compromis entre complexité et expressivité, ou que nous en avons suffisamment exploré l’espace de conception pour être sûr que la conception actuelle est la meilleure que nous puissions faire. En le retirant, nous pouvons continuer à affiner la conception, explorer plus d'options et viser un aperçu répondant réellement aux exigences du processus de fonction de prévisualisation (JEP 12) », avait-il écrit dans un mail adressé à la communauté.

    Selon les récentes explications données par la JEP, on peut noter qu’un littéral de chaîne brut peut s’étendre sur plusieurs lignes et n'interprète pas les séquences d'échappement telles que les \n correspondant aux échappements Unicode de la forme \uXXXX ou que les littéraux de chaîne bruts en général ne prennent pas directement en charge l'interpolation de chaîne. Voici un exemple de littéral de chaîne brut sur multiligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String html = `<html>
                       <body>
                           <p>Hello World.</p>
                       </body>
                   </html>
                  `;

    La JEP souligne que les caractères d'échappement d’un littéral de chaîne brut ne sont jamais interprétés à l'exception de CR et CRLF, qui sont des terminateurs de ligne spécifiques à la plate-forme. Les séquences CR ( \u000D) et CRLF ( \u000D\u000A) sont toujours traduites en LF ( \u000A). Cette traduction fournit le comportement le moins surprenant sur toutes les plateformes.

    « Les littéraux de chaîne traditionnels prennent en charge deux types d'échappement : les échappements Unicode de la forme \uxxxx et les séquences d’échappement telles que \n. Aucun type d'échappement n'est traité dans les littéraux de chaîne bruts ; les caractères individuels qui composent l'échappement sont utilisés tels quels. Cela implique que le traitement des échappements Unicode est désactivé lorsque le lexer (encore appelé analyseur lexical, c'est un programme réalisant une analyse lexicale) rencontre un backtick d'ouverture et réactivé lorsqu'il rencontre un backtick de fermeture. Par souci de cohérence, l’échappement Unicode ne peut pas être utilisé comme substitut du backtick d’ouverture », a déclaré la JEP et donne des exemples de littéraux de chaînes bruts correspondant à cette déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    `"`               // a string containing " alone
    ``can`t``          // a string containing 'c', 'a', 'n', '`' and 't'
    `This is a string` // a string containing 16 characters
    `\n`                     // a string containing '\' and 'n'
    `\u2022`             // a string containing '\', 'u', '2', '0', '2' and '2'
    `This is a 
     two-line string`   // a single string constant
    Selon la JEP, ce serait une erreur de compilation d'avoir une séquence de backtick ouverte et aucune séquence de backtick proche correspondante avant la fin de l'unité de compilation. Un autre problème lié aux littéraux de chaîne bruts est la gestion des marges. En effet, il est difficile de savoir si la chaîne doit être formatée dans la marge de (gauche comme dans herodoc), ou idéalement, mélangée avec l’indentation utilisée par le code environnant. L’équipe compare cela à une indentation accidentelle. Par exemple, certains développeurs peuvent choisir de coder comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String s = `
    this is my
        embedded string
    `;
    tandis que d'autres développeurs peuvent ne pas aimer le style en retrait et choisir d'intégrer par rapport à l'indentation du code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String html = `
                 this is my
                 embedded string
                 `;
    Il existe d’autres problèmes liés aux littéraux de chaîne bruts (par exemple les délimiteurs) présentés par la JEP sur le site du OpenJDK ainsi que certaines alternatives proposées à certains de ces problèmes. Par comparaison à ses pairs, la JEP estime que les langages de programmation tels que C++, Groovy, JavaScript, Python pour ne citer que ceux-là utilisent des littéraux de chaîne bruts. L’équipe dit qu'elle étudie ces langages pour les délimiteurs qu’ils utilisent ou pour rechercher des représentations de chaînes.

    Un internaute conseille à la JEP de regarder dans Python 3.7 pour en tricher l’implémentation des littéraux de chaîne bruts qu’ils jugent être une réussite. « En fait, je craignais que Java ne soit trop influencé par C# en ce qui concerne les chaînes. Les développeurs Java devraient regarder dans python 3.7 et non pas C# pour de belles syntaxes de chaînes », estime-il.

    Un autre par contre dit ne trouver aucun des arguments fournis par la JEP assez convaincant et juge inutile une telle fonctionnalité. « En termes simples, je ne vois que très peu de cas d’utilisation où les chaînes brutes pourraient être utiles, qui permettent et / ou encouragent de nombreuses mauvaises pratiques. Dans mon esprit, les chaînes multilignes sont encore moins utiles et ajoutent une complexité inutile (voir la section sur la gestion des marges). Je ne pense pas que ça vaille le coup », commente-il. La JEP indique cependant, que dans l’objectif de vouloir remplacer les littéraux de chaîne traditionnels par les littéraux de chaîne bruts dans une version future, l’équipe continue de travailler dessus.

    Source : OpenJDK

    Et vous ?

    Qu'en pensez-vous ?

    Voir aussi

    Java : le JDK 12 est disponible en version bêta, il prend en charge Unicode 11 et dispose d'un nouveau format de clé privée codé x25519 et x448

    Java 12 ne prendra probablement pas en charge les littéraux de chaîne bruts, la proposition d'amélioration JDK (JEP) suggère qu'on les supprime

    Andrew Haley de Red Hat donne son avis sur l'avenir d'OpenJDK, l'implémentation libre de Java SE, après la sortie de JDK 11 sous licence commerciale

    JDK 11 : trois nouveautés sont prévues ainsi que la suppression de JAVA EE, JavaFX et CORBA, dans le cadre des mises à jour semestrielles

    JDK 10 : les fonctionnalités de la prochaine version de Java sont désormais gelées, la sortie est attendue pour le 20 mars 2018
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2018, 21h17
  2. Réponses: 52
    Dernier message: 28/06/2012, 16h36
  3. Réponses: 38
    Dernier message: 08/07/2010, 10h31
  4. Réponses: 0
    Dernier message: 03/09/2009, 03h38
  5. Réponses: 5
    Dernier message: 02/02/2009, 10h04

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