De nouvelles fonctionnalités

Oracle a annoncé 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 s’est déroulé du 20 au 23 mars à Redwood Shores, en Californie, et en ligne.

Le JDK 20 offre de nombreuses 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.
La nouvelle version du Java Development Kit (JDK) propose des mises à jour et des améliorations ainsi que sept JDK Enhancement Proposals (JEP).

La plupart des mises à jour sont des fonctionnalités de suivi qui améliorent les fonctionnalités introduites dans les versions antérieures.

Regardons de plus près les spécificités de ces 7 fonctionnalités, qui sont au stade d’incubation ou de preview :

Fonctionnalités d’aperçu du projet Panama

1. JEP 438 : API de vecteur (cinquième incubation) / Vector API

L’API vectorielle permet d’exprimer des 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 processeur prises en charge. Cela permettrait d’obtenir des performances supérieures aux calculs scalaires équivalents. Cette API a déjà été incubée dans les quatre précédentes versions de Java.

Fonctionnalités d’aperçu du projet Panama

2. JEP 434: API de mémoire et de fonctions étrangères (second aperçu) / Foreign Function and Memory API

Cette API permet aux programmes d’interagir avec du code et des données en dehors de l’environnement d’exécution Java. L’API permet aux programmes d’appeler des bibliothèques natives et de traiter des données natives sans la fragilité et le danger de JNI (Java Native Interface). Elle était auparavant incubée dans les versions 17 et 18 du JDK et en preview dans JDK 19. Les améliorations ajoutées depuis le JDK 19 incluent l’unification des abstractions MemorySegment et MemoryAddress,une hiérarchie MemoryLayout améliorée et la division de MemorySession en Arena et SegmentScope pour simplifier le partage des segments au-delà des limites de maintenance.

Aperçu du projet Loom/fonctionnalités en incubation

3. JEP 429 : Valeurs ciblées (incubation) / Scoped Values

Il s’agit d’une API en phase d’incubation permettant le partage de données immuables au sein d’un même thread et entre plusieurs. Celles-ci sont préférées aux variables locales de thread, en particulier lors de l’utilisation d’un grand nombre de threads virtuels. Une scoped value permet aux données d’être partagées efficacement et en toute sécurité entre les composants d’un programme sans recourir à des arguments de méthode. L’objectif est de faciliter l’utilisation, la compréhensibilité, la robustesse et la performance.

4. JEP 436 : Virtual Threads

Les threads virtuels sont des threads légers qui réduisent l’effort d’écriture, de maintenance et d’observation des applications simultanées à haut débit. Les modifications mineures depuis la première preview du JDK 19 incluent un petit nombre de modifications de l’API (rendues permanentes dans le JDK 19).

5. JEP 437 : Structured Concurrency

API permettant de faciliter la programmation multithread et le traitement de 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 son incubation dans JDK 19 est que StructuredTaskScope a été mis à jour pour prendre en charge l’héritage des Scoped Values par les threads créés dans une portée de tâche.

Mises à jour et améliorations du langage

6. JEP 432 : Modèles d’enregistrement (deuxième aperçu) / Record Patterns

Les Record Patterns, ou motifs d’enregistrement, ont pour rôle de déconstruire les record values afin de simplifier le langage Java. Les record patterns et les type patterns peuvent être imbriqués pour permettre une forme déclarative, puissante et composable de navigation et de traitement des données. Les record patterns étendent le pattern matching pour exprimer des requêtes de données plus sophistiquées et composables et ne pas modifier la syntaxe ou la sémantique des type patterns. Les principaux changements depuis JDK 19 incluent l’ajout de la prise en charge de l’inférence des arguments de type des record patterns génériques, la prise en charge des record patterns à apparaître dans l’en-tête d’une instruction « for » améliorée et la suppression du support des named record patterns.

7. JEP 433 : Pattern Matching, les expressions et déclarations Switch

Permet l’expression concise et sûre de requêtes orientées données complexes. Cette quatrième préversion assure une coévolution avec Record Patterns, permettant des améliorations continues basées sur l’expérience et les commentaires. Les principales modifications apportées au pattern matching pour Switch depuis la troisième préversion sont :

  • Une grammaire simplifiée pour les étiquettes de Switch.
  • La prise en charge de l’inférence d’arguments de type pour les generic patterns et les record patterns dans les instructions et expressions Switch.
  • Un switch sur une classe « Enum » lève désormais MatchException plutôt que IncompatibleClassChangeError si aucune étiquette de Switch ne s’applique au moment de l’exécution.

Conclusion

DK 20 est une feature release à court terme avec un support de premier niveau d’Oracle de seulement 6 mois. Elle assure une continuité des travaux commencés dans les précédentes releases Java dans l’attente du JDK 21 qui sera une version LTS (Long Term Support) comprenant plusieurs années de support Oracle et étant plus intéressante pour les développeurs. JDK 21 est prévu pour septembre 2023.

Java JDK 20
enfin disponible

Rédigé par Hedi Bhar,
consultant Java

Sources

Ne manquez pas
nos actualités

Partager