什么语言可以编译成 WebAssembly (Wasm) ?
我相信现在 C,C + + 和 Rust (实验性的)可以编译成 WebAssembly,使用 llvm 编译器作为后端,Java,Swift 和 C # 等语言目前还不受支持,但是可能成为未来开发的候选语言。
我不相信 JavaScript 可以编译成 Wasm。 Https://github.com/webassembly/design/issues/219
TeaVM 可以用来将 JVM 字节码传输到 WebAssembly。
其核心的 TeaVM 可以将 JVM 字节码传输到 JS 和 WebAssembly。WebAssembly 支持还处于早期阶段,但是有一些演示可以用来比较简单的 JBox2D 模拟与 GWT、 TeaVM (JS 输出)和 TeaVM (WASM 输出)的性能,这些都非常令人印象深刻。
请注意,WebAssembly 目前不能直接访问 DOM 或其他 JavaScriptAPI。而且在当前的 MVP 中不支持不透明的数据类型,甚至不支持 GC。但是,可以使用一些 JS 技巧来完成从 JS 到 WASM 的向上/向下调用,如上面提到的演示所示。
参见 https://github.com/mbasso/awesome-wasm#compilers——目前它只是 C/C + + ,其他的都是实验性的,但是“实验性”部分的数量在增长。
目前 WebAssembly 只支持平面线性内存。这适用于 C/C + +/Rust 和许多其他语言,但是大多数流行的现代语言需要运行垃圾收集器。这是 WebAssembly 的“ post-MVP 特性”(参见 https://github.com/WebAssembly/design/issues/1079)。目前,唯一的选择是使用一些自定义代码在 wam 内部实现垃圾收集器。
网络大会的支持不断发展,目前得到以下语言的支持:
C/C + + -通过 EmScripten,或者其他基于 LLVM 的最小工具链,提供了非常好的(产品准备就绪)支持
Rust -WebAssembly 是一个官方支持的目标,周围有一个 高度活跃的社区。
Go -已经将 现在支持 WebAssembly作为一个官方的,但仍处于试验阶段的目标
C # -通过 Blazor提供实验支持,但是目前需要嵌入一个。NET 运行时转换为 Wasm。Blazor 被微软正式采用为一种实验技术,采用了 最近的预览版。
D -D 的“ better C”子集可以编译成 WebAssembly 通过土地发展公司(LLVM 编译器)。
TypeScript -通过 汇编脚本,非常具有实验性,但正在获得动力。
Java -via TeaVM or < a href = “ https://github.com/mirkosertic/Bytecder”rel = “ noreference rer”> Byteceder
哈克斯刚刚宣布支持
Kotlin -WebAssembly 的 Kotlin/本地0.4 获得了实验支持和 via < a href = “ http://TeaVM.org/”rel = “ norefrer”> TeaVM
Python -尿嘧啶是 Python 到 WebAssembly 的一个端口,它包含了科学 Python 栈(Numpy、 Pandas、 matplotlib)的核心包。
PHP -实验性的,但是使用了一个工作原型
Perl -WebPerl是 Perl 二进制文件到 WebAssembly 的一个端口,允许您在 Web 上运行 Perl 脚本。
Scala -使用 脚本编译器,并且 < a href = “ http://TeaVM.org/”rel = “ noReferrer”> TeaVM
Ruby -通过 快跑项目
Swift -使用
还有一些商业解决方案:
关于 JavaScript,它不太可能获得支持,因为 WebAssembly 是一种静态类型的汇编语言。
还有各种支持 WebAssembly 的模糊/业余爱好者语言。更详细的信息可以在更详尽的 超棒的 WebAssembly 语言列表中找到。
包含当前编译成或在 WebAssembly 中有其 VM 的语言(wasm)的列表