可以将哪些语言编译为Web程序集(或者是wasm)?
我相信现在可以将C,C ++和rust(实验)编译成web程序集,使用llvm编译器后端,目前不支持Java,swift和C#等语言,但可能成为未来开发的候选者
我不相信javascript可以编译为wasm。 https://github.com/WebAssembly/design/issues/219
答案 0 :(得分:81)
WebAssembly支持不断发展。现在它受以下语言支持:
D - D的“betterC”子集可以编译为WebAssembly through LDC(LLVM编译器)。
TypeScript - 来自AssemblyScript,极具实验性,但势头良好。
还有商业解决方案:
关于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)
包含当前可在WebAssembly(wasm)中编译为VM或在VM中包含其VM的语言的列表