关闭。这个问题需要更加集中。它目前不接受答案。想改进这个问题?更新问题,使其仅通过编辑此帖子专注于一个问题。 10 个月前关闭。社区在 10 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决 改进此问题
哪些语言可以编译成 WebAssembly (Wasm)?
我相信现在可以使用 llvm 编译器后端将 C、C++ 和 Rust(实验性)编译为 WebAssembly,目前不支持 Java、Swift 和 C# 等语言,但可能是未来开发的候选者。
我不相信 JavaScript 可以编译成 Wasm。 https://github.com/WebAssembly/design/issues/219
WebAssembly 支持不断发展。现在它被以下语言支持:
C / C++ - 通过 EmScripten 或其他基于 LLVM 的最小工具链提供非常好的(生产就绪)支持
Rust - WebAssembly 是一个官方支持的目标,周围有一个非常活跃的社区。
Go - 现在支持 WebAssembly 作为官方但实验性的目标
C# - 通过 Blazor 提供实验性支持,但是目前这需要将 .NET 运行时嵌入到 Wasm 中。 Blazor 作为一项实验性技术被微软正式采用,最近发布了预览版。
D - D 的“betterC”子集可以通过 LDC(LLVM 编译器)编译为 WebAssembly。
TypeScript - 通过 AssemblyScript,高度实验性,但势头强劲。
Java - 通过 TeaVM 或 Bytecoder
Haxe - 刚刚宣布支持
Kotlin - Kotlin/Native 0.4 获得了 WebAssembly 和通过 TeaVM 的实验性支持
Python - Pyodide 是 Python 到 WebAssembly 的一个端口,其中包括科学 Python 堆栈(Numpy、Pandas、matplotlib)的核心包。
PHP - 实验性的,但有一个工作原型
Perl - WebPerl 是 Perl 二进制文件到 WebAssembly 的一个端口,允许您在 Web 上运行 Perl 脚本。
Scala - 使用 Emscripten 编译器和 TeaVM
Ruby - 通过 run.rb 项目
斯威夫特 - 使用 SwiftWasm
还有商业解决方案:
RemObjects - 已宣布支持 C#、Java、Swift 和 Oxygene
关于 JavaScript,它不太可能获得支持,因为 WebAssembly 是一种静态类型的汇编语言。
还有各种支持 WebAssembly 的更晦涩/业余爱好者的语言。更多详细信息可在更详尽的 Awesome WebAssembly Languages 列表中找到。
请参阅 https://github.com/mbasso/awesome-wasm#compilers——目前只有 C/C++,其他都是实验性的,但“实验性”部分的数量在增加。
目前 WebAssembly 只支持平面线性内存。这适用于 C/C++/Rust 和许多其他语言,但大多数流行的现代语言都需要垃圾收集器才能运行。这就是 WebAssembly 的“后 MVP 功能”(参见 https://github.com/WebAssembly/design/issues/1079)。目前唯一的选择是使用一些自定义代码在 wasm 中实现垃圾收集器。
这个回购
包含当前编译为 WebAssembly(wasm) 或在 WebAssembly(wasm) 中具有其 VM 的语言列表
特征:
使用表情符号显示每种语言目前的成熟程度
提供指向每种语言项目名称和选项的链接
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 进行向上/向下调用,然后再返回,如提到的演示中所示。
不定期副业成功案例分享