WebAssembly、JavaScript 和其他语言

WebAssembly, JavaScript, and other languages

随着 Web 新时代的到来,Google、Microsoft、Apple 和 Mozilla 将合作设计 WebAssembly:

WebAssembly High-Level Goals

  1. Define a portable, size- and load-time-efficient binary format to serve as a compilation target which can be compiled to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms, including mobile and IoT

read more...

请问已经具备这些知识的人:

任何编程语言都可以编译成 WebAssembly 吗?让它成为 C#、Java、Python、JavaScript、Ruby。如果是这种情况 - Web 开发人员可以选择任何语言来完成他现在使用 JavaScript 可以实现的事情吗?

目标确实是支持任何语言,但支持任何语言都很难在没有巨大延迟的情况下实现。

WebAssembly 目前专注于传统上提前编译的语言,它们在线性内存堆上运行良好,并且不需要动态重新编译、运行时代码加载或垃圾回收。其中一些约束是为了尽早获得最小可行产品(这发生在 February 2017 中),并考虑现有的浏览器内编译器可以做什么。

请注意,MVP 不支持线程。稍后将添加主题。

Python、JavaScript 和 Ruby 可以通过将用 C/C++ 编写的解释器编译为 WebAssembly 来轻松支持。更高版本的 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 将支持 even more low-level features。其中一些对于 JavaScript 来说没有意义,但现有代码(例如大型 C++ 代码库)假设这些功能存在是为了正确性和/或性能。

人们应该停止编写 Java脚本并转而使用 WebAssembly 吗?不,我希望与 JavaScript 的紧密集成意味着 WebAssembly 模块将从 JavaScript(例如,快速图像处理器)中使用,并且现有的 C++ 代码库将针对网络,但我不没看到 JavaScript dying any time soon.

我认为在这种情况下,用javascript编写的代码会逐渐转移到更喜欢的编程语言。