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.
的二进制大小有所减少
附带问题:
- 在thread/gc/simd/exception被纳入WebAssembly之后,是否还有native-client有而WebAssembly缺失的东西(阻塞迁移)?
- WebAssembly 花了大约 2 年的时间才达到 MVP,Post-MVP 中的任何一个最终确定的预期时间是多少?
- 似乎 WebAssembly 小组正在同时处理多个 Post-MVP 功能,而不是一个接一个地处理,这不会使完成其中一个的速度变慢吗?
仅回答附带问题,因为我不再从事 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 的任何功能都没有时间表。我们不想仓促行事,但我们希望首先提供最有用的东西。这是一个社区团体,所以优先级实际上是由参与其中的人决定的。实现无法同时处理所有功能,但探索可以很好地并行化。
我确定在 WebAssembly Post-MVP 之后,asm.js 将被弃用。即使是现在,一些现有的 asm.js 项目已经开始使用 WebAssembly。 JS 引擎 (V8) 也开始编译 asm.js 到 WebAssembly,所以即使旧项目永远不会迁移,最终用户仍然会从 WebAssembly 中获得部分优势。
我的问题是,那么 native-client 呢?它没有在 JS 引擎中实现,所以这可能是个问题。即使是现在,本机客户端似乎也已被弃用。在可预见的将来,native-client 是否会从 Chrome 中完全删除?我希望看到 Chrome.
的二进制大小有所减少附带问题:
- 在thread/gc/simd/exception被纳入WebAssembly之后,是否还有native-client有而WebAssembly缺失的东西(阻塞迁移)?
- WebAssembly 花了大约 2 年的时间才达到 MVP,Post-MVP 中的任何一个最终确定的预期时间是多少?
- 似乎 WebAssembly 小组正在同时处理多个 Post-MVP 功能,而不是一个接一个地处理,这不会使完成其中一个的速度变慢吗?
仅回答附带问题,因为我不再从事 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 的任何功能都没有时间表。我们不想仓促行事,但我们希望首先提供最有用的东西。这是一个社区团体,所以优先级实际上是由参与其中的人决定的。实现无法同时处理所有功能,但探索可以很好地并行化。