Ce qui m’a vraiment frappé cette année à Devoxx, c’est le réel engouement des personnes présentes pour Java 8. Je ne me rappelle pas que cet enthousiasme ait été aussi palpable pour aucune des sorties précédentes de Java. Toutes les conférences sur Java SE 8 ont été un succès, la conférence « Ask the experts » s’est déroulée devant une salle comble, et la communication de Brian Goetz sur le futur de Java également. Manifestement les développeurs Java veulent en connaître plus sur Java 8, veulent comprendre les nouveaux patterns amenés par les lambdas et l’API Stream, et veulent aussi en savoir plus sur ce qui nous attend pour les prochaines années.
Et effectivement, Java 9 commence a pointer le bout de son nez, nous avons déjà des préversions disponibles, avec des choses nouvelles déjà implémentées.
Java 8
J’ai eu la chance de pouvoir donner deux conférences cette année. La première, une université de 3 heures sur l’API Stream et les Collectors, montre comment l’on peut utiliser ces API pour résoudre des problèmes classiques de façon très élégante. La seconde, d’une heure, avait pour but de montrer les nouvelles choses de Java 8, mais sans parler des lambdas, ni des streams, ni des collectors, ni de JavaFX, ni de Nashorn. Donc : qu’y a-t-il de nouveau dans Java 8, une fois que l’on a retiré tout ce qui est nouveau, précisément. Cela peut ressembler à une blague, et d’une certaine façon s’en est une, mais en fait, ce qu’il reste est plus que suffisant pour parler une heure.
Voici la liste des communications qui ont traité spécifiquement de Java 8, et qui seront disponibles dans quelques semaines sur Parleys.
Lambda, from the Dark Age to the Infinity and Beyond de Rémi Forax
Java 8 Streams & Collectors : patterns, performances, parallelization et 50 new things we can do with Java 8 de José Paumard (oui, c’est bien moi)
Java 8 – Understanding Functional Interfaces and Writing Mixins de Heinz Kabutz
Java Futures Sneak Peek de Brian Goetz
API Design With Java 8 Lambda and Streams de Stuart Marks et Brian Goetz
Java 8, 9 and beyond – Ask the Experts de Brian Goetz, Stuart Marks et Paul Sandoz
Pragmatic Functional Refactoring with Java 8 de Raoul-Gabriel Urma et Richard Warburton
Java 9
Est-ce vraiment le moment de parler de Java 9 ? Alors que nous en sommes encore a essayé de migrer nos applications vers la version 8, ne pourrait-on pas prendre un peu de repos ? Le fait est que les équipes sont déjà au travail pour la version 9, et oui, on a déjà quelques idées sur ce qu’il y aura dedans. Et aussi sur ce qui n’y sera pas. Et l’on a même déjà des préversions disponibles : http://openjdk.java.net/projects/jdk9/.
Tout d’abord, on n’annonce pas de changement dans le langage lui-même. On annonce même qu’il n’y aura pas de changement dans le langage. Donc pas de gros truc comme les lambdas cette fois-ci. Mais il y aura des changement dans les API. Paul Sandoz a même lancé un appel lors de l’une de ses conférences : si vous avez des idées sur des classes du JDK qui pourraient exposer leur structure interne sous forme de stream, soumettez-les, il se pourrait que vos désirs deviennent réalité.
Ensuite, il semble bien que la chose importante de Java 9 soit Jigsaw. Le projet Jigsaw est sans aucun doute celui qui doit battre le record du nombre de fois où il a été annulé puis réactivé. Mais oui, il sera là en Java 9. En fait, si l’on regarde la préversion aujourd’hui disponible, on se rend compte que le JDK a déjà été découpé en modules.
Jigsaw permettra de faire trois choses.
- Se débarasser de rt.jar et de tools.jar. Une question rapide auprès des personnes présentes dans la salle a montré que ce sont surtout les développeurs d’IDE qui verront leur travail modifié.
- La possibilité de construire des JREs propres à chaque application. Pratique pour toutes les applications déployées sur les petits devices.
- La possibilité pour une API de ne pas exposer toutes ses classes, donc d’en cacher certaines.
Peut-être pour Java 9
Arrays 2.0 ! John Rose a fait une communication sur le projet Arrays 2.0 lors du dernier JVM Summit (dont le programme se trouve ici). La première idée est de permettre de créer des tableaux indexés par des long plutôt que des int. Et effectivement, on gère des quantités de données de plus en plus importantes. La limite des 32 bits pour un tableau ne semble plus si loin. Regardons simplement les classes construites sur des tableaux internes (ArrayList, HashSet, StringBuffer), et l’on constate qu’elles ont été modifiées pour se protéger contre les possibilité de dépassement de capacité.
Au-delà de Java 9
Brian Goetz nous a donnée quelques indications sur les travaux pour après. Bien sûr, les choses sont dans un état très prospectif, aucune date ou version de sortie n’a été avancée. Il n’est même pas garanti que ces choses seront un jour dans le JDK. Et en tout cas, les éléments de syntaxe qu’il a montré peuvent encore changer. Nous sommes donc dans la pure spéculation, ce qui n’enlève rien au fait que les choses restent très intéressantes.
Ces précautions de langage étant prises, il est tout de même clair qu’un jour ou l’autre nous auront des « value types » en Java. Que sont des « value types » ? En fait, pour répondre à cette question, il faut tout d’abord répondre à une question préliminaire : qu’est-ce qui est coûteux lorsque l’on traite des données en Java ? Réponse : c’est en fait de transférer les données de la mémoire centrale vers le cache du processeur. Réduire ce coût va amener des améliorations de performance tout à fait tangibles. Paul Sandoz nous a donné un excellente conférence dans laquelle il explique ce point très clairement. Les value types ne sont pas des objets comme les autres. Ils n’étendent pas Object, et n’ont pas d’identité. Ce sont juste des morceaux de données, installés dans des zones contiguës de la mémoire, de façon a être transférés rapidement dans les caches, sans que l’on ait à suivre des empilements infinis de pointeurs. Cela apportera une réponse à ce problème de transfert, et les amélioration de performance dont on a besoin.
Conclusion
Nous savons tous que la sortie de Java 7 n’a pas été bien reçue. Malgré plusieurs améliorations sympathiques du langage, et de nouvelles API, le fait que les lambda expressions n’étaient pas dans cette version a été une grande déception pour tout le monde. Les choses ont complètement changé avec l’arrivée de Java 8. L’adoption est beaucoup plus rapide que ce qu’Oracle avait prévu (cf cet article). Tout le monde adore cette version. C’est une excellente nouvelle pour Java : tout est à nouveau en ordre maintenant, les nouvelles idées pour Java 9 et au-delà affluent. Un avenir passionnant nous attend manifestement.