深刻淺出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…

致謝

最後感謝女友的支持和包容,筆芯❤️

相關文章
相關標籤/搜索