Oracle a annoncé mardi la disponibilité générale de Java 20 (ou JDK 20) à l'occasion de la deuxième journée de son événement "DevLive Level Up" qui se déroule du 20 au 23 mars à Redwood Shores, en Californie, et en ligne. Le JDK 20 offre des milliers d'améliorations en matière de performances, de stabilité et de sécurité, y compris des améliorations de plateforme qui aideront les développeurs à améliorer leur productivité et à stimuler l'innovation. Cette nouvelle mouture du JDK 20 propose également des versions d'incubation ou de prévisualisation de sept nouvelles fonctionnalités, dont les threads virtuels et la concurrence structurée.
Le JDK 20, qui est une version à court terme soutenue pendant six mois, fait suite au lancement du JDK 19 le 20 septembre dernier. Le JDK 21, prévu pour septembre, sera une version de support à long terme (LTS), soutenue par plusieurs années de support. « Depuis plus de 25 ans, Java permet aux développeurs de concevoir et de réaliser la prochaine génération d'applications robustes, évolutives et sécurisées », a déclaré Georges Saab, vice-président senior du développement de la plateforme Java et président du conseil d'administration de l'OpenJDK, Oracle. Selon l'index TIOBE, Java est le troisième langage de programmation le plus utilisé au monde.
Java 20 a été développé grâce à un effort de collaboration entre les ingénieurs d'Oracle et les membres de la communauté mondiale des développeurs Java, facilité par OpenJDK et le Java Community Process (JCP). Selon Oracle, les fonctionnalités du JDK 20 sont en passe d'être normalisées. Parmi les fonctionnalités qui n'ont pas été intégrées au JDK 20, mais qui sont toujours à l'étude pour Java, citons les génériques universels, les modèles de chaînes, les collections séquencées et une API VM asynchrone de suivi de pile. Bien que Java lui-même soit open source, Oracle propose des versions commerciales à utiliser à la fois sur site et dans son cloud.
Le JDK 20 ajoute sept propositions d'amélioration qui promettent de révolutionner le langage. Selon l'équipe du JDK, ces elles sont issue du du projet OpenJDK Amber (Record Patterns et Pattern Matching for Switch) ; des améliorations issues du projet OpenJDK Panama pour interconnecter la machine virtuelle Java (JVM) et le code natif (Foreign Function & Memory API et Vector API). Les fonctionnalités de l'Irs sont liées au projet Loom (Scoped Values, Virtual Threads et Structured Concurrency), qui rationalisera considérablement le processus d'écriture, de maintenance et d'observation des applications concurrentes à haut débit. Voici de quoi il s'agit :
Mises à jour et améliorations du langage
JEP 432 : Record Patterns (deuxième préversion)
Record Patterns (motifs d'enregistrement) est une proposition qui améliore le langage Java en permettant aux utilisateurs d'imbriquer des modèles d'enregistrement et des modèles de type pour créer une forme puissante, déclarative et composable de navigation et de traitement des données. Cela permet d'augmenter la productivité des développeurs en leur permettant d'étendre la correspondance des motifs afin d'obtenir des requêtes de données plus sophistiquées et composables. Les objectifs sont d'étendre le filtrage pour exprimer des requêtes de données plus sophistiquées et composables, sans modifier la syntaxe ou la sémantique des motifs de type.
Les principales modifications apportées depuis le premier aperçu dans le JDK 19 sont les suivantes : ajout de la prise en charge de l'inférence des arguments de type des motifs d'enregistrement génériques, prise en charge des motifs d'enregistrement apparaissant dans l'en-tête d'une instruction for améliorée, et suppression de la prise en charge des motifs d'enregistrement nommés.
JEP 433 : correspondance de motifs pour Switch (quatrième aperçu)
En étendant la c de motifs à switch, une expression peut être testée par rapport à un certain nombre de motifs - chacun avec une action spécifique - de sorte que des requêtes complexes orientées données peuvent être exprimées de manière concise et sûre. L'extension de l'expressivité et de l'applicabilité des expressions et des instructions switch permet d'accroître la productivité des développeurs. Prévue dans le JDK 17, le JDK 18 et le JDK 19, cette quatrième prévisualisation permettra de poursuivre la coévolution avec les motifs d'enregistrement, ce qui permettra d'apporter des améliorations continues sur la base du retour d'information.
Les principaux changements apportés à la correspondance des motifs pour switch depuis la troisième préversion comprennent une grammaire simplifiée pour les étiquettes switch et la prise en charge de l'inférence des arguments de type pour les motifs génériques et les motifs d'enregistrement dans les déclarations et les expressions switch. De plus, un switch exhaustif sur une classe enum lève désormais MatchException au lieu de IncompatibleClassChangeError si aucune étiquette de switch ne s'applique au moment de l'exécution.
Fonctionnalités en incubation et en prévisualisation du projet Loom
JEP 429 : Scoped Values (incubation)
Selon l'équipe du projet Loom, cette proposition d'amélioration du langage est une API en phase d'incubation qui permet le partage de données immuables à l'intérieur et entre les threads, ce qui est préférable aux variables locales - en particulier lors de l'utilisation d'un grand nombre de threads virtuels. Une valeur scopée permet de partager des données de manière sûre et efficace entre les composants d'un grand programme sans avoir recours à des arguments de méthode. Les objectifs sont la facilité d'utilisation, la compréhensibilité, la robustesse et la performance.
JEP 436 : les threads virtuels (deuxième aperçu)
Cette proposition permet de rationaliser considérablement le processus d'écriture, de maintenance et d'observation des applications concurrentes à haut débit en introduisant des threads virtuels légers dans la plateforme Java. En permettant aux développeurs de dépanner, de déboguer et de profiler facilement les applications concurrentes avec les outils et techniques JDK existants, les threads virtuels contribuent à accélérer le développement d'applications.
Selon Oracle, cette capacité changera fondamentalement la façon dont les applications Java sont mises à l'échelle. Les modifications mineures apportées depuis le premier aperçu dans le JDK 19 comprennent un petit nombre de modifications de l'API (rendues permanentes dans le JDK 19) et des dégradations de ThreadGroup (également rendues permanentes dans le JDK 19).
JEP 437 : la concurrence structurée (deuxième incubation)
Cette proposition comporte une API qui simplifie la programmation multithread en traitant plusieurs tâches exécutées dans différents threads comme une seule unité de travail. La gestion et l'annulation des erreurs sont rationalisées, ce qui améliore la fiabilité et l'observabilité. Le seul changement depuis l'incubation dans le JDK 19 est que StructuredTaskScope a été mis à jour pour prendre en charge l'héritage des valeurs scopées par les threads créés dans une portée de tâche. Cette fonctionnalité est en cours de réincubation.
Aperçu des fonctionnalités du projet Panama
JEP 434 : la fonction étrangère et l'API de mémoire (deuxième aperçu)
La fonction étrangère et l'API de mémoire permettent aux programmes Java d'interagir avec le code et les données en dehors du temps d'exécution Java. En invoquant efficacement des fonctions étrangères (c'est-à-dire du code extérieur à la machine virtuelle Java [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), cette fonctionnalité permet aux programmes Java d'appeler des bibliothèques natives et de traiter des données natives sans avoir recours à l'interface native Java. La facilité d'utilisation, les performances et la sécurité s'en trouvent accrues.
L'API permet aux programmes Java d'appeler des bibliothèques natives et de traiter des données natives sans la fragilité et le danger de JNI (Java Native Interface). L'API a été incubée dans les versions 17 et 18 du JDK et présentée en avant-première dans le JDK 19. Les améliorations apportées depuis le JDK 19 comprennent l'unification des abstractions MemorySegment et MemoryAddress, une hiérarchie MemoryLayout améliorée et la division de MemorySession en Arena et SegmentScope pour promouvoir le partage des segments à travers les limites de la maintenance.
JEP 438 : API vectorielle (cinquième incubation)
L'API vectorielle, une proposition qui n'a été officiellement ajoutée qu'il y a quelques semaines, introduirait une API pour exprimer les calculs vectoriels qui se compilent de manière fiable au moment de l'exécution en tant qu'instructions vectorielles optimales sur les architectures de CPU prises en charge. Cela permettrait d'obtenir des performances supérieures à celles des calculs scalaires équivalents. L'API vectorielle a été incubée dans les JDK 16, JDK 17, JDK 18 et JDK 19.
Sources : Java 20, Oracle
Et vous ?
Que pensez-vous des nouvelles fonctionnalités de Java 20 ?
Voir aussi
Le langage de programmation Rust gagne en popularité parmi les développeurs et fait son entrée dans le top 20, selon Tiobe. Python, Java, C et C++ s'accaparent à eux seuls de 55% de parts de marché
JDK 20 : la prochaine version de Java embarque six fonctionnalités phares parmi lesquelles Scoped Values, une API qui permet de partager des données immuables au sein d'un même thread
C++ est sacré langage de programmation de 2022 sur l'indice TIOBE. En termes de popularité, sur l'année écoulée, il est suivi respectivement par C et Python
Augmentation de la popularité de C#, selon l'indice Tiobe qui lui a observé une croissance de près de 2% au cours des 12 derniers mois, tandis que C a perdu pratiquement autant en popularité
Oracle publie Java 20 avec des fonctionnalités en incubation et en prévisualisation, dont les threads virtuels et la concurrence structurée,
Ainsi que des améliorations en matière de performances
Oracle publie Java 20 avec des fonctionnalités en incubation et en prévisualisation, dont les threads virtuels et la concurrence structurée,
Ainsi que des améliorations en matière de performances
Le , par Bill Fassinou
Une erreur dans cette actualité ? Signalez-nous-la !