Java 15 est sorti

Posté par  . ÉditĂ© par bobble bubble, NonolapĂ©ro, Yves Bourguignon, BenoĂźt Sibaud, Lawless, BAud, Davy Defaud, theojouedubanjo et Ysabeau đŸ§¶. ModĂ©rĂ© par Ysabeau đŸ§¶. Licence CC By‑SA.
Étiquettes :
55
15
sept.
2020
Java

Ce 15 septembre 2020 sort Java 15. C’est l’occasion pour cette dĂ©pĂȘche de revenir sur les nouveautĂ©s entre les blocs de texte et autres ramasse‑miettes. On en profite pour parler de quelques informations autour de Java (les vingt‑cinq ans de la plate‑forme, les nouveaux champions, etc).

Sommaire

Java 15

Abandons

Avec ce nouveau rythme, Java s’autorise à supprimer des parties de la plate‑forme. Pour cette version :

  • le systĂšme d’exploitation Solaris et l’architecture SPARC, rendus obsolĂštes par la derniĂšre version, ne sont plus pris en charge (JEP 381) — cocasse quand on connaĂźt les dĂ©buts du langage ;
  • Nashorn, le moteur JavaScript inclus dans le JDK, a lui aussi Ă©tĂ© retirĂ© (JEP 372), il Ă©tait considĂ©rĂ© comme obsolĂšte depuis la version 11 sortie en septembre 2018 ;
  • ce n’est pas encore une suppression, mais RMI activation (et seulement RMI activation pas tout RMI) est rendu obsolĂšte (JEP 385) ;
  • biased locking n’est plus activĂ© par dĂ©faut (il faut ajouter l’option -XX:+UseBiasedLocking), elle est du mĂȘme coup considĂ©rĂ©e obsolĂšte (JEP 374).

Conséquences des retraits

Cas de la prise en charge SPARC/SOLARIS

Le JDK Ă©tant plutĂŽt vaste, le retrait de la prise en charge d’une architecture a des consĂ©quences Ă  de trĂšs nombreux endroits allant des systĂšmes de construction, la sĂ©curitĂ©, la gĂ©nĂ©ration du bytecode ou encore la gĂ©nĂ©ration d’IHM. La personne en charge de la JEP a donc fait le tour du propriĂ©taire pour retirer tout ce qui devait l’ĂȘtre, comme on peut le voir sur la liste de diffusion. Les plus curieux pourront suivre les diffĂ©rents liens pour voir le mode de dĂ©veloppement du JDK et les spĂ©cificitĂ©s de chaque domaine. Au final, ce sont plus de 127 000 lignes qui ont Ă©tĂ© supprimĂ©es, ce qui ne reprĂ©sente que moins d’un pourcent du nombre total de lignes de code.

Cas de la gestion du JSON

Suite Ă  la suppression du Nashorn JavaScript Engine, il est apparu que le JDK utilisait le JavaScript et par consĂ©quent le JSON pour certaines fonctionnalitĂ©s. Se pose alors la question d’une gestion native du JSON ou de laisser cette compĂ©tence Ă  des bibliothĂšques tierces. Actuellement, rien n’est dĂ©cidĂ© et il y a deux directions possibles :

  • oui, mais sous quelle forme et quand ?
  • non pas pour Ă©viter d’avoir quelque chose de mal foutu comme pour le XML ou encore le journalisation et se concentrer sur ce qui fait rĂ©ellement la plus‑value du JDK.

Nouveautés

Ramasse‑miettes

Deux nouveaux ramasse‑miettes (garbage collectors — gc) sont disponibles en stable avec cette version :

Shenandoah

Shenandoah est un ramasse‑miettes qui vise Ă  rĂ©duire les temps de pause. Pour atteindre cet objectif, il dĂ©place les objets sans avoir Ă  mettre en pause l’application. Il est aussi capable de mieux parallĂ©liser le dĂ©placement d’objet. Cela ne supprime pas totalement les pauses : elles sont encore nĂ©cessaires pour libĂ©rer la mĂ©moire. Avec Shenandoah, la vĂ©rification des objets en vie et leur dĂ©placement se fait sans pause, mais le nettoyage de la mĂ©moire en rĂ©clame une. Comme il fait moins de choses pendant les pauses, elles sont plus courtes. L’activation se fait via l’option -XX:+UseShenandoahGC. Ce changement est dĂ©crit dans la JEP 379.

ZGC

ZGC se donne pour objectif d’avoir des temps de pause faibles, y compris sur de grands tas (heap) de l’ordre du tĂ©raoctet. Pour cela, il est capable de dĂ©charger les classes sans arrĂȘter l’exĂ©cution. Tous les ramasse‑miettes actuels de Java effectuent du dĂ©chargement de classes, mais ils sont obligĂ©s de le faire uniquement durant le stop the world. ZGC a travaillĂ© pour pouvoir faire cela en concurrence de l’application. Il semble que cela a eu des effets de bord positifs, notamment le temps de pause n’est dĂ©pendant que du nombre de fils d’exĂ©cution de l’application. Il s’agit de l’amĂ©lioration majeure, mais il y a eu bien d’autres travaux comme le fait de pouvoir rendre de la mĂ©moire au systĂšme d’exploitation, la gestion de tas de 8 Mio jusqu’à 16 Tio. Actuellement, seuls Windows, macOS et GNU/Linux sur les architectures x86-64 et AArch64 sont pris en charge. Pour l’activer, c’est l’option -XX:+UseZGC. Ce changement est dĂ©crit dans la JEP 377.

C’est trùs bien mais, du coup, comment choisir entre Shenandoah, ZGC ou rester sur G1 ?

C’est une question bien complexe qui est Ă©videmment trĂšs dĂ©pendante de l’application cible. PremiĂšrement, G1, malgrĂ© le fait qu’il continue d’ĂȘtre amĂ©liorĂ©, est trĂšs loin derriĂšre ZGC et Shenandoah. Les objectifs de ces derniers sont assez similaires et ils sont tellement efficaces qu’on ne peut pas voir de diffĂ©rence entre eux quand ils sont comparĂ©s Ă  G1
 De mon avis personnel et de ce que j’en ai lu :

  • ZGC est fait pour ĂȘtre simple, il est moins configurable ;
  • Shenandoah est plus configurable et il offre des temps de pause plus prĂ©dictibles que ZGC.

NĂ©anmoins, tout cela peut encore changer d’ici la sortie de Java 17 (en septembre 2021).

Blocs de texte

Les blocs de texte arrivent enfin en version dĂ©finitive (JEP 378). Cette fonctionnalitĂ© a fait beaucoup parler d’elle depuis son introduction en Java 13. Il est donc maintenant possible de dĂ©finir des chaĂźnes de caractĂšres multilignes comme ça :

String query = """
               SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
               WHERE "CITY" = 'INDIANAPOLIS'
               ORDER BY "EMP_ID", "LAST_NAME";
               """;

Classes cachées

Cette nouveautĂ© offre la possibilitĂ© aux cadriciels de gĂ©nĂ©rer des classes pour son propre usage qui ne seront pas accessibles de l’extĂ©rieur et ainsi de gĂ©rer la tambouille interne sans risque de fuite, notamment en utilisant la rĂ©flexion.

Java possĂšde des classes internes, qui ne sont pas directement exposĂ©es au niveau de l’API, mais qui restent accessibles par rĂ©flexion. Ce n’est pas leur nom peu allĂ©chant Unsafe qui empĂȘche qu’elles soient largement utilisĂ©es par tout un tas de logiciels. Un des objectifs des dĂ©veloppeurs du JDK est de faire en sorte que cette pratique cesse. Un article de Java Magazine en parle et il y a, bien sĂ»r, la JEP 371 qui dĂ©crit cette Ă©volution.

C’est donc une Ă©tape de plus sur la route de la suppression des classes de sun.misc.Unsafe.

Sous le capot

  • cette version inclut la prise en charge des signatures EdDSA (JEP 339) ;
  • l’API DatagramSocket bĂ©nĂ©ficie d’une rĂ©implĂ©mentation (JEP 373).

En vrac

Avant‑premiùres

Les fonctionnalitĂ©s ci‑dessous sont considĂ©rĂ©es comme en avant‑premiĂšre (preview), elles sont sujettes Ă  changement d’une version Ă  l’autre.

Filtrage par motif avec instanceof

La filtrage par motif (pattern matching) sur instanceof (JEP 383) permet de discriminer un objet selon sa classe et de récupérer une référence correctement typée. Un exemple possible serait :

Object myVar = foo();
if (myVar instanceof String s) {
    System.out.println(s);
}

Cela n’est pas encore disponible avec l’instruction switch.

Sealed classes

Les sealed classes sont des classes dont on contrĂŽle l’hĂ©ritage. Cela permet d’avoir une connaissance Ă  la compilation de toutes les classes filles de cette derniĂšre. Le premier gain est de pouvoir s’assurer qu’on a gĂ©rĂ© tous les cas dans un switch qui vĂ©rifie le type par instanceof. C’est dĂ©crit dans la JEP 360.

L’écriture est assez diffĂ©rente de ce que l’on trouve en Scala. Ce dernier oblige Ă  ce que toutes les classes filles soient dĂ©crites dans le mĂȘme fichier. Java garde la volontĂ© d’avoir (en principe) une seule classe par fichier. Cela s’écrit donc ainsi :

package org.linuxfr;

public abstract sealed class Contenu
    permits org.linuxfr.Depeche,
            org.linuxfr.Journal,
            org.linuxfr.Lien {
  // ...
}

Il faut voir que cela remet en cause les possibilitĂ©s d’étendre le code. Ça sert quasi uniquement quand on a besoin de l’exhaustive checking au sein du pattern matching. Pour bien dĂ©crire l’intĂ©rĂȘt, cela permet d’écrire :

String foo(Contenu c) {
  return switch(c) {
    case Depeche d -> "plouf";
    case Journal j -> "plif";
    case Lien l -> "plof";
  };
}

Sans avoir besoin d’avoir un cas default.

Records

Les records (apparus dans la prĂ©cĂ©dente version de Java) sont des classes immuables qui bĂ©nĂ©ficient d’une syntaxe succincte. Cette mise Ă  jour assure le bon fonctionnement avec les sealed classes et sur l’usage d’annotations, mais la JEP 384 est trĂšs complĂšte pour dĂ©crire tout leur fonctionnement.

Pour ce qui est du code un Point en deux dimensions se déclarera comme ça :

record Point(int x, int y) {}

Et elle s’utilise comme n’importe quelle classe. Comme pour le constructeur vide créé par dĂ©faut, pour vous ici le langage dĂ©finit le equals()/hashCode(), les getter (avec un style « builder », dans l’exemple on a x() et y()), le constructeur avec le profil que vous avez dĂ©fini et une mĂ©thode toString(). Comme pour le constructeur par dĂ©faut, il est possible de surcharger les implĂ©mentations fournies. Cela devrait rĂ©duire l’intĂ©rĂȘt de lombok ou immutables.

Cette nouvelle itération apporte diverses évolutions plus ou moins discrÚte :

  • il y a l’interdiction d’utiliser this dans le constructeur canonique, c’est la solution trouvĂ©e pour Ă©viter aux dĂ©veloppeurs peu attentionnĂ©s de faire n’importe quoi ;
  • une modification tardive fait que les attributs des records deviennent rĂ©ellement finals et ne peuvent pas ĂȘtre modifiĂ©s par rĂ©flexion JDK‑8247444 ;
  • la possibilitĂ© de crĂ©er des records locaux de la mĂȘme maniĂšre que les classes ;
  • les mĂ©canismes de sĂ©rialisation et de dĂ©sĂ©rialisation propre et qui, donc, diffĂšrent des classes :
    • la sĂ©rialisation est basĂ©e seulement sur l’état de l’objet,
    • la « dĂ©sĂ©rialisation » utilise uniquement le constructeur canonique.

La version finale sera certainement livrée en version 16.

Écosystùme

fast‑jar

Le projet Quarkus est un cadriciel Java alternatif Ă  Spring visant l’extrĂȘme performance et Ă  ĂȘtre developer friendly. Sa version 1.5 propose un nouvel empaquetage pour les applications Java nommĂ© fast‑jar.

Un fichier au format JAR est une archive ZIP des applications Java contenant les classes compilĂ©es ainsi que quelques fichiers de description et des fichiers de configuration de l’application. Il est possible d’y inclure les bibliothĂšques utilisĂ©es par l’application : c’est ce que l’on appelle un fat‑jar ou un uber‑jar. C’est un peu comme une compilation statique, cela permet de distribuer l’application avec un unique fichier (il faut « juste » avoir un JDK installĂ©).

La simplicitĂ© de ces uber‑jar leur a fait rencontrer un vif succĂšs, mais l’arrivĂ©e de Docker a un peu changĂ© la donne. Le systĂšme de couches de Docker (une image Docker dĂ©pend d’une prĂ©cĂ©dente image dont on a modifiĂ© le contenu) pousse Ă  organiser ses images comme suit :

  1. l’image de base contenant le JDK ;
  2. on ajoute les dĂ©pendances de l’application dans une couche dĂ©diĂ©e ;
  3. on ajoute l’application dans une autre couche ;
  4. si applicable, on ajoute les fichiers de configuration dans une derniĂšre couche.

L’idĂ©e sous‑jacente est de dĂ©couper les couches en fonction de la frĂ©quence de mise à jour :

  1. on modifie plus frĂ©quemment sa configuration que l’application ;
  2. on met Ă  jour plus frĂ©quemment l’application que ses dĂ©pendances ;
  3. on met à jour plus fréquemment les dépendances que le JDK.

Cela permet de ne télécharger que les derniÚres couches lors des mises à jour.

Lors de leurs tests de performance, les dĂ©veloppeurs de Quarkus se sont rendu compte que le temps de dĂ©marrage d’une application uber‑jar est bien plus court qu’avec les dĂ©pendances sĂ©parĂ©es (voir ici). Pour pouvoir Ă  la fois avoir un empaquetage Java efficace et continuer de suivre les bonnes pratiques Docker, ils ont créé fast‑jar. Il s’agit simplement d’un JAR Ă©clatĂ©, mais qui possĂšde un index dans le JAR principal qui indique oĂč trouver chaque classe. Le chargeur de classes n’a donc plus Ă  aller chercher dans chaque JAR si la classe qu’il cherche s’y trouve ou non.

Développement du JDK

La version 16 du JDK donnera quelques modifications importantes dans son développement :

  • passage Ă  C++14 (JEP 347) ; actuellement cantonnĂ© Ă  C++98, les nouveaux dĂ©veloppements seront effectuĂ©s avec la norme C++14, la JEP dĂ©crit ce qui est autorisĂ© ou non d’utiliser ;
  • devnewton en avait parlĂ© dans les liens : passage de Mercurial Ă  Git (JEP 357), cette dĂ©cision est motivĂ©e par la taille de l’historique, l’outillage autour de Git et les hĂ©bergements disponibles pour Git — justement, dans la foulĂ©e, il a Ă©tĂ© dĂ©cidĂ© de partir chez GitHub (JEP 369) ; vous trouverez les raisons de ce changement dans la JEP associĂ©e : Why GitHub?

Java champions

Les Java Champions sont un groupe de promoteurs de Java indĂ©pendants d’Oracle (ou de Sun Ă  l’époque). Les membres sont Ă©lus par leurs pairs (et sont aussi proposĂ©s Ă  l’élection de cette façon).

Le 5 mai dernier, Audrey Neveu Ă©tait Ă©lue Java Champion. Elle travaille chez Pivotal comme dĂ©veloppeuse Java, Kotlinv et JS, et est surtout connue en tant que membre des Cast Codeurs oĂč elle sensibilise aux enjeux sociĂ©taux que les technologies peuvent poser (les risques liĂ©s aux libertĂ©s, les problĂšmes que les GAFAM peuvent induire
).

Vingt‑cinq ans de Java

Le 25 mai dernier Java a soufflĂ© ses vingt‑cinq bougies. Ça a Ă©tĂ© l’occasion de crĂ©er diffĂ©rents Ă©vĂšnements : par exemple, Oracle a mis en ligne Moved by Java, et ParisJUG a organisĂ© une soirĂ©e rĂ©trospective avec plusieurs champions Java francophones c’est visible sur YouTube. On y retrouve pĂȘle‑mĂȘle :

Il y a aussi un article sympa listant 25 super‑applications.

AdoptOpenJDK devient Adoptium

AdoptOpenJDK est une distribution de Java trĂšs populaire. Elle a rejoint en juin dernier la fondation Eclipse. Il peut ĂȘtre compliquĂ© d’un point de vue lĂ©gal d’utiliser le nom « OpenJDK », il a donc Ă©tĂ© choisi de renommer le projet Eclipse Adoptium. Cela va permettre au projet de bĂ©nĂ©ficier de toute l’infrastructure proposĂ©e par Eclipse d’un point de vue technique (hĂ©bergement par exemple) et organisationnel (la gouvernance n’est pas attachĂ©e Ă  une Ă©ventuelle entreprise).

Aller plus loin

  • # Immutables

    Posté par  . Évalué à 5. DerniĂšre modification le 15 septembre 2020 Ă  17:22.

    Records [
] Cela devrait rĂ©duire l’intĂ©rĂȘt de lombok ou immutables.

    Oui est non. Non pour la partie construction d'objets immutables complexes. DĂšs que tu sors des cas d'exemple Ă  4 attributs, en l'absence de paramĂštres nommĂ©s, on n'a toujours pas d'autre solution que le builder pattern pour avoir quelque chose de vaguement lisible et maintenable. Cette partie a Ă©tĂ© dĂ©libĂ©rĂ©ment mise hors pĂ©rimĂštre des records, donc leur principal intĂ©rĂȘt c'est cĂŽtĂ© mĂ©moire & perf et boilerplate.

    • [^] # Re: Immutables

      Posté par  . Évalué à 3.

      C'est pour ça que je parlais de réduire.

      donc leur principal intĂ©rĂȘt c'est cĂŽtĂ© mĂ©moire & perf et boilerplate.

      C'est pas ce qu'ils indiquent pour la mĂ©moire et la perf :

      Goals

      • Devise an object-oriented construct that expresses a simple aggregation of values.
      • Help programmers to focus on modeling immutable data rather than extensible behavior.
      • Automatically implement data-driven methods such as equals and accessors.
      • Preserve long-standing Java principles such as nominal typing and migration compatibility.

      Non-Goals

      • It is not a goal to declare a "war on boilerplate". In particular, it is not a goal to address the problems of mutable classes which use the JavaBeans naming conventions.
      • It is not a goal to add features such as properties or annotation-driven code generation, which are often proposed to streamline the declaration of classes for "Plain Old Java Objects".

      Je ne vois rien qui parle de performance ou de mémoire, par contre je trouve drÎle qu'ils cherchent à simplifier la création de structures simples sans faire la guerre au boilerplate. Je comprends plus ou moins l'idée, mais la façon dont c'est présenté dans la JEP me semble surtout chercher à montrer qu'ils ne veulent pas intégrer cette syntaxe dans les objets classiques.

      De mon humble avis l'un des gros objectif finaux des records mĂȘme si ce n'est pas encore implĂ©mentĂ© c'est de pouvoir les dĂ©construires.

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

      • [^] # Re: Immutables

        Posté par  . Évalué à 4.

        De mon humble avis l'un des gros objectif finaux des records mĂȘme si ce n'est pas encore implĂ©mentĂ© c'est de pouvoir les dĂ©construires.

        C’est un des projets en cours. Brian Goetz a Ă©crit deux articles Ă  ce sujet.

        Les plus curieux pourront aussi lire les documents prĂ©sent ici pour se faire une idĂ©e d’oĂč vient et vers oĂč va Java du cĂŽtĂ© du projet Amber. Pour rappel, Amber a pour but de rendre le Java plus agrĂ©able Ă  Ă©crire en le rendant plus expressif et plus concis.

        • [^] # Re: Immutables

          Posté par  . Évalué à 3.

          Pour rappel, Amber a pour but de rendre le Java plus agréable à écrire en le rendant plus expressif et plus concis.

          J'ai l'impression que c'est le projet qui fait le plus parler de lui. Ça me donne l'impression que le projet Coin a montrĂ© que c'est cool de faire Ă©voluer le langage :)

          Merci pour les liens

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

          • [^] # Re: Immutables

            Posté par  . Évalué à 3.

            Il fait parler de lui car il touche beaucoup de monde et avance de maniĂšre assez visible mais globalement ça ne touche pas vraiment au cƓur du langage. Le projet Loom est Ă©galement trĂšs attendu et ne devrait plus trop tarder (au pif, moins de deux ans). Il apportera les thread lĂ©gers manipulables par million en ne changeant que quelques petits trucs.

            public class Main {
                public static void main(String[] args) {
                    var c = new AtomicLong();
                    // Attention mĂȘme pas certain que ça aille au bout
                    for (var i = 0; i < 1_000_000; i++) {
                        new Thread(() -> {
                            c.incrementAndGet();
                        }).start();
                    }
            
                    System.out.println(c.get());
                }
            }

            Dans ce code il suffit de mettre Ă  jour la boucle avec

            for (var i = 0; i < 1_000_000; i++) {
                Thread.startVirtualThread(() -> {
                    c.incrementAndGet();
                });
            }
      • [^] # Re: Immutables

        Posté par  . Évalué à 3.

        J'avais Valhalla en tĂȘte qui n'est clairement pas dans le pĂ©rimĂštre des record et des JEP actuelles mais qui introduit pour contrainte:

        Inline classes are heterogeneous aggregates that explicitly disavow object identity. As a result, they must be immutable, and cannot be layout-polymorphic;

        AprÚs avoir relu le state of Valhalla, la dépendance record / inline est faible, techniquement inexistante, mais "tire dans la bonne direction".

        Tu as parfaitement raison sur la déconstruction.

        • [^] # Re: Immutables

          Posté par  . Évalué à 3.

          J'avais adoré la présentation de Rémi Forax là dessus à devoxx France, il pensait qu'on aurait les inline pour java 10 (j'adore son optimisme ^^).

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: Immutables

      Posté par  (site web personnel) . Évalué à 9.

      Oui est non.

      Forcément c'est compliqué aprÚs Java :).

      « True is the new false » comme ne disait pas D. Trump.

  • # Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

    Posté par  (site web personnel, Mastodon) . Évalué à 4.

    Ça fait plaisir de voir que Java tente de rattraper son retard sur Kotlin. Dans l’ordre de la dĂ©pĂȘche :

    Évidemment les amĂ©liorations de la JVM devraient profiter Ă  tous les langages qui l’utilisent, dont Kotlin-sur-JVM (mĂȘme si le langage a l’air surtout utilisĂ© sur Android).

    La connaissance libre : https://zestedesavoir.com

    • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

      Posté par  . Évalué à 4. DerniĂšre modification le 16 septembre 2020 Ă  10:32.

      En gros Java Ă  trois ans de retard sur Kotlin mais quand il fait les choses il le fait mieux. Ce message est tirĂ© de cette vidĂ©o : https://www.youtube.com/watch?v=te3OU9fxC8U

      • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

        Posté par  (site web personnel, Mastodon) . Évalué à 5.

        J’aurais pas dit « mieux » d’aprĂšs la vidĂ©o. Le message que j’en retiens, c’est plutĂŽt que Java a la possibilitĂ© de modifier directement la JVM pour mieux coller Ă  ses Ă©volutions, et donc que les implĂ©mentations Java des fonctionnalitĂ©s peuvent ĂȘtre plus efficaces (le temps que Kotlin tire partie des Ă©volutions de la JVM Ă  son tour).

        La connaissance libre : https://zestedesavoir.com

    • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

      Posté par  . Évalué à 3. DerniĂšre modification le 16 septembre 2020 Ă  14:18.

      Pourquoi kotlin plutĂŽt que groovy, scala ou ceylon par exemple ? Clairement aucun de ses concepts n'ont Ă©tait inventĂ© par kotlin, ils ont mĂȘme dĂ©jĂ  d'autres implĂ©mentation sur la jvm. Et java a choisi des implĂ©mentations qui sont clairement distinct (sauf pour les blocs de textes, mais ça n'a pas toujours Ă©tait le cas ça montre que ce n'est pas ce qui le conduit).

      Avec l'organisation actuelle de l'écosystÚme, il me paraßt normal de voir des langages arriver et faire des choses cool et d'avoir un java qui prends son temps et qui par contre a un développement couplé avec celui de la jvm, du jdk et des gc.

      Quand JetBrain prends une dĂ©cision et quand Amber prends une dĂ©cision, ça ne prends pas le mĂȘme temps et ça n'a pas le mĂȘme impact.

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

      • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

        Posté par  (site web personnel, Mastodon) . Évalué à 4.

        Pour plusieurs raisons :

        • Kotlin est le langage qui monte le plus dans les langages alternatifs qui tournent sur la JVM. Le fait qu’il soit poussĂ© comme langage principal sur Android aide beaucoup.
        • C’est aussi celui qui ressemble le plus Ă  Java (il a Ă©tĂ© pensĂ© en gros comme « Java en mieux, avec des idĂ©es tirĂ©es de Scala, mais en plus pragmatique et plus efficace »).
        • Groovy s’est rapidement fait dĂ©passer en popularitĂ© par Kotlin (mĂȘme si Gradle l’utilise (mĂȘme si on peut scipter Gradle avec Kotlin))
        • Scala, c’est plus difficile Ă  savoir : j’ai l’impression qu’il est trĂšs utilisĂ© dans certains milieux, mais a du mal Ă  en sortir. Je n’ai jamais vu de vague de « OK maintenant on va utiliser Scala au lieu de Java », alors que c’est assez frĂ©quent avec Kotlin, notamment parce que Scala est plus difficile Ă  prendre en main (et a longtemps Ă©tĂ© lentissime Ă  compiler).
        • Ceylon n’a jamais percĂ©.

        Et ça n’est pas une question d’implĂ©mentation mais clairement de fonctionnalitĂ©s : en terme de fonctionnalitĂ©s, Java rattrape Kotlin. Tout mon propos est lĂ  : en tant que dĂ©veloppeur et d’utilisateur au quotidien du langage, ça fait plaisir de voir que Java ne stagne plus comme il a pu le faire Ă  plusieurs Ă©poques, et se dĂ©cide Ă  intĂ©grer les bonnes idĂ©es qui viennent d’ailleurs dans la « communauté ».

        La connaissance libre : https://zestedesavoir.com

        • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

          Posté par  . Évalué à 5.

          Kotlin est le langage qui monte le plus dans les langages alternatifs qui tournent sur la JVM. Le fait qu’il soit poussĂ© comme langage principal sur Android aide beaucoup.

          Alors oui, mais j'ai pas l'impression que ça se maintienne tant que ça. Android c'est trĂšs particulier, puisque ça n'est pas OpenJDK et je crois que ART ne cherche mĂȘme plus Ă  coller avec les nouveautĂ©s de Java (l'usage des "nouveautĂ©s" de java8 semble se faire par des extensions). Sur le JDK kotlin avait marquĂ© par gradle qui propose maintenant kotlin comme DSL (mais gradle est Ă©cris en java) et par spring qui le supporte (on parle ici d'avoir des apis pensaient pour un usage idiomatique de spring avec kotlin), mais en soit je ne le vois pas tant dĂ©coller que ça hors Android. Je peux tout Ă  fait me tromper, hein ? Et j'apprĂ©cie kotlin, mais je ne le vois pas arriver. Je viens de regarder, Ă©videment ça vaut ce que ça vaut, mais dans le dernier classement tiobe groovy est 17Ăšme, scala 31Ăšme et kotlin 34Ăšme. Pour te donner une idĂ©e rust est 18Ăšme et swift est 12Ăšme pour d'autres langages rĂ©cents.

          C’est aussi celui qui ressemble le plus Ă  Java (il a Ă©tĂ© pensĂ© en gros comme « Java en mieux, avec des idĂ©es tirĂ©es de Scala, mais en plus pragmatique et plus efficace »).

          C'est aussi un peu comme ça qu'a Ă©tait pense groovy avec beaucoup plus d'ambition en terme de nouveautĂ© et un Ă©norme intĂ©rĂȘt pour ĂȘtre vraiment interfaçable avec java (contrairement Ă  scala, tu peux utiliser une bibliothĂšque groovy sans te rendre compte que ce n'est pas du java - Ă  cause de collections qui n'existe pas dans java collection, de l'utilisation d'idiomes qui n'existent pas en java et qui font bizarre Ă  l'usage, etc).

          Groovy s’est rapidement fait dĂ©passer en popularitĂ© par Kotlin (mĂȘme si Gradle l’utilise (mĂȘme si on peut scipter Gradle avec Kotlin))

          Tu vois ça à partir de quoi ?

          alors que c’est assez frĂ©quent avec Kotlin, notamment parce que Scala est plus difficile Ă  prendre en main (et a longtemps Ă©tĂ© lentissime Ă  compiler).

          Ça a Ă©tait "frĂ©quent" (gradle, android et spring), mais hors de ces 3 exemples qui commencent Ă  dater un peu je n'ai pas vu d'autres annonces de ce type passer (mais je suis intĂ©ressĂ© si tu as des exemples).

          Et ça n’est pas une question d’implĂ©mentation mais clairement de fonctionnalitĂ©s : en terme de fonctionnalitĂ©s, Java rattrape Kotlin.

          Ça a des implications. Les sealed classes sont Ă©crites dans diffĂ©rents fichiers. Si tes classes sont grosses, tu peux trouver ça intĂ©ressant. La contrepartie, c'est que ta classe doit aussi ĂȘtre dĂ©clarĂ©e dans la classe mĂšre ce qui est un peu plus moche (c'est moins DRY). Le pettern matching de java oblige Ă  crĂ©er de nouvelles rĂ©fĂ©rences tu ne pourra jamais Ă©crire :

          var a = foo();
          if (a instanceof Integer) b+=a;

          Ces choix ne sont pas vraiment anodins.

          Tout mon propos est lĂ  : en tant que dĂ©veloppeur et d’utilisateur au quotidien du langage, ça fait plaisir de voir que Java ne stagne plus comme il a pu le faire Ă  plusieurs Ă©poques, et se dĂ©cide Ă  intĂ©grer les bonnes idĂ©es qui viennent d’ailleurs dans la « communauté ».

          Tout à fait d'accord. Je pense qu'à terme ça aurait posé de graves souci à Java. Comme C++, ils se sont donné un rythme et ça accélÚre les évolutions et c'est vraiment bien.

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

          • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

            Posté par  (site web personnel, Mastodon) . Évalué à 3.

            Pour l’utilisation de Kotlin, je me base plus sur mon expĂ©rience et surtout ce que je vois de son support un peu partout, que sur des index aussi bancals de TIOBE (dont la courbe contient des sautes impressionnantes et inexpliquĂ©es). Or Kotlin est de plus en plus supportĂ©, depuis les gros et anciens frameworks Ă  la mode comme Spring aux nouveaux frameworks Ă  la mode comme Quarkus.

            C'est aussi un peu comme ça qu'a Ă©tait pense groovy avec beaucoup plus d'ambition en terme de nouveautĂ© et un Ă©norme intĂ©rĂȘt pour ĂȘtre vraiment interfaçable avec java

            C’est tout l’intĂ©rĂȘt de Kotlin : son principe de base, c’est d’abord et avant tout d’ĂȘtre pratique et agrĂ©able Ă  utiliser en leur permettant de se concentrer sur ce qui est important dans le code, pas sur des dĂ©tails type boilerplate (« A modern programming language that makes developers happier. » d’aprĂšs eux). Ça fait hurler les puristes des langages et les chercheurs, mais Ă  l’usage dans l’industrie c’est infiniment plus agrĂ©able Ă  utiliser que, par exemple, Scala qui lui a une conception orientĂ©e par la thĂ©orie.

            La popularité de Groovy par rapport à Kotlin, je la vois à la fois par rapport à mon expérience personnelle et par rapport aux tendances de recherche sur Google.

            La connaissance libre : https://zestedesavoir.com

            • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

              Posté par  . Évalué à 8.

              Ça fait hurler les puristes des langages et les chercheurs, mais Ă  l’usage dans l’industrie c’est infiniment plus agrĂ©able Ă  utiliser que, par exemple, Scala qui lui a une conception orientĂ©e par la thĂ©orie.

              Si tu as un peu de bouteille dans l'industrie et que tu n'écris pas des applications jetables à court terme, la stratégie payante c'est:

              • tu regardes passer les langages alternatifs de la JVM
              • tu joues avec par interet et pour les trucs mineurs
              • tu attends qu'une partie des trucs intĂ©ressant atterrissent Java pour les choses sĂ©rieuses.

              C'est long, trÚÚs long mais moins que d'avoir du réécrire sa base de code en 5 langages en 15 ans ou de se retrouver avec un mélange de 3 ou 4 :)

              Kotlin ne sera pas différent, dans 2..5 ans il n'aura plus d'avantage trÚs significatif et tu te retrouveras avec une base de code dont tu ne sauras pas quoi faire par ce qu'autant l'interop Java <-> autre c'est pas toujours fou mais l'interop autre1 <-> autre2 c'est la déprime totale.

              Bref plus tu fais du back / infra plus le ROI est discutable. AprĂšs ça ne semble pas poser de problĂšme fondamental Ă  l'Ă©cosystĂšme JS de réécrire 100 fois mĂȘme chose


              Si tu perds patience, autant partir de la JVM. Android c'est différent, il n'y a pas de choix.

        • [^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)

          Posté par  (site web personnel) . Évalué à 2.

          MĂȘme si j'utilise et adore Kotlin (hors d'Android), Groovy a largement plus de lĂ©gitimitĂ© pour avoir la primeur sur ces fonctionnalitĂ©s.

          Gradle est un trÚs mauvais exemple de comment faire du Groovy, je pense que ça le dessert plus qu'autre chose. Mais bon, ça lui permet d'avoir une certaine présence.

  • # C'est pas pour casser l'ambiance

    Posté par  . Évalué à -10.

    mais qu'est ce que ce détritut de langage/écosystÚme a à faire avec une revue libriste?

    • [^] # Re: C'est pas pour casser l'ambiance

      Posté par  (site web personnel) . Évalué à 10.

      Parce que c'est un langage populaire avec une ou plusieurs implémentations libres, utilisé par beaucoup de logiciels libres ?

      En tout cas 28 points pour la dĂ©pĂȘche suffit Ă  montrer qu'il y a de l'intĂ©rĂȘt ici :-)

    • [^] # Re: C'est pas pour casser l'ambiance

      Posté par  (site web personnel, Mastodon) . Évalué à 10.

      Si tu as des vrais arguments contre Java (des qui existent encore en 2020, pas des qui datent de Java 1.4 et de plus de 20 ans) et pas des insultes, je serais curieux de les lire.

      Idem pour toute personne qui plusseoierait le message de Maxzor.

      La connaissance libre : https://zestedesavoir.com

      • [^] # Re: C'est pas pour casser l'ambiance

        Posté par  (site web personnel) . Évalué à 3.

        Le seul problÚme de Java, c'est qu'il est grassouillet. Espérons qu'il se mette au régime un jour.

        Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board

        • [^] # Re: C'est pas pour casser l'ambiance

          Posté par  (site web personnel, Mastodon) . Évalué à 3.

          Y’a eu pas mal d’efforts en ce sens, mais la pratique habituelle ça reste quand mĂȘme d’avoir une JVM avec toutes ses API, ce qui est effectivement souvent lourd pour pas grand-chose.

          La connaissance libre : https://zestedesavoir.com

      • [^] # Re: C'est pas pour casser l'ambiance

        Posté par  (site web personnel) . Évalué à 3.

        Java est trÚs verbeux, donc plus difficile à lire. Il n'est pas assez paramétrique ce qui oblige à jouer avec des @
, voir des bouts de définition en XML à coté du code, ce qui implique lourdeur, et lenteur. Une appli web qui ne fait pas grand chose : 500Mo d'artefact de gitlab


        Le type 'null' est toujours là. Les types de base ne sont pas des objets. Il n'y a pas de notion de layout mémoire, tout objet est "boxé" ce qui implique une grosse quantité de pointeur de partout. Le modÚle "multi-thread" est pas top, ce n'est ni Go, ni Rust.

        Les licences entre openjdk et jdk d'Oracle, ne sont pas claire. Et retrouver aujourd'hui, une jvm 8 est compliqué.

        


        "La premiÚre sécurité est la liberté"

        • [^] # Re: C'est pas pour casser l'ambiance

          Posté par  (site web personnel, Mastodon) . Évalué à 5.

          Je vois du vrai et de l’obsolĂšte dans ce que tu Ă©cris :

          Java est trĂšs verbeux, donc plus difficile Ă  lire.

          PlutĂŽt faux depuis Java 8. On est trĂšs loin de la verbositĂ© de Java jusqu’à 1.4 inclus.

          Il n'est pas assez paramétrique ce qui oblige à jouer avec des @
, voir des bouts de définition en XML à coté du code, ce qui implique lourdeur, et lenteur.

          Sur un projet moderne, ça fait des annĂ©es que je n’ai plus eu Ă  configurer quoi que ce soit en XML Ă  cĂŽtĂ© du code en Java. Quant Ă  la lourdeur et la lenteur incluses parce que « pas assez paramĂ©trique », je suis rĂ©ellement curieux d’avoir un exemple de ce que tu entends par lĂ  (c’est une vraie question, pas un troll).

          Une appli web qui ne fait pas grand chose : 500Mo d'artefact de gitlab


          Ha ? Tu utilises quoi comme framework ? J’ai un projet perso avec Spring Boot + Kotlin + connexion Ă  la BDD + gĂ©nĂ©ration de pages en HTML avec Thymeleaf, je rĂąlais parce que le JAR exĂ©cutable (et unique fichier produit) Ă©tait passĂ© de 49 Ă  65 Mo en passant Ă  la derniĂšre version de Spring Boot. C’est objectivement gros, surtout quand Quarkus peut produire des binaires natifs beaucoup plus petits (mais sur des piles moins grosses), mais un ordre de grandeur sous ce que tu donnes.

          Le type 'null' est toujours lĂ . Les types de base ne sont pas des objets.

          Tout ça, OK (et Ă  mon sens le null est peut-ĂȘtre le plus gros problĂšme de Java). Il y avait un projet pour se dĂ©barasser des types de base, mais ça fait longtemps que je n’en ai plus entendu parler.

          Il n'y a pas de notion de layout mémoire, tout objet est "boxé" ce qui implique une grosse quantité de pointeur de partout.

          Et du coup ça implique quoi comme problùme, vu que tu ne manipules jamais de pointeur en Java ?

          Le modĂšle "multi-thread" est pas top, ce n'est ni Go, ni Rust.

          C’est assez vrai, mais Java date de 1996, Go de 2009, Rust de 2010. Les API rĂ©centes ont aussi beaucoup amĂ©liorĂ© l’utilisation des threads, et on trouve des API rĂ©actives tout Ă  fait convaincantes et performantes depuis peu.

          Les licences entre openjdk et jdk d'Oracle, ne sont pas claire.

          C’est en effet un problĂšme, de mĂȘme que les incompatiblitĂ©s entre les diffĂ©rents fournisseurs de JVM/JDK (on les rencontre surtout pour les modes graphiques).

          Et retrouver aujourd'hui, une jvm 8 est compliqué.

          10 secondes chrono si tu connais le nom de AdoptOpenJDK (qui est Ă  connaitre si tu travailles avec Java).

          La connaissance libre : https://zestedesavoir.com

          • [^] # Re: C'est pas pour casser l'ambiance

            Posté par  . Évalué à 4.

            Il n'est pas assez paramétrique ce qui oblige à jouer avec des @
, voir des bouts de définition en XML à coté du code, ce qui implique lourdeur, et lenteur.

            Sur un projet moderne, ça fait des annĂ©es que je n’ai plus eu Ă  configurer quoi que ce soit en XML Ă  cĂŽtĂ© du code en Java. Quant Ă  la lourdeur et la lenteur incluses parce que « pas assez paramĂ©trique », je suis rĂ©ellement curieux d’avoir un exemple de ce que tu entends par lĂ  (c’est une vraie question, pas un troll).

            Attendons que ces langages aient 10 ans, pour voir apparaßtre ce genre de choses (à mon avis go y passera et rust non grùce aux macro). Grosso modo soit tu prévois de la métaprogrammation dans ton langage de base soit tu prévois un métalangage ou un outillage autour (comme python, C, C++, C#,
).

            Il n'y a pas de notion de layout mémoire, tout objet est "boxé" ce qui implique une grosse quantité de pointeur de partout.

            Et du coup ça implique quoi comme problùme, vu que tu ne manipules jamais de pointeur en Java ?

            Les records sont entre autre là pour ça.

            Les licences entre openjdk et jdk d'Oracle, ne sont pas claire.

            C’est en effet un problĂšme, de mĂȘme que les incompatiblitĂ©s entre les diffĂ©rents fournisseurs de JVM/JDK (on les rencontre surtout pour les modes graphiques).

            openjdk c'est du gplv2 je vois pas la complexité. Je vois pas en quoi la notion de distribution est compliquée pour des gens habitués à leurs distributions linux.

            10 secondes chrono si tu connais le nom de AdoptOpenJDK (qui est Ă  connaitre si tu travailles avec Java).

            Je vois pas la difficulté.

            https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

            • [^] # Re: C'est pas pour casser l'ambiance

              Posté par  (site web personnel) . Évalué à 1.

              Ou est le jdk 8 dans la page OpenJDK ?

              "La premiÚre sécurité est la liberté"

              • [^] # Re: C'est pas pour casser l'ambiance

                Posté par  . Évalué à 2.

                OpenJDK ne fais pas de distribution. C'est comme aller sur la lkml pour tĂ©lĂ©charger linux. Tu peux mais du coup il faut comprendre que tu rĂ©cupĂšre une archive d'un dĂ©pĂŽt. Donc pour openjdk, tu clique sur mercurial puis sur jdk8 et tu va pouvoir rĂ©cupĂ©rer le jdk8 en bz2, zip ou gz. Ce n'est pas facile, mais dis-toi que tu va mĂȘme devoir le compiler ton JDK. Encore une fois c'est comme d'aller chercher ton noyau sur lkml.org

                https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

                • [^] # Re: C'est pas pour casser l'ambiance

                  Posté par  (site web personnel) . Évalué à 1.

                  On est bien d'accord, il n'y a pas de package de jdk sur openjdk. Donc, pourquoi en parler ?

                  "La premiÚre sécurité est la liberté"

                  • [^] # Re: C'est pas pour casser l'ambiance

                    Posté par  . Évalué à 4.

                    Parce que je ne vois pas ce que tu entend par "on trouve plus le jdk8" tous les endroits oĂč on peut logiquement chercher en parlent dĂšs leur page d'accueil. MĂȘme les moteurs de recherche ont des rĂ©sultats pertinents dans les premiers liens.

                    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

                    • [^] # Re: C'est pas pour casser l'ambiance

                      Posté par  (site web personnel) . Évalué à 0.

                      Ce qui est faux. openjdk ne le propose pas. Le lien oracle propose le jdk oracle.

                      Il reste l'autre lien qui n'apparaissait pas quand j'avais fait la recherche.

                      Dire que trouver un openjdk 8 est simple est faux. Il n'est disponible que dans les vieilles distro ou sur https://adoptopenjdk.net/

                      "La premiÚre sécurité est la liberté"

                      • [^] # Re: C'est pas pour casser l'ambiance

                        Posté par  . Évalué à 5.

                        Il y a deux clics à faire sur adoptopenjdk, je ne vois pas comment tu peux trouver ça compliquer (et c'est le 4e site chez Google chez moi si je tappe "download openjdk 8").

                        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                      • [^] # Re: C'est pas pour casser l'ambiance

                        Posté par  . Évalué à 3.

                        Il n'est disponible que dans les vieilles distro

                        Si t'es pas satisfait de ta distro, ce n'est probablement pas la faute du projet upstream1. RHEL possĂšde toujours la version 8 du JDK par exemple. AprĂšs ta distribution a peut ĂȘtre des arguments comme « on ne supporte que la derniĂšre version LTS » ce qui a du sens (tous les projets ne maintiennent pas plusieurs versions LTS en parallĂšle).


                        1. les sources sont toujours disponibles, le dernier commit sur le dĂ©pĂŽt a 6 jours donc je prĂ©sume que ta distribution a accĂšs au code Ă  jour du JDK ↩

                        https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

                      • [^] # Re: C'est pas pour casser l'ambiance

                        Posté par  . Évalué à 6. DerniĂšre modification le 24 septembre 2020 Ă  19:12.

                        Dire que trouver un openjdk 8 est simple est faux. Il n'est disponible que dans les vieilles distro ou sur https://adoptopenjdk.net/

                        Petit résumé de comment fonctionne l'écosystÚme Java:

                        • OpenJDK est un projet de dĂ©veloppement, ie. un dĂ©pĂŽt de code. Il ne fournit pas et n'a jamais fourni de binaires.
                        • La maintenance des branches LTS d'OpenJDK est a la charge d'un maintainer. Historiquement Oracle faisait le taff trĂšs longtemps, maintenant il passe la main Ă  quelqu'un d'autre 6 mois aprĂšs la release. En pratique on va dire qu'on s'en fiche, tout ce qu'il se passe c'est qu'il y a une branche dans le dĂ©pĂŽt qui correspond Ă  "Java 8 LTS" avec des tags qui sont posĂ©s rĂ©guliĂšrement dessus.
                        • Les fournisseurs de JDK basĂ©s sur OpenJDK prennent le code de cette branche, peuvent y apporter des correctifs supplĂ©mentaire si ils le souhaitent, le compile, le test, passe le TCK et te donnent la possibilitĂ© de le tĂ©lĂ©charger.
                        • Les fournisseurs qui prennent l'upstream sans changement fournissent gĂ©nĂ©ralement des binaires jusqu'Ă  la mort de la branche LTS, ca ne leur coĂ»te virtuellement rien le taff de maintenance est fait par OpenJDK. La plupart des fournisseurs sont dans ce cas.
                        • Les fournisseurs qui maintiennent des correctifs supplĂ©mentaires, gĂ©nĂ©rallement liĂ©s Ă  des contrats de support qui te garantissent qu'ils te fournissent les correctifs avant que ca soit intĂ©grĂ© upstream choisissent d'arrĂȘter le support d'une version quand ils veulent. C'est juste un cycle commercial.

                        Oracle JDK correspond Ă  ce dernier cas. Pour Java 8 ils ont arrĂȘtez de filer gratuitement un JDK 8 et n'en fournissent plus qu'Ă  leur client.

                        Si tu veux un JDK 8 open source gratuit, il suffit de choisir ton fournisseur:

                        Je crois que tu n'as juste pas compris comment ça fonctionne et que tu fais beaucoup de vagues pour un petit changement de stratégie de la part d'Oracle JDK.

                        Pour plus de détails: https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit

                        Si tu veux essayez différent JDK il existe l'excellent SDKMAN, https://sdkman.io/jdks

                        • [^] # Re: C'est pas pour casser l'ambiance

                          Posté par  (site web personnel, Mastodon) . Évalué à 3.

                          J’ajoute qu’en plus de l’OpenJDK, il y a d’autres JDK alternatifs. Le plus utilisĂ© (et qui reste vraiment un JDK, pas un machin Ă©trange comme GraalVM) est sans doute J9, le JDK d’IBM, qui est rĂ©cemment passĂ© chez la fondation Eclipse.

                          Jusqu’à Java 6, il Ă©tait sensiblement plus performant que le JDK d’Oracle, mais ça n’est plus le cas. Il est obligatoire pour certains produits IBM, et son implĂ©mentation est complĂštement diffĂ©rente, y compris les classes de l’API.

                          La connaissance libre : https://zestedesavoir.com

                          • [^] # Re: C'est pas pour casser l'ambiance

                            Posté par  . Évalué à 3.

                            Moi qui ne suit pas dans l'ecosystĂšme Java, je ne vois pas trop l'intĂ©rĂȘt de J9. Quelqu'un a des arguments pour/contre ?

                            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                            • [^] # Re: C'est pas pour casser l'ambiance

                              Posté par  (site web personnel, Mastodon) . Évalué à 3.

                              L’argument « pour » Ă©tait tout simplement que pendant longtemps, les produits IBM refusaient de se lancer (ou se comportaient n’importe comment) s’ils n’utilisaient pas J9


                              Si tu Ă©tais riche (parce que la licence n’était pas donnĂ©e si tu voulais utiliser J9 autrement que prĂ©-packagĂ© avec un produit IBM) et que tu avais besoin d’un peu plus de performances, jusqu’à Java 1.5 inclus, ça pouvait ĂȘtre aussi une solution Ă  Ă©tudier.

                              La connaissance libre : https://zestedesavoir.com

                              • [^] # Re: C'est pas pour casser l'ambiance

                                Posté par  . Évalué à 2.

                                Ça me fait penser Ă  jrokit (qui fut la premiĂšre Ă  faire de dĂ©chargement de classe il me semble) et l'Ă©poque de bea puis d'oracle.

                                https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

                              • [^] # Re: C'est pas pour casser l'ambiance

                                Posté par  . Évalué à 3.

                                Mais du coup, il n'y a plus d'arguments actuellement ? (Sans doute pour ça qu'IBM l'a abandonné)

                                « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                                • [^] # Re: C'est pas pour casser l'ambiance

                                  Posté par  (site web personnel, Mastodon) . Évalué à 3.

                                  Aujourd’hui, si tu n’as pas de raison extĂ©rieure impĂ©rative d’utiliser J9, la seule raison que je vois c’est pour le plaisir d’utiliser une alternative. Il y a peut-ĂȘtre des cas spĂ©cifiques particuliers oĂč elle est intĂ©ressante, mais de but en blanc je n’en connais pas.

                                  La connaissance libre : https://zestedesavoir.com

                                  • [^] # Re: C'est pas pour casser l'ambiance

                                    Posté par  . Évalué à 4.

                                    La plaquette commerciale: https://www.eclipse.org/openj9/performance/

                                    En gros ils se positionnent sur une VM un poil plus adaptée aux microservice (footprint un poil plus bas cas et démarrage plus rapide au détriment d'un poil moins de perf en régime de croisiÚre). On reste sur des écarts de quelques pourcents. J'ai pas testé sur des charges réelles.

          • [^] # Re: C'est pas pour casser l'ambiance

            Posté par  (site web personnel) . Évalué à 1.

            PlutĂŽt faux depuis Java 8. On est trĂšs loin de la verbositĂ© de Java jusqu’à 1.4 inclus.

            C'est encore horrible par rapport Ă  d'autre langage (cf le nouveau record).

            Quant Ă  la lourdeur et la lenteur incluses parce que « pas assez paramĂ©trique », je suis rĂ©ellement curieux d’avoir un exemple de ce que tu entends par lĂ 

            Tout ce qui concerne spring boot, la gestion d'erreur complexe à comprendre, le fait que cela ne soit plus programmatique. Si on rajoute des générateurs de code à un langage, c'est que les fonctions paramétrique sont trop pauvres.

            mais un ordre de grandeur sous ce que tu donnes.

            Je sais, j'étais le premier surpris, c'était un serveur d'API avec connection Kafka (dépendance incluse).

            Et du coup ça implique quoi comme problùme, vu que tu ne manipules jamais de pointeur en Java ?

            Cela implique beaucoup de lenteurs (les cpu n'aiment pas les indirections mémoires) et beaucoup de consommation mémoire par rapport à une structure identique en C++, par exemple.

            Les API rĂ©centes ont aussi beaucoup amĂ©liorĂ© l’utilisation des threads, et on trouve des API rĂ©actives tout Ă  fait convaincantes et performantes depuis peu.

            Tu penses à quoi ?

            C’est en effet un problĂšme, de mĂȘme que les incompatiblitĂ©s entre les diffĂ©rents fournisseurs de JVM/JDK (on les rencontre surtout pour les modes graphiques).

            J'en étais resté que JavaFX n'était plus géré. Tu penses à autres choses ?

            10 secondes chrono si tu connais le nom de AdoptOpenJDK (qui est Ă  connaitre si tu travailles avec Java).

            Cela aurait pu me servir il y a quelques temsp :)

            "La premiÚre sécurité est la liberté"

            • [^] # Re: C'est pas pour casser l'ambiance

              Posté par  (site web personnel, Mastodon) . Évalué à 3.

              C'est encore horrible par rapport Ă  d'autre langage (cf le nouveau record).

              Heu
 tu est sĂ©rieux là ? Le seul truc de « verbeux » dans un record, c’est les accolades Ă  la fin dont on se demande un peu ce qu’elles font là :

              record Point(int x, int y) { }

              On ne peut pas vraiment dire que ça rends le truc illisible


              Tout ce qui concerne spring boot, la gestion d'erreur complexe Ă  comprendre, le fait que cela ne soit plus programmatique.

              La gestion d’erreurs (en particulier les checked exceptions) est connu comme l’une des erreurs de conception du langage, entre autres par certains concepteurs du langage. Je ne comprends pas ce que tu veux dire par « Tout ce qui concerne spring boot, » et « le fait que cela ne soit plus programmatique. ».

              Cela implique beaucoup de lenteurs (les cpu n'aiment pas les indirections mémoires) et beaucoup de consommation mémoire par rapport à une structure identique en C++, par exemple.

              La consommation mĂ©moire, pourquoi pas (et encore, le gros de la consommation mĂ©moire en Java, c’est surtout des gens qui ne savent pas s’en servir et qui font des fuites mĂ©moires partout, et qui laissent les paramĂštres Ă  des valeurs dĂ©mesurĂ©ment hautes). Les performances
 Java peut monter franchement haut en performances, notamment pour un langage non compilĂ© en natif.

              Concernant les threads, il y a eu le framework Executor et ses évolutions futures, et il me semble que ça a encore été amélioré depuis.

              Pour les frameworks recatifs, je pense Ă  des choses comme RxJava ou Spring Reactor.

              Concernant les différences entre JVM/JDK, quelques exemples ici.

              La connaissance libre : https://zestedesavoir.com

              • [^] # Re: C'est pas pour casser l'ambiance

                Posté par  (site web personnel) . Évalué à 3.

                Le seul truc de « verbeux » dans un record

                Je voulais dire que record essaye justement de palier le problÚme. Mais ce n'est qu'un paquet de donné.

                Je ne comprends pas ce que tu veux dire par « Tout ce qui concerne spring boot, » et « le fait que cela ne soit plus programmatique. ».

                Si tu code à coup de @
, tu ne codes plus vraiment. C'est de la déclaration statique au milieu d'un truc qui est dynamique, et parfois cela marche mal. Et typiquement, comprendre une erreur provenant de là n'est pas simple.

                Les performances
 Java peut monter franchement haut en performances, notamment pour un langage non compilé en natif.

                Oui, et une des grosses différences avec C++ est justement cette fragmentation et ces sauts mémoires.

                "La premiÚre sécurité est la liberté"

            • [^] # Re: C'est pas pour casser l'ambiance

              Posté par  . Évalué à 6.

              Je sais, j'étais le premier surpris, c'était un serveur d'API avec connection Kafka (dépendance incluse).

              Tu as dĂ©jĂ  vu une appli qui Ă©tait grosse donc java fais de grosses appli ?

              Cela implique beaucoup de lenteurs (les cpu n'aiment pas les indirections mémoires) et beaucoup de consommation mémoire par rapport à une structure identique en C++, par exemple.

              En contrepartie tu évite la fragmentation de la mémoire et le CPU n'aime pas non plus la fragmentation mémoire.

              J'en étais resté que JavaFX n'était plus géré.

              Ce n'est plus dans le JDK, c'est loin d'ĂȘtre mort https://openjfx.io/
              Oui quand on suit de loin un Ă©cosystĂšme ça peut paraĂźtre difficile Ă  suivre ou comprendre. Mais je ne trouve pas surprenant qu'il faille un peu s'intĂ©resser Ă  un sujet pour le comprendre


              https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

              • [^] # Re: C'est pas pour casser l'ambiance

                Posté par  (site web personnel) . Évalué à 1.

                Tu as dĂ©jĂ  vu une appli qui Ă©tait grosse donc java fais de grosses appli ?

                Java a cette réputation, qu'un exemple confirme. Mais je serais le seul à le penser


                En contrepartie tu évite la fragmentation de la mémoire et le CPU n'aime pas non plus la fragmentation mémoire.

                Qu'est-ce que tu veux dire par là ? La fragmentation mémoire est dû à l'allocation de petit bout de mémoire à la place de gros. Vu que chaque objet est alloué indépendamment dans Java, et qu'une grosse structure de structure est impossible, la mémoire sous Java est bien plus fragmenté et une structure de structure est sous forme de structure de pointeur.

                Peut ĂȘtre que tu veux parler de la compaction faite par le GC, mais ce n'est fait que part le code "stop the world" qui est Ă©vitĂ© Ă  tout prix.

                "La premiÚre sécurité est la liberté"

                • [^] # Re: C'est pas pour casser l'ambiance

                  Posté par  . Évalué à 4.

                  La fragmentation mémoire est dû à l'allocation de petit bout de mémoire à la place de gros. Vu que chaque objet est alloué indépendamment dans Java, et qu'une grosse structure de structure est impossible, la mémoire sous Java est bien plus fragmenté et une structure de structure est sous forme de structure de pointeur.

                  Non la fragmentation est due à la non réutilisation de l'espace libéré. Allouer un grand espace est une technique pour limiter la fragmentation.

                  Peut ĂȘtre que tu veux parler de la compaction faite par le GC, mais ce n'est fait que part le code "stop the world" qui est Ă©vitĂ© Ă  tout prix.

                  Lire la dĂ©pĂȘche que l'on commente peut ĂȘtre une bonne idĂ©e ;)

                  https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

                  • [^] # Re: C'est pas pour casser l'ambiance

                    Posté par  (site web personnel) . Évalué à 1.

                    En bref ça :

                    En contrepartie tu évite la fragmentation de la mémoire et le CPU n'aime pas non plus la fragmentation mémoire.

                    ne veut rien dire. Gaspiller de la mémoire ne coute rien en temps cpu.

                    "La premiÚre sécurité est la liberté"

          • [^] # Re: C'est pas pour casser l'ambiance

            Posté par  . Évalué à 1.

            Le type 'null' est toujours lĂ . Les types de base ne sont pas des objets.

            Tout ça, OK (et Ă  mon sens le null est peut-ĂȘtre le plus gros problĂšme de Java). Il y avait un projet pour se dĂ©barasser des types de base, mais ça fait longtemps que je n’en ai plus entendu parler.

            C'est étrange comme projet, j'aurais plutÎt eu l'idée contraire : virer les objets et n'avoir que des types comme ceux de base. :-)

            Les dĂ©finitions mathĂ©matiques ne peuvent jamais ĂȘtre fausses. En effet, comme le concept est d’abord donnĂ© par la dĂ©finition, il ne contient exactement que ce que la dĂ©finition veut que l’on pense par ce concept. Mais, s’il ne peut rien s’y trouver de faux quant au contenu, il peut y avoir parfois, mais rarement, quelque dĂ©faut dans la forme (dans l’expression), je veux dire du cĂŽtĂ© de la prĂ©cision. Ainsi cette dĂ©finition ordinaire de la ligne circulaire, qu’elle est une ligne courbe dont tous les points sont Ă©galement Ă©loignĂ©s d’un point unique (du centre), a le dĂ©faut d’introduire sans nĂ©cessitĂ© la dĂ©termination courbe. En effet il doit y avoir un thĂ©orĂšme particulier qui est dĂ©rivĂ© de la dĂ©finition, et qui peut ĂȘtre aisĂ©ment dĂ©montrĂ©, Ă  savoir que toute ligne dont tous les points sont Ă©galement Ă©loignĂ©s d’un point unique est courbe (qu’aucune partie n’en est droite).

            Kant, Critique de la raison pure.

            Un type c'est un concept et l'interface d'une classe la définition d'un concept (celui mal fait d'algÚbre sur un concept). Celui qui définit ses concepts comme des classes s'y prend aussi mal que ce qui est reproché dans le texte ci-dessus. Si au lieu de ce théorÚme, on prend le fait qu'un cercle a une circonférence dont la valeur est le diamÚtre multiplié par une constante (Pi) et que l'on met cela dans une méthode d'une classe, alors on définit le cercle comme une quiche sur patte. ;-)

            Le problĂšme Ă©tant que, si l'on a que des classes, ce dĂ©faut qui touche Ă  la forme des dĂ©finitions, au lieu d'ĂȘtre rare, se retrouve ĂȘtre permanent.

            Sapere aude ! Aie le courage de te servir de ton propre entendement. VoilĂ  la devise des LumiĂšres.

        • [^] # Re: C'est pas pour casser l'ambiance

          Posté par  (site web personnel) . Évalué à 3.

          plutĂŽt faux, peut-ĂȘtre verbeux mais tellement + simple Ă  lire surtout plusieurs mois aprĂšs avoir Ă©crit le code
. comparativement Ă  du ruby ou du c, c++ oĂč tu peux arriver Ă  du code concis
. mais tellement difficile Ă  lire
. d'ailleurs pas toujours Ă©vident avec les lambdas

          www.solutions-norenda.com

  • # juste une coquille Ă  corriger

    Posté par  (site web personnel) . Évalué à 1.

    return swicth(c)

    swicth -> switch

Suivre le flux des commentaires

Note : les commentaires appartiennent Ă  celles et ceux qui les ont postĂ©s. Nous n’en sommes pas responsables.