Guillaume Bort | Devoxx

Guillaume Bort
Guillaume Bort Twitter

From Criteo

Creator of Play framework - Previously INRIA, Zengularity, Typesafe - Now working on the petabytes of analytics data at Criteo.

Blog: http://guillaume.bort.fr

java Java, JVM, Javas SE/EE

Un assembleur dynamique sur la JVM ?

Conference

La génération de code dynamique sur la JVM est une technique aujourd'hui bien connue. Il suffit de fabriquer du Java ByteCode, et de charger les classes correspondantes à l'exécution.

Cependant j'ai été récemment confronté à un challenge intéressant: serait-il possible générer directement du code natif dynamiquement ? C'est à dire sans passer par du Java ByteCode et l'étape de compilation JIT de Hotspot, et ainsi avoir totalement la main sur le code natif d'une fonction ?

C'est effectivement possible. Dans cette présentation j'exposerai les différentes étapes qui permettent de réaliser la génération de code natif dynamiquement sur la JVM:

  • Décrire une API minimale permettant de manipuler un langage assembleur directement dans le langage hôte.
  • Ecrire un mini-assembleur permettant de le traduire en code natif au runtime.
  • Charger ce code natif en mémoire, et le rendre executable.
  • Enfin, le rendre interopérable avec le langage hôte et lui assignant un type fonction.

Ici j'utiliserai Scala comme langage hôte, mais les techniques présentées peuvent être facilement appliquées en Java ou un autre langage de la JVM.

wm Web, HTML5 et UX

Loop, améliorez votre workflow de développement d'application Web

Quickie

Travailler un framework Web full-stack comme Play ou Rails permet un workflow de développement productif: les changements apportés au code entraine automatiquement le rechargement de l'application, et un pipeline dédié de compilation des assets (JS, CSS, ...) est intégré au build principal.

Mais lorsque l'on doit travailler avec des micro-frameworks ou des système de build hétérogènes, tout ça se complique.

Laissez moi vous présenter Loop.

Loop gère vos différents système de build, redémarre votre serveur au besoin, bloque l'accès à l'application tant qu'elle n'est pas prête, affiche directement les erreurs de compilation dans le navigateur.

Loop est indépendant de la technologie et saura gérer vos build Maven, SBT, Gradle, grunt, gulp, make, cargo, (etc.) pour améliorer votre workflow de développement d'application Web en Javascript, Java, Scala, Python, Rust, Go, (etc.).