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


116

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

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

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


1
就像任何阅读此书的人的笔记一样,我最近通过emscripten将C和C ++用于WASM,并且效果很好。
CoffeeTableEspresso

Answers:


121

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

也有商业解决方案:

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

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



好点-我添加了RemObjects作为它自己的类别,因为它是多语言的和商业的
ColinE

1
但是Python是动态输入的!
理查德·英

17

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

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


2
值得补充的是,可以将asm.js轻松编译为wasm,而asm.js javascript。话虽如此,编译javascript将会更加困难,因为它通常缺少尽可能多的即时可用上下文信息。
淡色

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进行向上/向下调用,然后再次返回,如上述示例所示。


8

这个回购

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

特征:

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

3
“使用表情符号显示每种语言的成熟程度”多次给自己读了一遍……这是一个非常深刻的说法。
ipatch

是的,简单而直观的解释加上愚蠢的表情。
jasonleonhard
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.