Quelles langues peuvent être compilées pour l’assemblage Web (ou wasm)?

Quelles langues peuvent être compilées pour l’assemblage Web (ou wasm)?

Je crois que maintenant, C, C ++ et rust (experimental) peuvent être compilés en assembleur Web, avec le backend du compilateur llvm, avec des langages tels que Java, swift et C # actuellement pas supportés, mais des candidats possibles pour des développements futurs.

Je ne crois pas que javascript puisse être compilé en wasm. https://github.com/WebAssembly/design/issues/219

Le support de WebAssembly est en constante évolution. Actuellement, il est pris en charge par les langues suivantes:

  • C / C ++ – a un très bon support (prêt pour la production) via EmScripten , ou d’autres chaînes d’outils LLVM minimales
  • Rust – encore une fois en utilisant Emscripten sous le capot , bien que récemment ils ont déménagé à LLVM .
  • C # – a un support expérimental via Blazor , mais cela nécessite actuellement d’intégrer un runtime .NET dans Wasm. Blazor a été officiellement adopté par Microsoft en tant que technologie expérimentale, avec une version de prévisualisation récente .
  • TypeScript – via AssemblyScript , hautement expérimental
  • Java – via TeaVM ou Bytecoder
  • Haxe – vient d’annoncer un soutien
  • Kotlin – Kotlin / Native 0.4 a acquis un support expérimental de WebAssembly et de TeaVM
  • Go – a un support préliminaire, avec des détails trouvés dans le document d’architecture suivant.
  • Python – Pyodide est un portage de Python vers WebAssembly qui inclut les principaux packages de la stack scientifique Python (Numpy, Pandas, matplotlib).

Il existe également des solutions commerciales:

  • RemObjects – Qui a annoncé la prise en charge de C #, Java, Swift et Oxygene

En ce qui concerne JavaScript, il est peu probable que WebAssembly soit un langage d’assemblage typé statiquement.

Voir https://github.com/mbasso/awesome-wasm#comstackrs – pour l’instant, il ne s’agit que de C / C ++, d’autres sont expérimentaux, mais la quantité de la partie “expérimentale” augmente.

Actuellement, WebAssembly ne prend en charge que la mémoire linéaire plate. Cela convient à C / C ++ / Rust et à beaucoup d’autres langages, mais la plupart des langages modernes ont besoin d’un ramasse-miettes pour s’exécuter. C’est la “fonctionnalité post-MVP” de WebAssembly (voir https://github.com/WebAssembly/design/issues/1079 ). Pour le moment, la seule option consiste à implémenter un garbage collector dans le wasm avec du code personnalisé.

TeaVM peut être utilisé pour transférer le bytecode JVM vers WebAssembly. Vous pouvez consulter la page d’accueil du projet à l’ adresse https://github.com/konsoletyper/teavm .

TeaVM à sa base peut transposer le bytecode JVM dans JS et WebAssembly. La prise en charge de WebAssembly en est à ses débuts, mais des démonstrations sont disponibles pour comparer les performances d’une simulation JBox2D simple avec GWT, TeaVM (sortie JS) et TeaVM (sortie WASM), qui sont assez impressionnantes.

Veuillez noter que WebAssembly n’a actuellement aucun access direct au DOM ou à d’autres API JavaScript. De même, dans le MVP actuel, il n’ya pas de support pour les types de données opaques ou même le GC. Cependant, il est possible d’effectuer des rappels / retours de JS à WASM et de revenir en arrière en utilisant une supercherie JS, comme dans les démos mentionnées.