目标确实是支持任何语言,但是如果没有巨大的延迟,支持任何语言都很难实现。
WebAssembly 目前专注于传统上提前编译的语言,在线性内存堆上运行良好,并且不需要动态重新编译、运行时代码加载或垃圾收集。其中一些限制是为了尽早获得最小可行产品(这发生在2017 年2 月),并考虑到现有的浏览器内编译器可以做什么。
请注意,MVP 不支持线程。稍后将添加线程。
通过将用 C/C++ 编写的解释器编译为 WebAssembly,可以轻松地支持 Python、JavaScript 和 Ruby。更高版本的 WebAssembly 将支持 JIT 编译,但像 V8 这样的引擎必须将 WebAssembly 视为新的 ISA(例如与 x86-64 / ARM / ...)。
C# 和 Java 需要类似的 GC 和堆栈操作原语。这也在路线图上,但在 MVP、线程和动态链接之后。
请注意,这些语言可能工作得很好,但支持它们的所有库也很困难!我们(浏览器工程师)可以努力支持语言,但我们需要围绕强大的库支持建立社区。
WebAssembly 会取代 JavaScript 吗?
在你的最后一句话:是的,WebAssembly 应该能够做很多 JavaScript 可以做的事情,因为它可以访问相同的 Web API。它的目标不是取代 JavaScript:它是对 JavaScript 的补充,避免为了不自然地支持其他语言而向 JavaScript 添加特性,并为 C++ / Rust 等低级语言提供可预测的接近本机性能。
为那些以 JavaScript 为目标或将类似语言编译为 JavaScript(例如 TypeScript)的人保持 JavaScript 进化,并将 WebAssembly 进化为喜欢其他语言的 JavaScript 的酷搭档。
最终 WebAssembly 将支持更多的低级特性。其中一些对于 JavaScript 采用没有意义,但现有代码(例如大型 C++ 代码库)假设这些特性的存在是为了正确性和/或性能。
人们应该停止编写 JavaScript 并转向 WebAssembly 吗?不。我希望与 JavaScript 的紧密集成意味着 WebAssembly 模块将从 JavaScript 中使用(例如,一个快速的图像处理器),并且现有的 C++ 代码库将针对 Web,但我认为JavaScript 不会很快消亡。