Welche Sprachen können zu WebAssembly (Wasm) kompiliert werden?


116

Welche Sprachen können zu WebAssembly (Wasm) kompiliert werden?

Ich glaube, dass C, C ++ und Rust (experimentell) derzeit mit dem llvm-Compiler-Backend zu WebAssembly kompiliert werden können, wobei Sprachen wie Java, Swift und C # derzeit nicht unterstützt werden, aber mögliche Kandidaten für zukünftige Entwicklungen sind.

Ich glaube nicht, dass JavaScript zu Wasm kompiliert werden kann. https://github.com/WebAssembly/design/issues/219


1
Nur als Hinweis für jeden, der dies liest, habe ich kürzlich C und C ++ für WASM über emscripten verwendet und es funktioniert sehr gut.
— CoffeeTableEspresso

Antworten:


120

Die Unterstützung für WebAssembly wird ständig weiterentwickelt. Derzeit wird es von folgenden Sprachen unterstützt:

Es gibt auch kommerzielle Lösungen:

In Bezug auf JavaScript ist es unwahrscheinlich, dass Unterstützung erhalten wird, da WebAssembly eine statisch typisierte Assemblersprache ist.

Es gibt auch verschiedene obskurere / Hobby-Sprachen, die WebAssembly unterstützen. Weitere Details finden Sie in der ausführlicheren Liste der Awesome WebAssembly Languages .


1
Kommerzielle C # / Java / Swift-Implementierungen: blogs.remobjects.com/2018/01/12/… . Auch: github.com/appcypher/awesome-wasm-langs
— Andreas Rossberg

Guter Punkt - Ich habe RemObjects als eigene Kategorie hinzugefügt, da es mehrsprachig und kommerziell ist
— ColinE

1
Aber Python wird dynamisch getippt!
— Richard Eng

17

Siehe https://github.com/mbasso/awesome-wasm#compilers - im Moment ist es nur C / C ++, andere sind experimentell, aber die Menge des "experimentellen" Teils wächst.

Derzeit unterstützt WebAssembly nur einen flachen linearen Speicher. Das ist für C / C ++ / Rust und viele andere Sprachen geeignet, aber die meisten modernen Sprachen benötigen Garbage Collector, um ausgeführt zu werden. Dies ist die "Post-MVP-Funktion" von WebAssembly (siehe https://github.com/WebAssembly/design/issues/1079 ). Derzeit besteht die einzige Möglichkeit darin, den Garbage Collector mit einem benutzerdefinierten Code im Wasm zu implementieren.


2
Es ist hinzuzufügen , dass asm.js leicht zu wasm und asm.js kompiliert werden ist Javascript. Das Kompilieren von Javascript ist / wäre jedoch viel schwieriger, da es im Allgemeinen nicht so viele sofort verfügbare Kontextinformationen gibt.
— Culex

11

TeaVM kann verwendet werden, um JVM-Bytecode in WebAssembly zu transpilieren. Sie können die Projekthomepage unter https://github.com/konsoletyper/teavm überprüfen .

TeaVM kann im Kern JVM-Bytecode in JS und WebAssembly transpilieren. Die Unterstützung von WebAssembly befindet sich noch in einem frühen Stadium. Es stehen jedoch Demos zur Verfügung, mit denen die Leistung einer einfachen JBox2D-Simulation mit GWT, TeaVM (JS-Ausgabe) und TeaVM (WASM-Ausgabe) verglichen werden kann.

Bitte beachten Sie, dass WebAssembly derzeit keinen direkten Zugriff auf das DOM oder andere JavaScript-APIs hat. Auch im aktuellen MVP gibt es keine Unterstützung für undurchsichtige Datentypen oder sogar den GC. Es ist jedoch möglich, mithilfe einiger JS-Tricks Up- / Downcalls von JS zu WASM und wieder zurück durchzuführen, wie in den genannten Demos gezeigt.


8

Dieses Repo

Enthält eine Liste der Sprachen, die derzeit in WebAssembly (wasm) kompiliert werden oder deren VMs vorhanden sind.

Eigenschaften:

  • Verwendet Emojis, um zu zeigen, wie ausgereift jede Sprache derzeit ist
  • Bietet Links zu den Projektnamen und -optionen der einzelnen Sprachen

3
"Verwendet Emojis, um zu zeigen, wie ausgereift jede Sprache derzeit ist", lesen Sie sich diese ein paar Mal vor ... es ist eine ziemlich tiefe Aussage.
— IPatch

Ja, einfache intuitive Erklärungen gepaart mit albernen Ausdrücken.
— Jasonleonhard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.