Java 13 : quoi de neuf ?
Maintenant que Java 13 est features complete (Release Candidate au jour d’écriture de l’article), c’est le moment de faire le tour des fonctionnalités qu’apporte cette nouvelle version, à nous, les développeurs.
Cet article fait partie d’une suite d’article sur les nouveautés des dernières version de Java, pour ceux qui voudraient les lires en voici les liens : Java 12, Java 11, Java 10, et Java 9.
Et encore une fois, force est de constater qu’il n’y a vraiment pas beaucoup de nouveauté dans cette release. A part les nouveaux Text Block qui font suite aux Raw Strings, il y a très peu de modification dans le JDK.
JEP-355: Text Blocks (Preview)
C’est la grande nouveauté de la version 13 de Java, la possibilité d’écrire des Text Blocks : un nouveau type de String Literal qui permet de les écrire sur plusieurs lignes.
Les Text Blocks n’apportent pas énormément de nouvelles fonctionnalités (ce ne sont pas des raw string, il n’y a pas d’interpolation de chaîne ou autre), ils permettent juste d’écrire des strings sur plusieurs lignes, et gèrent automatiquement l’indentation pour nous. Au lieu d’utiliser un seul caractère d’échappement ils en utilisent une séquence : """
System.out.println(""" Hello, multiline text blocks!""")
En parlant d’indentation, c’est bien ce qui est le plus spécifique dans cette nouvelle fonctionnalité ; un algorithme un peu complexe a été implémenté pour conserver l’indentation telle que le développeur avait l’intention de la définir. Concrètement, l’indentation est faite en supprimant l’indentation avant la première lettre (donc ici on supprime l’indentation avant le H de Hello), c’est ce qu’on appelle l’indentation accidentelle.
Les règles principales des Text Blocks sont:
- Commence pas
"""
et un retour à la ligne. - Suppression de l’indentation accidentelle et du premier retour à la ligne.
- Conservation du reste de l’indentation.
- Termine par
"""
sans retour à la ligne préalable. S’il y en a un il sera ajouté à la fin de la string ! - S’il y a un retour à la ligne en fin de Text Block, sa position définira l’indentation accidentelle à la place de la première lettre du Text Block.
- On peut utiliser une double-quote à l’intérieur d’un Text Block
Pour l’implémentation des Text Blocks, des nouvelles méthodes ont été ajoutées à la classe String. Mais comme la fonctionnalité est une preview feature, il faut l’activer via --enable-preview
pour pouvoir les utiliser : JDK-8203444 – String::formatted, JDK-8223775 – String::stripIndent et JDK-8223781 – String::translateEscapes.
Plus d’info : https://openjdk.java.net/jeps/355 et dans l’article très complet de Nicolai Parlog sur le sujet: https://blog.codefx.org/java/text-blocks/
Vous pouvez aussi lire le Programmer’s Guide To Text Blocks par Jim Laskey et Stuart Marks : http://cr.openjdk.java.net/~jlaskey/Strings/TextBlocksGuide_v8.html
JEP 354 – Switch Expressions (Preview)
Hélas, les Switch Expressions restent en preview! Une petite modification à leur implémentation, un nouveau mot clé yield
a été ajouté pour retourner l’élément depuis une branche du switch. Auparavant on utilisait break "value"
maintenant on doit utiliser yield "value";
.
L’idée étant de pouvoir réutiliser ce nouveau mot clé plus tard (par exemple pour des if expression ?).
Plus d’info dans la JEP : https://openjdk.java.net/jeps/354
Shenandoah:
Beaucoup de nouveautés côté Shenandoah, le nouveau GC implémenté par Red Hat et intégré à OpenJDK.
Les principales sont le support des JVM 32 bits et l’élimination du forwarding pointer word qui permet de réduire l’empreinte mémoire de Shenandoah via l’ajout de load reference barriers.
Plus d’info via cette série de 3 posts sur le blog de Red Hat : https://developers.redhat.com/blog/?p=602377
Autre
Via la JEP 353: Reimplement the Legacy Socket API, les API java.net.Socket
et java.net.ServerSocket
ont été totalement ré-écrite. Leur implémentation dataient de JDK 1.0, et les travaux en cours pour l’implémentation des user-mode threads, a.k.a. fibers, dans le cadre du Project Loom nécessitaient quelques adaptations.
Il y a eu aussi pas mal nouveauté côté sécurité: https://seanjmullan.org/blog/2019/08/05/jdk13