深入浅出WebAssembly(7) Future

977 阅读2分钟

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

  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时代):

总体进度列表: Post MVP Features

Threads

Proposals

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

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

Interface Types

Proposals

主要目的是:

  • Optimizing calls to Web APIs

    可以直接调用Web API而不需要JS 胶水代码,By: Web IDL

  • Enabling "shared-nothing" linking of WebAssembly modules

    动态链接一般需要多个模块实例共享同样的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…

致谢

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