这系列主要是我对WASM研究的笔记,可能内容比较简略。总共包括:
- 深入浅出WebAssembly(1) Compilation
- 深入浅出WebAssembly(2) Basic Api
- 深入浅出WebAssembly(3) Instructions
- 深入浅出WebAssembly(4) Validation
- 深入浅出WebAssembly(5) Memory
- 深入浅出WebAssembly(6) Binary Format
- 深入浅出WebAssembly(7) Future
- 深入浅出WebAssembly(8) Wasm in Rust(TODO)
总结了一下部分WASM的发展方向(Post-MVP时代):
总体进度列表: Post MVP Features
Threads
多线成在浏览器的Web Worker基础上实现,通过共享内存来通信。具体有:
- 定义了一系列的内存原子操作, 所有的原子操作都有访问顺序一致性。所有内存原子操作都应该对齐,否则会触发Trap
- 定义了共享内存(shared linear memory),WebWorker的数据传递都是Copy语义,共享内存能让内存可以跨Web worker共享。操作共享内存可以使用SharedArrayBuffer对象
- 定义了Wait 和 Notify原语(基于Busy-Wating)
Interface Types
主要目的是:
-
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
单指令多数据流,指的是让CPU在单条语句时间内并行对多个数据进行同样的操作。SIMD能够极大的提高应用程序的计算速度

历史上曾经存在过simd.js不过由于实现困难而被废弃。WASM的工作基于其之上。具体有:
- 定义了新的v128类型,二进制OpCode为
0x7b
- 定义了一系列指令
目前SIMD接近可用,Rust已经有相应的包可用: packed_simd
GC
//TODO...
WASI
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…
致谢
最后感谢女朋友的支持和包容,笔芯❤️