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

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    juin 2016
    Messages
    2 612
    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 : 2 612
    Points : 56 889
    Points
    56 889
    Par défaut Java 19 : nouvelles fonctionnalités avec exemples, apporte des méthodes pour créer des HashMaps préalloués
    JDK 19 : les nouvelles fonctionnalités de Java 19 incluent la concurrence structurée, les modèles d'enregistrement
    et l'aperçu d'une API de fonction et de mémoire étrangères

    L'équipe de développement du JDK a annoncé que le JDK 19 est désormais complet, car il a atteint la phase initiale de lancement. Cela signifie que le dépôt de sources principal a été transféré vers le dépôt de stabilisation du JDK et qu'aucun JEP (Java Enhancement Proposal) supplémentaire ne sera ajouté au JDK 19. Sept fonctionnalités sont prévues dans cette version, notamment la concurrence structurée, les modèles d'enregistrement, un aperçu d'une fonction étrangère et d'une API de mémoire, ainsi que la prise en charge de l'architecture de jeu d'instructions (ISA) Linux/RISC-V. Java 19 sera disponible en septembre 2022.

    Conformément au calendrier de sortie du JDK 19, Mark Reinhold, architecte en chef du groupe Java Platform d'Oracle, a annoncé que les ajouts à la prochaine version du kit de développement sont terminés. Pour rappel, une nouvelle version standard de Java est publiée tous les six mois. Avec cette dernière étape dans le processus de publication de la version standard de Java, les autres fonctionnalités prévues, telles que les génériques universels et les objets de valeur, devront attendre une version ultérieure de la plateforme. Les nouvelles fonctionnalités du JDK 19 comprennent :

    JEP 405 : un aperçu des modèles d'enregistrement

    Cette proposition a pour but d'améliorer le langage de programmation Java avec des motifs d'enregistrement (Record Patterns) pour déconstruire les valeurs d'enregistrement. Les modèles d'enregistrement et les modèles de type peuvent être imbriqués pour permettre une forme puissante, déclarative et composable de navigation et de traitement des données. Il s'agit d'une fonctionnalité du langage en avant-première. Les objectifs de la proposition comprennent l'extension de la correspondance de motifs pour exprimer des requêtes de données plus sophistiquées et composables, sans modifier la syntaxe ou la sémantique des patrons de type.

    Nom : java-logo_1280x960.jpg
Affichages : 96935
Taille : 24,7 Ko

    Cette proposition s'appuie sur la correspondance de motifs pour instanceof, livré dans le JDK 16 en mars 2021. Les plans pourraient prévoir l'extension des modèles d'enregistrement avec des capacités telles que les modèles de tableaux et les modèles de variables. Les modèles d'enregistrement font partie du projet Amber, un effort visant à explorer et à incuber des fonctionnalités Java plus petites et orientées vers la productivité.

    JEP 422 : la prise en charge de l'architecture de jeu d'instructions Linux/RISC-V

    RISC-V est une architecture de jeu d'instructions (ISA) RISC libre et open source, conçue à l'origine à l'Université de Californie, Berkeley, et maintenant développée en collaboration sous le parrainage de RISC-V International. Elle est déjà prise en charge par un large éventail de chaînes d'outils de langage. Selon l'équipe du JDK, avec la disponibilité croissante du matériel RISC-V, un portage du JDK serait précieux. Avec le portage Linux/RISC-V, Java obtiendrait la prise en charge d'un jeu d'instructions matérielles qui est déjà pris en charge par un large éventail de chaînes d'outils de langage.

    RISC-V est en fait une famille d'ISA connexes. Le portage Linux/RISC-V ne prendrait en charge que la configuration RV64GV de RISC-V, un ISA 64 bits à usage général qui inclut des instructions vectorielles. Les développeurs de Java pourraient envisager d'autres configurations RISC-V à l'avenir.

    JEP 424 : un aperçu d'une API de fonction et de mémoire étrangères

    Cette proposition vise à introduire une API grâce à laquelle les programmes Java peuvent interagir avec le code et les données en dehors de l'environnement d'exécution Java. En invoquant efficacement des fonctions étrangères (c'est-à-dire du code extérieur à l'environnement d'exécution Java) et en accédant en toute sécurité à la mémoire étrangère (c'est-à-dire la mémoire non gérée par la JVM), l'API permet aux programmes Java d'appeler des bibliothèques natives et de traiter des données natives sans le danger et la fragilité de Java Native Interface (JNI).

    L'API de fonction et de mémoire étrangères (Foreign Function and Memory API) combine deux API antérieures en incubation : l'API d'accès à la mémoire étrangère et l'API de liaison étrangère. L'API de fonction et de mémoire étrangères a été incubée dans le JDK 17 et réincubée dans le JDK 18. Les objectifs de la proposition comprennent la facilité d'utilisation, les performances, la généralité et la sécurité. Il s'agit dans le JDK 19 d'un aperçu de l'API.

    JEP 425 : un aperçu des threads virtuels

    La proposition vise à introduire les threads virtuels dans la plate-forme Java. Les threads virtuels sont des threads légers qui réduisent considérablement les efforts d'écriture, de maintenance et d'observation des applications concurrentes à haut débit. Les objectifs sont : permettre aux applications serveur écrites dans le style simple "thread par requête" de s'adapter à une utilisation matérielle quasi optimale, permettre au code existant qui utilise l'API java.lang Thread d'adopter les threads virtuels avec un minimum de changements, et permettre le dépannage, le débogage et le profilage des threads virtuels avec les outils JDK existants.

    L'objectif de cette proposition n'est pas de modifier le modèle de concurrence de base de Java ni de proposer une nouvelle construction de parallélisme des données dans le langage Java ou les bibliothèques Java. Elle n'a pas non plus pour objectif de supprimer l'implémentation traditionnelle des threads ou de faire migrer silencieusement les applications existantes vers l'utilisation des threads virtuels. Il s'agit dans le JDK 19 d'un aperçu de l'API.

    JEP 426 : une quatrième incubation d'une API vectorielle

    Cette proposition vise à introduire une API pour exprimer des calculs vectoriels qui se compilent de manière fiable au moment de l'exécution en instructions vectorielles optimales sur les architectures de CPU prises en charge, ce qui permet d'obtenir des performances supérieures aux calculs scalaires équivalents. Les développeurs qui utilisent l'API obtiennent un moyen d'écrire des algorithmes vectoriels complexes en Java, en utilisant l'auto-vectoriseur HotSpot, mais avec un modèle utilisateur qui rend les vectorisations plus prévisibles et plus robustes. L'API vectorielle a été incubée dans les JDK 16, JDK 17 et JDK 18.

    Les améliorations de l'API proposées pour le JDK 19 comprennent des améliorations pour charger et stocker des vecteurs vers et depuis des MemorySegments, comme défini par l'aperçu de l'API de fonction et de mémoire étrangères. Le JDK 19 ajouterait également deux opérations vectorielles intervoies compress et expand, ainsi qu'une opération complémentaire de compression de masque vectoriel.

    L'opération de compression de vecteur fait correspondre les voies d'un vecteur source, sélectionné par un masque, à un vecteur de destination dans l'ordre des voies, tandis que l'opération d'expansion fait l'inverse. L'opération de compression est utile pour filtrer les résultats des requêtes. Dans un autre ajout à l'API vectorielle, les opérations de voie intégrale par bit seraient étendues, y compris les opérations telles que le comptage du nombre de bits à 1, l'inversion de l'ordre des bits, et la compression et l'expansion des bits.

    Les objectifs de l'API sont d'être claire et concise, indépendante de la plateforme, d'avoir des performances d'exécution et de compilation fiables sur les architectures x64 et AArch64, et de permettre une dégradation "gracieuse", pour les situations dans lesquelles un calcul vectoriel ne peut pas être entièrement exprimé à l'exécution comme une séquence d'opérations vectorielles.

    JEP 427 : une troisième aperçu de la correspondance de motifs pour switch

    Cette proposition vise à améliorer le langage de programmation Java grâce à la correspondance de motifs pour les expressions et instructions switch. L'extension de la correspondance de motifs à switch permet de tester une expression par rapport à un certain nombre de motifs, chacun ayant une action spécifique, de sorte que les requêtes complexes orientées données peuvent être exprimées de manière concise et sûre. Il s'agit d'une fonctionnalité du langage en avant-première. Cette fonctionnalité a déjà été présentée en avant-première dans les JDK 17 et JDK 18.

    Le troisième aperçu ajoutera des raffinements, notamment le remplacement des motifs protégés par des clauses when dans les blocs switch. Les objectifs du plan comprennent l'élargissement de l'expressivité et de l'applicabilité des expressions et instructions switch en permettant aux motifs d'apparaître dans les étiquettes de cas.

    Il s'agit aussi de permettre aux développeurs d'assouplir, s'ils le souhaitent, l'hostilité historique de when à l'égard de null, d'accroître la sécurité des instructions switch et de garantir que les expressions et instructions switch existantes continuent à être compilées sans changement et à s'exécuter avec une sémantique identique.

    JEP 428 : la concurrence structurée

    Cette proposition vise à simplifier la programmation multithread en en introduisant une bibliothèque pour la concurrence structurée (Structured Concurrency). La concurrence structurée traite plusieurs tâches exécutées dans différents threads comme une seule unité de travail, rationalisant ainsi la gestion et l'annulation des erreurs, améliorant la fiabilité et l'observabilité. Il s'agit d'une API en cours d'incubation.

    En effet, d'après l'équipe, les développeurs Java gèrent la complexité en décomposant une tâche en plusieurs sous-tâches. Dans un code ordinaire à un seul thread, les sous-tâches s'exécutent de manière séquentielle. Toutefois, si les sous-tâches sont suffisamment indépendantes les unes des autres et si les ressources matérielles sont suffisantes, il est possible d'accélérer l'exécution de la tâche (latence réduite) en exécutant les sous-tâches simultanément.

    Par exemple, une tâche qui compose les résultats de plusieurs opérations d'E/S s'exécutera plus rapidement si chaque opération d'E/S est exécutée dans son propre thread. Grâce à la disponibilité des threads virtuels, il est rentable de dédier un thread à chaque opération d'entrée/sortie. Cependant, l'équipe rappelle que la concurrence structurée ne vise pas les objectifs suivants :

    • l'objectif de cette JEP n'est pas de remplacer les constructions de concurrence de java.util.concurrent, telles que ExecutorService et Future ;
    • l'objectif de ce JEP n'est pas de fournir une API de concurrence structurée définitive pour Java. D'autres constructions de concurrence structurées peuvent être ajoutées par des bibliothèques tierces ou dans les futures versions du JDK ;
    • l'objectif de ce JEP n'est pas de proposer un mécanisme de partage des flux de données entre les threads ("canaux"). Cette question pourrait être abordée par une future JEP ;
    • l'objectif de ce JEP n'est pas de remplacer le mécanisme d'interruption de thread existant par un nouveau mécanisme d'annulation de thread. Cette question pourrait être traitée par un futur JEP.


    La sortie officielle du JDK 19 pour une utilisation en production est prévue pour le 20 septembre, précédée d'une seconde phase de lancement débutant le 21 juillet, et de la publication des versions candidates (RC) les 11 et 25 août. Les versions d'accès anticipé du JDK 19 sont accessibles sur le site du JDK.

    Source : Java 19

    Et vous ?

    Que pensez-vous des nouvelles fonctionnalités de Java 19 ?

    Voir aussi

    JDK 18, l'implémentation de référence de Java 18, est désormais disponible, elle propose comme Python, Ruby, PHP ou encore Erlang, un mini serveur Web prêt à l'emploi

    La version 2022.1 d'IntelliJ IDEA va prendre en charge les fonctionnalités de Java 18 : un aperçu des mises à jour pour le langage

    Les contrôleurs de conformité d'Oracle incluraient désormais Java dans les audits de licence, les abonnements payants introduits il y a trois ans retiennent désormais l'attention de l'équipe
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    juin 2009
    Messages
    660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2009
    Messages : 660
    Points : 2 152
    Points
    2 152
    Par défaut
    Beaucoup de chose intéressantes, mais je suis toujours collé au JDK 8 au boulot

  3. #3
    Membre à l'essai Avatar de Sachin Bhatt
    Homme Profil pro
    Collégien
    Inscrit en
    juin 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Autre

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : juin 2022
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    Des trucs géniaux. Mais je devrai également faire des recherches détaillées sur les autres fonctionnalités de Java 18.

  4. #4
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    mai 2019
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2019
    Messages : 999
    Points : 20 319
    Points
    20 319
    Par défaut Java 19 : nouvelles fonctionnalités avec exemples, apporte des méthodes pour créer des HashMaps préalloués
    Java 19 : nouvelles fonctionnalités avec exemples, elle apporte des méthodes pour créer des HashMaps préalloués

    Java 19 est dans la phase dite Rampdown Phase One depuis le 9 juin 2022, ce qui signifie qu'aucune autre proposition d'amélioration du JDK (JEP) ne sera incluse dans la version. L'ensemble des fonctionnalités est donc fixé. Seuls les bogues seront corrigés, et, si nécessaire, des améliorations mineures seront apportées. Le kit de développement Java 19, prévu pour septembre prochain, est désormais complet et fait l'objet d'une deuxième phase de lancement.

    Si une application existante est exécutée avec Java 19, il est possible de voir des points d'interrogation sur la console au lieu de caractères spéciaux. Cela est dû au fait que, depuis Java 19, l'encodage par défaut du système d'exploitation est utilisé pour l'impression dans System.out et System.err par exemple, "Cp1252" sous Windows.

    Nom : java.png
Affichages : 105985
Taille : 2,6 Ko

    Pour changer la sortie en UTF-8, vous devez ajouter les options VM suivantes lorsque vous appelez l'application :

    -Dstdout.encoding=utf8 -Dstderr.encoding=utf8

    Si vous ne voulez pas faire cela à chaque fois que vous démarrez le programme, vous pouvez également définir ces paramètres de manière globale en définissant la variable d'environnement suivante :

    _JAVA_OPTIONS="-Dstdout.encoding=utf8 -Dstderr.encoding=utf8"

    Nouvelles méthodes pour créer des HashMaps préalloués

    Si nous voulons créer une ArrayList pour un nombre connu d'éléments (par exemple, 120), nous pouvons le faire comme suit depuis toujours :

    List<String> list = new ArrayList<>(120);

    Ainsi, le tableau sous-jacent à ArrayList est alloué directement pour 120 éléments et ne doit pas être agrandi plusieurs fois (c'est-à-dire nouvellement créé et copié) pour insérer les 120 éléments. De même, nous avons toujours été en mesure de générer un HashMap comme suit :

    Map<String, Integer> map = new HashMap<>(120);

    « Intuitivement, on pourrait penser que cette HashMap offre de l'espace pour 120 mappings. Ce qui n'est pas le cas », précise Sven Woltmann, développeur Java. Le HashMap est initialisé avec un facteur de charge par défaut de 0,75. Cela signifie que dès que le HashMap est rempli à 75 %, il est reconstruit ("rehashed") avec une taille double. Cela permet de s'assurer que les éléments sont répartis aussi uniformément que possible dans les buckets de la HashMap et que le moins de buckets possible contiennent plus d'un élément.

    Ainsi, le HashMap initialisé avec une capacité de 120 ne peut contenir que 120 × 0,75 = 90 mappings. Pour créer un HashMap pour 120 mappings, vous avez dû calculer la capacité en divisant le nombre de mappings par le facteur de charge : 120 ÷ 0,75 = 160. Il fallait donc créer un HashMap pour 120 mappings comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // for 120 mappings: 120 / 0.75 = 160
    Map<String, Integer> map = new HashMap<>(160);

    Java 19 nous facilite la tâche ; nous pouvons maintenant écrire ce qui suit à la place :

    Map<String, Integer> map = HashMap.newHashMap(120);

    Si nous regardons le code source des nouvelles méthodes, nous constatons qu'elles font la même chose que précédemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static <K, V> HashMap<K, V> newHashMap(int numMappings) {
        return new HashMap<>(calculateHashMapCapacity(numMappings));
    }
     
    static final float DEFAULT_LOAD_FACTOR = 0.75f;
     
    static int calculateHashMapCapacity(int numMappings) {
        return (int) Math.ceil(numMappings / (double) DEFAULT_LOAD_FACTOR);
    }

    La méthode newHashMap() a également été ajoutée à LinkedHashMap et WeakHashMap.

    La concurrence structurée, en phase d'incubation, est destinée à simplifier la programmation multithread grâce à une API de concurrence structurée. Cette concurrence traite plusieurs tâches exécutées dans différents threads comme une seule unité de travail, afin de rationaliser la gestion des erreurs et l'annulation. La fiabilité et l'observabilité sont améliorées. Pour ceux qui ont besoin d'accéder à du code non-Java (par exemple, la bibliothèque standard C), il y a aussi de bonnes nouvelles : l'API Foreign Function & Memory a atteint le stade de l'aperçu après cinq cycles d'incubation.

    Si une tâche se compose de différentes sous-tâches qui peuvent être exécutées en parallèle (par exemple, l'accès aux données d'une base de données, l'appel d'une API distante et le chargement d'un fichier), nous pouvions jusqu'à présent utiliser le framework d'exécution Java pour cela. Cela pourrait alors ressembler à ceci, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    private final ExecutorService executor = Executors.newCachedThreadPool();
     
    public Invoice createInvoice(int orderId, int customerId, String language)
        throws ExecutionException, InterruptedException {
      Future<Order> orderFuture =
          executor.submit(() -> loadOrderFromOrderService(orderId));
     
      Future<Customer> customerFuture =
          executor.submit(() -> loadCustomerFromDatabase(customerId));
     
      Future<String> invoiceTemplateFuture =
          executor.submit(() -> loadInvoiceTemplateFromFile(language));
     
      Order order = orderFuture.get();
      Customer customer = customerFuture.get();
      String invoiceTemplate = invoiceTemplateFuture.get();
     
      return Invoice.generate(order, customer, invoiceTemplate);
    }

    En utilisant un StructuredTaskScope, nous pouvons réécrire l'exemple comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Invoice createInvoice(int orderId, int customerId, String language)
        throws ExecutionException, InterruptedException {
      try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
        Future<Order> orderFuture =
            scope.fork(() -> loadOrderFromOrderService(orderId));
     
        Future<Customer> customerFuture =
            scope.fork(() -> loadCustomerFromDatabase(customerId));
     
        Future<String> invoiceTemplateFuture =
            scope.fork(() -> loadInvoiceTemplateFromFile(language));
     
        scope.join();
        scope.throwIfFailed();
     
        Order order = orderFuture.resultNow();
        Customer customer = customerFuture.resultNow();
        String invoiceTemplate = invoiceTemplateFuture.resultNow();
     
        return new Invoice(order, customer, invoiceTemplate);
      }
    }

    ExecutorService est remplacé dans le scope de la classe par un StructuredTaskScope situé dans le scope de la méthode - et [C=Java]executor.submit() par scope.fork(). En utilisant scope.join(), nous attendons que toutes les tâches soient terminées ou qu'au moins une d'entre elles échoue ou soit annulée. Dans ces deux derniers cas, la méthode throwIfFailed() qui suit lance une ExecutionException ou une CancellationException.

    Un aperçu d'une fonction étrangère et d'une API de mémoire, qui introduirait une API par laquelle les programmes Java peuvent interagir avec du code et des données en dehors du runtime Java. En invoquant efficacement des fonctions étrangères (c'est-à-dire du code extérieur à la JVM) et en accédant en toute sécurité à la mémoire étrangère (c'est-à-dire la mémoire non gérée par la JVM), l'API permet aux programmes Java d'appeler des bibliothèques natives et de traiter des données natives sans le danger et la fragilité de l'interface Java Native (JNI).

    L'API de fonction et de mémoire étrangères combine deux API antérieures en incubation : l'API d'accès à la mémoire étrangère et l'API de linker étrangère. L'API de fonction et de mémoire étrangères a été incubée dans le JDK 17 et réincubée dans le JDK 18. Les objectifs de la proposition comprennent la facilité d'utilisation, les performances, la généralité et la sécurité. Voici un exemple simple qui stocke une chaîne de caractères dans la mémoire off-heap et appelle la fonction strlen de la bibliothèque standard du C sur celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class FFMTest {
      public static void main(String[] args) throws Throwable {
        // 1. Get a lookup object for commonly used libraries
        SymbolLookup stdlib = Linker.nativeLinker().defaultLookup();
     
        // 2. Get a handle to the "strlen" function in the C standard library
        MethodHandle strlen = Linker.nativeLinker().downcallHandle(
            stdlib.lookup("strlen").orElseThrow(), 
            FunctionDescriptor.of(JAVA_LONG, ADDRESS));
     
        // 3. Convert Java String to C string and store it in off-heap memory
        MemorySegment str = implicitAllocator().allocateUtf8String("Happy Coding!");
     
        // 4. Invoke the foreign function
        long len = (long) strlen.invoke(str);
     
        System.out.println("len = " + len);
      }
    }

    La FunctionDescriptor de la ligne 9 est intéressant : il attend comme premier paramètre le type de retour de la fonction et comme paramètres supplémentaires les arguments de la fonction. La FunctionDescriptor garantit que tous les types Java sont correctement convertis en types C et vice versa.

    Une Preview des modèles d'enregistrement, pour déconstruire les valeurs d'enregistrement. Les modèles d'enregistrement et les modèles de type peuvent être imbriqués pour permettre une forme déclarative, puissante et composable de navigation et de traitement des données. Les objectifs de la proposition comprennent l'extension du filtrage pour exprimer des requêtes de données plus sophistiquées et composables, sans modifier la syntaxe ou la sémantique des patrons de type. Cette proposition s'appuie sur le filtrage de motifs pour instanceof, livré dans le JDK 16 en mars 2021.

    Les plans futurs peuvent prévoir l'extension des modèles d'enregistrement avec des capacités telles que les modèles de tableaux et les modèles de variables. Les modèles d'enregistrement font partie du projet Amber, un effort visant à explorer et à incuber des fonctionnalités Java plus petites et orientées vers la productivité.

    Source : Java 19

    Et vous ?

    Quel est votre avis sur le sujet ?

    Les exemples présentés par le développeur Sven Woltmann sont-ils pertinents ?

    Voir aussi :

    JDK 19 : les nouvelles fonctionnalités de Java 19 incluent la concurrence structurée, les modèles d'enregistrement et l'aperçu d'une API de fonction et de mémoire étrangères

    JDK 18, l'implémentation de référence de Java 18, est désormais disponible, elle propose comme Python, Ruby, PHP ou encore Erlang, un mini serveur Web prêt à l'emploi

    La version 2022.1 d'IntelliJ IDEA va prendre en charge les fonctionnalités de Java 18 : un aperçu des mises à jour pour le langage

    Les contrôleurs de conformité d'Oracle incluraient désormais Java dans les audits de licence, les abonnements payants introduits il y a trois ans retiennent désormais l'attention de l'équipe
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  5. #5
    Membre expert
    Profil pro
    undef
    Inscrit en
    février 2013
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : février 2013
    Messages : 877
    Points : 3 191
    Points
    3 191
    Par défaut
    C'est quoi cette idée à la con de casser la portabilité en privilégiant l'encodage système sur UTF-8 ?

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 423
    Points : 21 030
    Points
    21 030
    Par défaut
    Citation Envoyé par 23JFK Voir le message
    C'est quoi cette idée à la con de casser la portabilité en privilégiant l'encodage système sur UTF-8 ?
    L'idée c'est que depuis Java 18, on a arrêté d'avoir un "charset par défaut" dans Java qui dépende de la machine sur laquelle on fait tourner le programme.

    Ça fait maintenant un certain temps qu'il est moins souvent utile pour un programme, de s'adapter à la machine en cours, que de simplement faire comme tout le monde et d'utiliser utf-8.

    Du coup, depuis Java 18, le charset par défaut c'est utf-8 et puis c'est tout. Peu importe la machine. On peut en définir un autre avec des options de démarrage, mais si on fait rien contre, désormais le charset par défaut c'est utf-8. Pour la plupart des usages, c'est très bien, ça unifie le comportement de Java quelle que soit la machine sur laquelle on programme, et ça évite d'encourager des bugs.

    Par contre il y a un truc nase, c'est que sous windows, les consoles n'utilisent pas l'encodage utf-8. Or l'encodage pour écrire dans la console, c'était l'encodage par défaut (ce qui ne marchait d'ailleurs pas bien, parce que sous Windows, les consoles n'utilisent pas le même charset que le reste du système. N'empêche, c'était comme ça.) De ce fait, il a été décidé que changer le charset par défaut alors que sur les consoles Windows il y a peu de chances que ce soit le bon, c'était pas top et donc pour le cas précis de System.out et System.err, le charset utilisé reste le même qu'avant Java 18. Un nouveau réglage de charset est inventé, seulement pour System.out et System.err.

    Comme ça si les gens avaient reconfiguré leurs consoles pour afficher les accents des programmes Java, ça continuerait de marcher tout pareil.

    Sauf que :

    - il y en a qui utilisent des consoles "moins communes" qui utilisent bel et bien l'encodage utf-8. Du coup pour ce cas c'était pas une bonne idée d'empêcher l'usage d'utf-8, donc on fournit un moyen de l'utiliser.
    - ceux qui essayaient d'afficher correctement les accents des programmes Java dans la console, ils ne configuraient pas la console. Ils programmaient leur programme Java pour utiliser le charset de la console. Une méthode (assez mauvaise) de faire ça est de démarrer le programme Java avec comme charset par défaut, celui de la console. Ça marchait mais ça change le charset par défaut de tout le programme juste pour gérer la console. Mais donc, depuis Java 18, ce système est cassé puisque System.out et System.err n'utilisent plus le charset par défaut. D'où le besoin d'un réglage qui permette de refaire un truc de ce genre comme avant. Ce ne sera probablement pas utilisé pour faire de l'utf-8, mais autre chose. Peu importe, on a un exemple de comment s'en servir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre expert
    Profil pro
    undef
    Inscrit en
    février 2013
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : février 2013
    Messages : 877
    Points : 3 191
    Points
    3 191
    Par défaut
    Faut quand même vouloir se faire mal pour utiliser System.out dans une console windows.

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    7 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 225
    Points : 9 391
    Points
    9 391
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 23JFK Voir le message
    Faut quand même vouloir se faire mal pour utiliser System.out dans une console windows.
    Non, pas du tout, ça dépend du type de programme qu'on développe.
    Par exemple, j'ai développé une API pour intégrer des fichiers csv / xls(x) / reqûetes SQL etc, la sortie System.out est très utile pour tracer l'activité des processeurs d'intégration, et ça permet au système de planification des travaux de récupérer une log utile en cas de problème.

    Bien sûr, je n'utilise pas ça dans une application web ou dans un EJB métier...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre expert
    Profil pro
    undef
    Inscrit en
    février 2013
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : février 2013
    Messages : 877
    Points : 3 191
    Points
    3 191
    Par défaut
    Nan, mais je voulais dire : Utiliser la console système de windows plutôt qu'une console alternative. Sous Windows j'utilise la console que fournie tcl/tk, elle a/avait l'avantage (peut-être le seul) de ne pas faire mettre des caractères imbitables.

  10. #10
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    mai 2019
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2019
    Messages : 999
    Points : 20 319
    Points
    20 319
    Par défaut Oracle Technologie annonce la sortie de JDK 19 avec des nouvelles propriétés système
    Oracle Technologie annonce la sortie de JDK 19 avec des nouvelles propriétés système
    pour System.out et System.err et la prise en charge d'Unicode 14.0

    Oracle Technologiea annoncé que le JDK 19 était désormais complet, car il a atteint la phase initiale de lancement. Sept fonctionnalités pour cette version, notamment la concurrence structurée, les modèles d'enregistrement, un aperçu d'une fonction étrangère et d'une API de mémoire, ainsi que la prise en charge de l'architecture de jeu d'instructions (ISA) Linux/RISC-V. Java 19 sera disponible en septembre 2022.


    Conformément au calendrier de sortie du JDK 19, Mark Reinhold, architecte en chef du groupe Java Platform d'Oracle, a annoncé que les ajouts à la prochaine version du kit de développement sont terminés. Pour rappel, une nouvelle version standard de Java est publiée tous les six mois. Avec cette dernière étape dans le processus de publication de la version standard de Java, les autres fonctionnalités prévues, telles que les génériques universels et les objets de valeur, devront attendre une version ultérieure de la plateforme. Les nouvelles fonctionnalités du JDK 19 comprennent :

    Schémas de signature

    security-libs/javax.net.ssl

    De nouvelles API Java SE, javax.net.ssl.getSignatureSchemes() et javax.net.ssl.setSignatureSchemes(), ont été ajoutées pour permettre aux applications de personnaliser les schémas de signature utilisés dans les connexions TLS ou DTLS individuelles. Le fournisseur sous-jacent peut définir les schémas de signature par défaut pour chaque connexion TLS ou DTLS.

    Nom : jdkB.png
Affichages : 5110
Taille : 39,6 Ko

    Les applications peuvent également utiliser les propriétés système existantes jdk.tls.client.SignatureSchemes et/ou jdk.tls.server.SignatureSchemes pour personnaliser les schémas de signature par défaut spécifiques au fournisseur. S'ils ne sont pas nuls, les schémas de signature transmis à la méthode setSignatureSchemes() remplaceront les schémas de signature par défaut pour les connexions TLS ou DTLS spécifiées.

    Un fournisseur peut ne pas avoir été mis à jour pour prendre en charge les nouvelles API et dans ce cas, il peut ignorer les schémas de signature définis. Le fournisseur JDK SunJSSE prend en charge cette méthode. Il est recommandé aux fournisseurs tiers d'ajouter la prise en charge de ces méthodes lorsqu'ils ajoutent la prise en charge du JDK 19 ou des versions ultérieures.

    Nouvelles propriétés système pour System.out et System.err

    core-libs/java.lang

    Deux nouvelles propriétés système, stdout.encoding et stderr.encoding, ont été ajoutées. La valeur de ces propriétés système est l'encodage utilisé par les flux de sortie standard et d'erreur standard (System.out et System.err). Les valeurs par défaut de ces propriétés système dépendent de la plateforme. Les valeurs prennent la valeur de la propriété native.encoding lorsque la plate-forme ne fournit pas de flux pour la console. Les propriétés peuvent être remplacées par l'option de ligne de commande du lanceur (avec -D) pour les définir en UTF-8 lorsque cela est nécessaire.

    Prise en charge d'Unicode 14.0

    core-libs/java.lang

    Cette version met à jour la prise en charge d'Unicode à 14.0, ce qui inclut les éléments suivants : la classe java.lang.Character prend en charge la base de données de caractères Unicode du niveau 14.0, ce qui ajoute 838 caractères, pour un total de 144 697 caractères. Ces ajouts incluent 5 nouveaux scripts, pour un total de 159 scripts, ainsi que 37 nouveaux caractères emoji. Les classes java.text.Bidi et java.text.Normalizer prennent en charge le niveau 14.0 des annexes standard Unicode, respectivement #9 et #15. Le paquet java.util.regex prend en charge les grappes de graphèmes étendues basées sur le niveau 14.0 de l'annexe standard Unicode #29. Pour plus de détails sur Unicode 14.0, reportez-vous à la note de publication du Consortium Unicode.

    Prise en charge de la liaison de canal HTTPS pour Java GSS/Kerberos

    core-libs/java.net

    La prise en charge des jetons de liaison de canal TLS pour l'authentification Negotiate/Kerberos sur HTTPS a été ajoutée via javax.net.HttpsURLConnection. Les jetons de liaison de canal sont de plus en plus nécessaires comme forme de sécurité renforcée. Ils fonctionnent en communiquant d'un client à un serveur la compréhension par le client de la liaison entre la sécurité de la connexion, représentée par un certificat de serveur TLS, et les informations d'authentification de niveau supérieur, telles qu'un nom d'utilisateur et un mot de passe. Le serveur peut alors détecter si le client a été trompé par un MITM et interrompre la session ou la connexion. Cette fonctionnalité est contrôlée par une nouvelle propriété système jdk.https.negotiate.cbt qui est décrite en détail dans Propriétés de mise en réseau.

    Formats de date et d'heure supplémentaires

    core-libs/java.time

    Des formats de date/heure supplémentaires sont maintenant introduits dans les classes java.time.format.DateTimeFormatter/DateTimeFormatterBuilder. Dans les versions précédentes, seuls 4 styles prédéfinis, à savoir FormatStyle.FULL/LONG/MEDIUM/SHORT, étaient disponibles.

    Maintenant, les utilisateurs peuvent spécifier leur propre style flexible avec la nouvelle méthode DateTimeFormatter.ofLocalizedPattern(String requestedTemplate). Par exemple, DateTimeFormatter.ofLocalizedPattern("yMMM") produit un formateur capable de formater une date d'une manière localisée, comme "Feb 2022" dans la locale américaine ou "2022年2月" dans la locale japonaise. La méthode DateTimeFormatterBuilder.appendLocalized(String requestedTemplate) est également fournie.

    Support de la protection PAC-RET sur Linux/AArch64

    hotspot/compilateur

    Le support de la protection PAC-RET sur la plateforme Linux/AArch64 a été introduit. Lorsqu'il est activé, OpenJDK utilisera les caractéristiques matérielles de l'extension PAC (Pointer Authentication Code) ARMv8.3 pour se protéger contre les attaques ROP (Return Orientated Programming). Pour plus d'informations sur l'extension PAC, voir "Providing protection for complex software" ou « la section Pointer authentication in AArch64 state » dans le ARM Arm.

    Pour profiter de cette fonctionnalité, OpenJDK doit d'abord être construit avec l'option de configuration --enable-branch-protection en utilisant GCC 9.1.0+ ou LLVM 10+ . Ensuite, l'indicateur d'exécution -XX:UseBranchProtection=standard activera la protection PAC-RET si le système la prend en charge et si le binaire Java a été compilé avec la protection des branches activée ; sinon l'indicateur est ignoré en silence. Alternativement, -XX:UseBranchProtection=pac-ret activera également la protection PAC-RET, mais dans ce cas, si le système ne la prend pas en charge ou si le binaire java n'a pas été compilé avec la protection des branches activée, un avertissement sera imprimé.

    Prise en charge de l'architecture de jeu d'instructions Linux/RISC-V

    RISC-V est une architecture de jeu d'instructions (ISA) RISC libre et open source, conçue à l'origine à l'Université de Californie, Berkeley, et maintenant développée en collaboration sous le parrainage de RISC-V International. Elle est déjà prise en charge par un large éventail de chaînes d'outils de langage. Selon l'équipe du JDK, avec la disponibilité croissante du matériel RISC-V, un portage du JDK serait précieux. Avec le portage Linux/RISC-V, Java obtiendrait la prise en charge d'un jeu d'instructions matérielles qui est déjà pris en charge par un large éventail de chaînes d'outils de langage.

    RISC-V est en fait une famille d'ISA connexes. Le portage Linux/RISC-V ne prendrait en charge que la configuration RV64GV de RISC-V, un ISA 64 bits à usage général qui inclut des instructions vectorielles. Les développeurs de Java pourraient envisager d'autres configurations RISC-V à l'avenir.

    Génération automatique de l'archive CDS

    hotspot/runtime

    L'option JVM -XX:+AutoCreateSharedArchive peut être utilisée pour créer ou mettre à jour automatiquement une archive CDS pour une application. Par exemple : java -XX:+AutoCreateSharedArchive -XX:SharedArchiveFile=app.jsa -cp app.jar App L'archive spécifiée sera écrite si elle n'existe pas, ou si elle a été générée par une version différente du JDK. Dans une interview accordée à The Register, Georges Saab, SVP d'Oracle chargé du développement de la plate-forme Java et président du conseil d'administration d'OpenJDK, a déclaré qu'il s'agissait de la dixième version réalisée dans le cadre du cycle de publication de six mois.

    « Toutes ces versions sont sorties à la date et à l'heure prévues », a déclaré Saab. « Il n'y a eu aucun retard depuis que nous sommes passés à ce modèle, ce qui, comme vous le savez probablement, n'était pas toujours le cas avec le modèle précédent que nous avions. » Saab a déclaré que le résultat est de pouvoir mettre l'innovation entre les mains des développeurs plus rapidement que ce qui était possible pendant les cycles de publication pluriannuels.

    « Par le passé, ils devaient souvent attendre assez longtemps pour obtenir des nouveautés en Java, puis ils en recevaient trop, d'un seul coup », a-t-il expliqué. « Nous sommes conscients que tout le monde n'a pas envie de tout rebaser tous les six mois », a ajouté Saab. « C'est pourquoi nous avons proposé un abonnement à Java SE pour un support à long terme, afin de permettre aux entreprises qui le souhaitent de rester sur une seule version et de recevoir des mises à jour tous les trimestres, pour assurer leur sécurité.

    Le cycle de publication accéléré de Java ne signifie pas nécessairement que les nouvelles fonctionnalités apparaissent soudainement. Elles font souvent surface en tant que technologies de prévisualisation, afin de susciter des réactions de la communauté et des ajustements dans les versions suivantes. « Nous n'avons pas trouvé un moyen magique de faire trois ou quatre ans de travail en six mois », a expliqué Saab. Ainsi, le processus de développement de Java est devenu itératif et participatif, même s'il permet aux membres de la communauté d'attendre la sortie des versions pour que les fonctionnalités mûrissent.

    Les améliorations sur lesquelles se concentre la communauté Java ont été organisées autour de thèmes spécifiques. « À titre d'exemple », explique Saab, « le projet Amber vise à améliorer le langage et la syntaxe Java, afin de les rendre plus modernes, plus succincts, plus faciles à utiliser et, surtout, plus faciles à lire et à comprendre. Leyden vise à améliorer le temps de démarrage et le temps de chauffe. Loom porte sur l'évolutivité et fait passer l'évolutivité de Java au niveau supérieur. »

    Dans Java 19, ces projets thématiques sont exprimés dans diverses propositions d'amélioration de Java, ou JEP.

    Source : Java

    Et vous ?

    Quel est votre avis sur le sujet ?

    Voir aussi :

    JDK 18, l'implémentation de référence de Java 18, est désormais disponible, elle propose comme Python, Ruby, PHP ou encore Erlang, un mini serveur Web prêt à l'emploi

    JDK 19 : les nouvelles fonctionnalités de Java 19 incluent la concurrence structurée, les modèles d'enregistrement et l'aperçu d'une API de fonction et de mémoire étrangères
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/08/2021, 18h13
  2. JDK 14 : un aperçu des nouvelles fonctionnalités de Java 14
    Par Bill Fassinou dans le forum Général Java
    Réponses: 1
    Dernier message: 30/10/2019, 07h11
  3. les nouvelles fonctionnalités dans office2007
    Par sky88 dans le forum Microsoft Office
    Réponses: 2
    Dernier message: 13/05/2009, 16h54
  4. RAD Delphi 2009 : les nouvelles fonctionnalités
    Par colfire_dev dans le forum EDI
    Réponses: 5
    Dernier message: 21/11/2008, 16h13
  5. Les hebergeur bloquent t'ils les nouvelles fonctionnalité de Mysql5 ?
    Par berceker united dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 07/09/2007, 10h24

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