La communauté GWT s’active
Dans sa dernière newsletter, Sencha nous donne des informations très intéressantes sur les travaux actuels de Google autour de GWT 3 et du tout nouveau Transpiler J2CL (prononcer "Jackal"). Il faut préciser qu'il existe deux sujets majeurs aujourd'hui dans la communauté GWT. La tant attendue (depuis presque deux ans) version 2.8 qui supportera Java 8 avec notamment les lambas expressions et les Stream (un travail assez colossal à coder), et la version 3.0, annoncée à l’état de prototype. Sencha nous indique qu’une release officielle de GWT 2.8 est attendue très prochainement, ce qui confirme aussi les propos de Daniel Kurka sur les forums :
"In the last steering committee meeting we agreed that making the next version of Guava work (which contains a lot of Java8 usage) was the goal for RC1. We have gotten significantly closer to this now and I am happy to report that as of now we pass all of Guavas tests (…)”.
Les performances
Côté performance, on s’attend à un gain très significatif :
« Google reporting that Inbox compiles in only 3s vs. the previous 30s. This a huge and long-awaited improvement to the GWT development cycle. In addition, GWT 2.8 offers many runtime performance improvements. HashMap/HashSet now use ES6 maps when available to make them up to 3x faster. New Long emulation is up to 50x faster for smaller numbers (really good news if you’re writing a spreadsheet app with GWT!), and Double and Boolean types are no longer boxed, which brings further performance gain”.
Notamment sur l’utilisation des collections et des types primitifs qui ne seront plus encapsulés.
Le support de Java 8
Cette prochaine version supportera les références de méthodes, les streams grâce à ce patch de Colin Alworth (un ancien de Sencha) mais aussi des alternatives tierces. Parmi celles-ci, rxjava-gwt qui permettra d’intégrer la programmation réactive à la mode RxJava. Dans ces bibliothèques se trouvent quelques pépites qui permettront probablement dans un futur proche de proposer un databinding bi-directionnel associé aux formulaires HTML. Cette classe nous en dit un peu plus.
Ce support de Java 8 ouvre d’énormes perspectives en termes de programmation fonctionnelle. Jusque-là, le monde Java ne proposait les Stream qu’au serveur. Désormais, il sera possible, tout comme ReactJS et NodeJS d’utiliser des constructions réactives côté client et côté serveur.
Certains travaux sont aussi en cours pour émuler la classe CompletableFuture et proposer un mécanisme asynchrone homogène. Dans un échange récent sur la liste de diffusion, Jens Nehlmeier annonçait
« Personally I work on Java8 Base64 emulation but don't know when I will finish it. Andrei (Korzhevskii) has a draft on Gerrit for Java8 CompletableFuture which will be based on Promises/Promise emulation. But that one will probably still take some time to complete. Also this CompletableFuture patch includes some emulation of java concurrent classes that are currently emulated by Guava”.
Le support de Guava est désormais prêt dans GWT 2.8, ce qui ouvre la porte à de nombreuses implémentations asynchrones.
GWT 3 et J2CL
La communauté se fait de plus en plus pressante pour que Google dévoile enfin officiellement ses travaux autour de ce tout nouveau transpiler Java vers JavaScript. Ce qui est d’ores et déjà acquis, c’est que les APIs constituant les Widgets de GWT 2.X disparaîtront du Framework. Les RPC également seront remplacés par un mécanisme basé sur REST. Un des candidats potentiel au remplacement de RPC est l’outil AutoRest qui s’appuie sur RxJava pour proposer du code reprenant le pattern Observable. Si on imagine des interfaces REST renvoyant des Observable et un outil de mapping connectant des éléments du DOM à des objets POJO, on tisse de plus en plus le tableau qui se dessine pour GWT. Une sorte de ReactJS typé en Java avec la puissance des streams et du fonctionnel. C’est une des raisons pour lesquelles nous avons publié plusieurs articles sur la programmation réactive, incontournable dans les mois à venir.
Autre information donnée par Sencha, Google a d’ores et déjà des projets internes qui compilent avec JaCL. Par ailleurs, GWT reste un élément clé de sa stratégie multiplateforme
« Sources at Google indicate that many GWT projects are building successfully with J2CL today and that it provides the hoped-for performance improvements, even over GWT 2.8. As demonstrated by Google Inbox, GWT / J2CL remains a key part of Google’s strategy to build cross-platform applications in Java for the Web, Android, and iOS (via j2objc) (…)”.
Pour finir, une dernière brique est en cours de développement : « Elemental 2». Cet outil chargé de générer des interfaces Java typées à partir de code JavaScript en utilisant JSInterop arrive à maturité et sera dévoilé dans les prochains jours : « Elemental is not secret, it is not ready yet… Stay tuned, in few days we should push an experimental version of elemental using JsInterop new specification”. Les mois prochains risquent d’être riches côté actualité GWT. Plus que jamais il est important de se plonger dans les nouveautés du JDK 8 pour appréhender cette nouvelle donne côté client.