web-dev-qa-db-fra.com

Quelles langues peuvent être compilées dans WebAssembly (ou wasm)?

Quelles langues peuvent être compilées pour Web Assembly (ou wasm)?

Je pense qu’à l’heure actuelle, C, C++ et Rust (expérimental) peuvent être compilés dans Web Assembly, avec le back-end du compilateur llvm, avec des langages tels que Java, Swift et C # qui ne sont actuellement pas pris en charge, mais pouvant être candidats. pour le développement futur.

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

90
Jordan Stewart

L'assistance WebAssembly est en constante évolution. À l'heure actuelle, il est pris en charge par les langues suivantes:

Il existe également des solutions commerciales:

En ce qui concerne JavaScript, il est peu probable qu'il obtienne une assistance, car WebAssembly est un langage Assembly de type statique.

Il existe également divers langages plus obscurs/amateurs qui prennent en charge WebAssembly. Vous trouverez plus de détails dans la liste plus exhaustive Awesome WebAssembly Languages .

91
ColinE

Voir https://github.com/mbasso/awesome-wasm#compilers - pour l'instant, il s'agit uniquement de C/C++, d'autres sont expérimentaux, mais le nombre de parties "expérimentales" augmente.

Actuellement, WebAssembly prend uniquement en charge la mémoire linéaire à plat. Cela convient à C/C++/Rust et à beaucoup d'autres langages, mais la plupart des langages modernes populaires ont besoin de garbage collector. 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 récupérateur de place dans le wasm avec du code personnalisé.

16
nzeemin

TeaVM peut être utilisé pour transpiler le bytecode de la machine virtuelle Java dans WebAssembly. Vous pouvez consulter la page d’accueil du projet à l’adresse suivante: https://github.com/konsoletyper/teavm .

TeaVM en son cœur peut transpiler le bytecode de la JVM en JS et WebAssembly. La prise en charge de WebAssembly en est à ses débuts, mais des démonstrations permettant de comparer les performances d’une simple simulation JBox2D avec GWT, TeaVM (sortie JS) et TeaVM (sortie WASM) sont tout à fait impressionnantes.

Veuillez noter que WebAssembly n'a actuellement aucun accès direct au DOM ou à d'autres API JavaScript. De plus, dans le MVP actuel, les types de données opaques et même le GC ne sont pas pris en charge. Cependant, il est possible d'effectuer des appels ascendants/descendants de JS à WASM et vice-versa en utilisant quelques astuces de JS, comme indiqué dans les démonstrations mentionnées.

10
Mirko Sertic

Ce repo

Contient une liste des langues actuellement compilées sur ou ayant leurs machines virtuelles dans WebAssembly (wasm).

Fonctionnalités:

  • Utilise emojis pour montrer le degré de maturité de chaque langue
  • Fournit des liens vers les noms de projet et les options de chaque langue
5
jasonleonhard