132

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

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

我不相信 JavaScript 可以编译成 Wasm。 https://github.com/WebAssembly/design/issues/219

4

4 回答 4

153

WebAssembly 支持不断发展。现在它被以下语言支持:

还有商业解决方案:

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

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

于 2017-11-25T08:25:56.177 回答
19

请参阅https://github.com/mbasso/awesome-wasm#compilers - 现在它只是 C/C++,其他是实验性的,但“实验性”部分的数量在增长。

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

于 2017-06-10T11:34:13.740 回答
14

这个回购

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

特征:

  • 使用表情符号显示每种语言目前的成熟程度
  • 提供指向每种语言项目名称和选项的链接
于 2019-04-04T01:10:43.400 回答
11

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 进行向上/向下调用,然后再返回,如提到的演示中所示。

于 2017-04-24T10:16:08.880 回答