
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.
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...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.