Plein de trucs à dire sur cet épisode.
Donc effectivement, le changement de cadence de Java date de juste après Java 9, Java 10 est la première version avec la nouvelle cadence.
Pour l'avoir vécu de l'intérieur, la gestion de la release de la version 9 a été assez catastrophique, la version 9 devait au départ durée 2 ans, à la fin, cela a durée 3 ans et démi, avec une dernière année où le seul truc qui bloquait c'était les modules. Dès Java 5, y avait eu des discussions pour abandonner les features releases, la version 9 a été ce qui a poussé les derniers réticents vers le systèmes de timeboxed releases.
Le but de Leyden, le but est de voir quels changements ont peut faire dans le langage pour accélérer le démarrage/être plus adapter au monde des conteneurs/VMs, donc cela couvre la création d'image statique (par exemple, répondre à la question: peut-on exécuter un block statique à la compilation) mais aussi l'intégration des technos de checkpointing (le projet openjdk CraC [1]) basé sur Criu pour linux [2] ou le checkpointing de VMs comme avec firecracker. L'intérêt du checkpointing est que l'on garde un Java dynamique sans la contrainte de monde clos (closed world) que l'on a on avec une image statique.
Et effectivement, espèrons que cela va pas se transformer en bataille entre Oracle et Oracle Labs.
Structured Concurrency: pour l'instant en Java, soit on a des pools de thread + des futures, soit on utilises des apis reactive au dessus des pools de thread + future. Loom rends la création de threads lightweigth pas chère, donc pooler les threads devient inutiles, en même temps, on veut éviter d'aller vers une API full reactive car la gestion propre des exceptions/cancellations avec une API reactive est une horreur. Entre les deux, on pense qu'il peut exister une API basée sur le concept de structured concurrency [3], dans le cas de Java une API basé sur des try-with-resources imbriqués pour indiquer comment des taches s'exécutent en parallèle, se cancel automatiquement en cas d'erreur si nécessaire etc, plus facile à *bien* utiliser qu'une API reactive. Pour l'instant, dans le JDK 19, il y a une proposition d'API dans un module incubator, mais l'API va surement changée (enfin j'espère :), car c'est le premier jet.
ReactNative essaye d'utiliser les composants natifs de la platforme comme AWT/SWT tandis que Flutter dessine la même chose quelque soit la plateforme comme Swing/JavaFX.
Les deux approches, même dessin quelque soit la plateforme ou réutilisation de composants natif de la plateforme existait déjà au temps de SmallTalk.
Pour Skia, c'est le moteur de rendu 2D/3D utilisé par Firefox et Chrome, donc utilisé depuis par Flutter. JetBrain maintient des bindings de skia pour Kotlin et utilise skia dans Fleet.
Rémi