深刻浅出WebAssembly(7) Future

这系列主要是我对WASM研究的笔记,可能内容比较简略。总共包括:git

  1. 深刻浅出WebAssembly(1) Compilation
  2. 深刻浅出WebAssembly(2) Basic Api
  3. 深刻浅出WebAssembly(3) Instructions
  4. 深刻浅出WebAssembly(4) Validation
  5. 深刻浅出WebAssembly(5) Memory
  6. 深刻浅出WebAssembly(6) Binary Format
  7. 深刻浅出WebAssembly(7) Future
  8. 深刻浅出WebAssembly(8) Wasm in Rust(TODO)

总结了一下部分WASM的发展方向(Post-MVP时代):github

整体进度列表: Post MVP Featuresweb

Threads

Proposalsdocker

多线成在浏览器的Web Worker基础上实现,经过共享内存来通讯。具体有:浏览器

  1. 定义了一系列的内存原子操做, 全部的原子操做都有访问顺序一致性。全部内存原子操做都应该对齐,不然会触发Trap
  2. 定义了共享内存(shared linear memory),WebWorker的数据传递都是Copy语义,共享内存能让内存能够跨Web worker共享。操做共享内存可使用SharedArrayBuffer对象
  3. 定义了Wait 和 Notify原语(基于Busy-Wating)

Interface Types

Proposals安全

主要目的是:markdown

  • Optimizing calls to Web APIsoop

    能够直接调用Web API而不须要JS 胶水代码,By: Web IDLatom

  • Enabling "shared-nothing" linking of WebAssembly modulesspa

    动态连接通常须要多个模块实例共享一样的memory和table等,这种方式是很脆弱的。

  • Defining language-neutral interfaces like WASI

    对不一样语言的高级类型进行封装,如JS的string和object,更好的配合GC

SIMD

Proposals

单指令多数据流,指的是让CPU在单条语句时间内并行对多个数据进行一样的操做。SIMD可以极大的提升应用程序的计算速度

历史上曾经存在过simd.js不过因为实现困难而被废弃。WASM的工做基于其之上。具体有:

  1. 定义了新的v128类型,二进制OpCode为 0x7b
  2. 定义了一系列指令

目前SIMD接近可用,Rust已经有相应的包可用: packed_simd

GC

Proposals

//TODO...

WASI

Github

WASI是WASM在浏览器以外的领域延伸。出于Web的安全性,可移植性的有点,一个实现了WASM标准的Runtime能够作到比docker更轻量,高效和安全。

If WASM+WASI existed in 2008, we wouldn't have needed to created Docker. That's how important it is. Webassembly on the server is the future of computing. A standardized system interface was the missing link. Let's hope WASI is up to the task! —— Solomon Hykes, Maintainer of Docker from twitter

扩展阅读: hacks.mozilla.org/2019/03/sta…

致谢

最后感谢女友的支持和包容,笔芯❤️