IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

10PARTAGES

14  0 
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.

https://youtu.be/fjvGzBFmyhM

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é

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de foxzoolm
Membre régulier https://www.developpez.com
Le 25/03/2023 à 11:25

List<Point> points=....
for ( Point(int x, int y): points ){
...
}
la question est : le sucre syntaxique fit-il grossir ?

perso je trouve se genre d'annotation extrêmement dangereuse...
le principe de la POO (selon moi) etant de garder les methodes et les datas le plus proche possible (syntaxiquement)...

voir des x, y se balander dans le code sans lien avec l'objet... SIC!!!
4  0 
Avatar de thelvin
Modérateur https://www.developpez.com
Le 25/03/2023 à 17:27
Citation Envoyé par professeur shadoko Voir le message
Si mes souvenirs sont bons parmi les principes avancés à l'intérieur de l'équipe initiale Java il y avait: méfions nous des "facilités d'écriture"! au risque d'être bavards pas d'implicites, pas de raccourcis! ça fait déjà un bout de temps que ces principes sont partis à la poubelle.
Oui ben ça nous a filé les lambdas et le instanceof pattern.
Le moins que l'on puisse dire est que mettre ces principes à la poubelle a été, jusqu'à maintenant, très bénéfique.
4  0 
Avatar de Padget
Membre régulier https://www.developpez.com
Le 22/03/2023 à 22:18
Je trouve que sur ce genre d'annonces d'Oracle il manque toujours des exemples de code pour illustrer les propos. Parce que j'ai personnellement rien compris au blabla sur la preversion 2 des records...
3  0 
Avatar de miaous
Membre averti https://www.developpez.com
Le 23/03/2023 à 10:24
Citation Envoyé par Padget Voir le message
Je trouve que sur ce genre d'articles il manque toujours des exemples de code pour illustrer les propos. Parce que j'ai personnellement rien compris au blabla sur la preversion 2 des records...
avec JEP 432 : Record Patterns (deuxième préversion) pour un record Point (int x, int y)
tu pourras ecrire
Code : Sélectionner tout
1
2
3
4
5
6
List<Point> points=....
for ( Point(int x, int y): points ){
System.out.println(" " +x ", " +y );

}
équivalent à:

Code : Sélectionner tout
1
2
3
4
5
6
7
8
List<Point> points=....
for ( Point p: points ){
int x=p.x();
int y=p.y();
System.out.println(" " +x ", " +y );

}
0  0 
Avatar de professeur shadoko
Membre chevronné https://www.developpez.com
Le 25/03/2023 à 9:04
Citation Envoyé par miaous Voir le message
avec JEP 432 : Record Patterns (deuxième préversion) pour un record Point (int x, int y)
tu pourras ecrire
Code : Sélectionner tout
1
2
3
4
5
6
List<Point> points=....
for ( Point(int x, int y): points ){
System.out.println(" " +x ", " +y );

}
équivalent à:

Code : Sélectionner tout
1
2
3
4
5
6
7
8
List<Point> points=....
for ( Point p: points ){
int x=p.x();
int y=p.y();
System.out.println(" " +x ", " +y );

}
Si mes souvenirs sont bons parmi les principes avancés à l'intérieur de l'équipe initiale Java il y avait: méfions nous des "facilités d'écriture"! au risque d'être bavards pas d'implicites, pas de raccourcis! ça fait déjà un bout de temps que ces principes sont partis à la poubelle.
0  0 
Avatar de professeur shadoko
Membre chevronné https://www.developpez.com
Le 26/03/2023 à 17:15
Citation Envoyé par thelvin Voir le message
Oui ben ça nous a filé les lambdas et le instanceof pattern.
Le moins que l'on puisse dire est que mettre ces principes à la poubelle a été, jusqu'à maintenant, très bénéfique.
pas de pb pour le instanceof mais pour le cas de lambda mes sentiments sont très partagés: c'est pratique mais une source d'effets de bord pas très explicites. Je rêve d'une forme syntaxique dans laquelle ce qui est modifiable dans le contexte soit bien spécifié (au risque d'être horriblement bavard).
0  0 
Avatar de bouye
Rédacteur/Modérateur https://www.developpez.com
Le 27/03/2023 à 5:37
C'est une question d'habitude a prendre, on a le même soucis avec les accesseurs des champs des record qui laissent tomber le prefix get (is pour les boolean) et se contentent de reprendre le nom de la variable a l'identique.
0  0 
Avatar de floyer
Membre averti https://www.developpez.com
Le 27/03/2023 à 16:16
Les lambda peuvent être très utile dans une approche fonctionnelle. On a une collection, et on déduit une autre collection avec map ou filter. Une approche «*purement fonctionnelle*» évite justement des effets de bord. Évidemment la fonction lambda peut avoir un effet de bord en interagissant avec les objets qui lui sont proposés, mais pas plus qu’un bloc équivalent dans une boucle for.
0  0