WebAssembly Post-MVP 之后原生客户端的未来

Future of native-client after WebAssembly Post-MVP

我确定在 WebAssembly Post-MVP 之后,asm.js 将被弃用。即使是现在,一些现有的 asm.js 项目已经开始使用 WebAssembly。 JS 引擎 (V8) 也开始编译 asm.js 到 WebAssembly,所以即使旧项目永远不会迁移,最终用户仍然会从 WebAssembly 中获得部分优势。

我的问题是,那么 native-client 呢?它没有在 JS 引擎中实现,所以这可能是个问题。即使是现在,本机客户端似乎也已被弃用。在可预见的将来,native-client 是否会从 Chrome 中完全删除?我希望看到 Chrome.

的二进制大小有所减少

附带问题:

仅回答附带问题,因为我不再从事 Native Client 方面的工作。 Google的计划是它自己的代言人,所以我将把它做成一个 wiki。

更新 截至 2017 年 5 月 20 日 NaCl isn't in glibc。这是受支持的原始 libc,需要相当长的时间来清理和上游。它仅受 NaCl 的 GCC 工具链支持。仍然支持 musl libc,它与最新的基于 LLVM 的 NaCl 和 PNaCl 工具链一起工作。

更新 截至 2017 年 5 月 30 日,Chromium 团队宣布 the fate of PNaCl and tentative roadmap of WebAssembly features

以下是您未提及的一些 Native Client 功能:

  • 进程外,许多人认为这是一个错误,因为它强制进行异步通信。它允许保证地址 space,这对于 64 位来说没有太大优势,并且对 Native Client 的双沙盒设计至关重要。 WebAssembly 还没有进程。
  • 通过 postMessageAndAwaitResponse 阻止进出 JavaScript 事件循环。也被许多人视为错误。
  • 通过 Pepper 拥有许多 API。许多镜像网络平台的 API。
  • 可以通过mprotect进行内存保护(尽管执行页面有限)。
  • POSIX 信号可以被处理。
  • 支持计算 goto 和其他不可简化的控制流。
  • 有一些即时代码修补支持。
  • 支持弱于 seq_cst 原子。
  • 支持内联汇编,只要它遵循 NaCl 验证规则。

不过,并非所有这些都在便携式本机客户端中。有 official documentation of differences.

post-MVP WebAssembly 的任何功能都没有时间表。我们不想仓促行事,但我们希望首先提供最有用的东西。这是一个社区团体,所以优先级实际上是由参与其中的人决定的。实现无法同时处理所有功能,但探索可以很好地并行化。