可以将哪些语言编译为WebAssembly(或wasm)?

时间:2017-04-21 10:54:30

标签: llvm webassembly

可以将哪些语言编译为Web程序集(或者是wasm)?

我相信现在可以将C,C ++和rust(实验)编译成web程序集,使用llvm编译器后端,目前不支持Java,swift和C#等语言,但可能成为未来开发的候选者

我不相信javascript可以编译为wasm。 https://github.com/WebAssembly/design/issues/219

4 个答案:

答案 0 :(得分:81)

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

还有商业解决方案:

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

还有各种更加模糊/爱好的语言支持WebAssembly。更详细的Awesome WebAssembly Languages列表中可以找到更多详细信息。

答案 1 :(得分:16)

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

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

答案 2 :(得分:10)

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

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

请注意,WebAssembly目前无法直接访问DOM或其​​他JavaScript API。同样在当前的MVP中,不支持opaque数据类型甚至GC。但是,可以从JS到WASM进行向上/向下调用,然后再使用一些JS技巧,如上面提到的演示中所示。

答案 3 :(得分:3)

This repo

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

功能:

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