关于llvm:可以将哪些语言编译为WebAssembly(Wasm)?

What languages can be compiled to WebAssembly (Wasm)?

哪些语言可以编译到WebAssembly(Wasm)?

我相信,现在可以使用llvm编译器后端将C,C ++和Rust(实验性)编译为WebAssembly,并且目前不支持Java,Swift和C#等语言,但可以作为将来开发的候选语言。

我不认为JavaScript可以编译为Wasm。
https://github.com/WebAssembly/design/issues/219


WebAssembly支持不断发展。目前,以下语言支持它:

  • C / C ++-通过EmScripten或其他基于LLVM的最小工具链提供了很好的支持(可立即投入生产)
  • Rust-WebAssembly是受官方支持的目标,周围有非常活跃的社区。
  • Go-现在已将WebAssembly作为正式但实验性的目标来支持
  • C#-通过Blazor具有实验支持,但是当前需要将.NET运行时嵌入到Wasm中。最近发布了预览版,Blazor被Microsoft正式用作实验技术。
  • D-D的" betterC"子集可以通过LDC(LLVM编译器)编译为WebAssembly。

  • TypeScript-通过AssemblyScript,实验性强,但势头强劲。

  • Java-通过TeaVM或Bytecoder
  • Haxe-刚刚宣布支持
  • Kotlin-Kotlin / Native 0.4通过WebAssembly和TeaVM获得了实验支持
  • Python-Pyodide是WebAssembly的Python移植,其中包括科学Python堆栈的核心软件包(Numpy,Pandas,matplotlib)。
  • PHP-实验性的,但具有有效的原型
  • Perl-WebPerl是Perl二进制文件到WebAssembly的端口,允许您在Web上运行Perl脚本。
  • Scala-使用Emscripten编译器
  • Ruby-通过run.rb项目
  • Swift-使用SwiftWasm,目前正在开发中

也有商业解决方案:

  • RemObjects-已宣布支持C#,Java,Swift和Oxygene

关于JavaScript,由于WebAssembly是一种静态类型的汇编语言,因此不太可能获得支持。

还有各种各样支持WebAssembly的晦涩/业余语言。可以在更详尽的Awesome Web汇编语言列表中找到更多详细信息。


参见https://github.com/mbasso/awesome-wasm#compilers-目前仅是C / C ++,其他只是实验性的,但是"实验性"部分的数量却在增加。

当前,WebAssembly仅支持平面线性内存。这适用于C / C ++ / Rust和许多其他语言,但是大多数流行的现代语言都需要运行垃圾收集器。这是WebAssembly的"后MVP功能"(请参阅??https://github.com/WebAssembly/design/issues/1079)。目前,唯一的选择是使用一些自定义代码在wasm内部实现垃圾收集器。


TeaVM可用于将JVM字节码转换为WebAssembly。您可以在https://github.com/konsoletyper/teavm上签出项目主页。

TeaVM的核心可以将JVM字节码转换为JS和WebAssembly。 WebAssembly支持尚处于早期阶段,但是有可用的演示来比较简单的JBox2D仿真与GWT,TeaVM(JS输出)和TeaVM(WASM输出)的性能,这些效果令人印象深刻。

请注意,WebAssembly当前无法直接访问DOM或其??他JavaScript API。同样,在当前的MVP中,不支持不透明的数据类型,甚至不支持GC。但是,可以使用JS技巧从JS对WASM进行向上/向下调用,然后再次返回,如上述示例所示。


这个回购

包含当前可在WebAssembly(wasm)中编译或在其VM中拥有其VM的语言的列表

特征:

  • 使用表情符号显示当前每种语言的成熟程度
  • 提供每种语言项目名称和选项的链接