哪些语言可以编译为WebAssembly(Wasm)?
我相信,现在可以使用llvm编译器后端将C,C ++和Rust(实验性)编译为WebAssembly,并且目前不支持Java,Swift和C#等语言,但可以作为将来开发的候选语言。
我不认为JavaScript可以编译为Wasm。 https://github.com/WebAssembly/design/issues/219
哪些语言可以编译为WebAssembly(Wasm)?
我相信,现在可以使用llvm编译器后端将C,C ++和Rust(实验性)编译为WebAssembly,并且目前不支持Java,Swift和C#等语言,但可以作为将来开发的候选语言。
我不认为JavaScript可以编译为Wasm。 https://github.com/WebAssembly/design/issues/219
Answers:
WebAssembly支持不断发展。目前,以下语言支持它:
D - D的“ betterC”子集可以通过LDC(LLVM编译器)编译为WebAssembly 。
TypeScript-通过AssemblyScript,实验性强,但势头强劲。
也有商业解决方案:
关于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进行向上/向下调用,然后再次返回,如上述示例所示。