何謂 WebAssembly?

WebAssembly (wasm) 是設計為可攜式、緊湊且執行速度接近或達到原生速度的簡單機器模型和可執行檔格式,並且擁有 廣泛的規範

作為一門程式語言,WebAssembly 由兩個格式組成,它們以不同的方式表示相同的結構

  1. .wat 文字格式(稱為 wat,代表「WebAssembly Text」)使用 S 運算式,與 Scheme 和 Clojure 等 Lisp 語系有些類似。

  2. .wasm 二進位格式層級較低,專門供 wasm 虛擬機器直接使用。其概念類似於 ELF 與 Mach-O。

參考以下 wat 中的階乘函數

(module
  (func $fac (param f64) (result f64)
    local.get 0
    f64.const 1
    f64.lt
    if (result f64)
      f64.const 1
    else
      local.get 0
      local.get 0
      f64.const 1
      f64.sub
      call $fac
      f64.mul
    end)
  (export "fac" (func $fac)))

如果您好奇 wasm 檔案的樣貌,可以使用 wat2wasm 範例搭配上述程式碼。

線性記憶體

WebAssembly 有個非常簡單的 記憶體模型。wasm 模組可以存取單一「線性記憶體」,它基本上是一種扁平的位元組陣列。此 記憶體可以透過頁面大小(64K)的倍數來增長。它不能縮小。

WebAssembly 僅能用於網路嗎?

儘管目前已引起 JavaScript 和一般 Web 社群的注意,但 wasm 並不假設其主機環境。因此,推測 wasm 將成為未來用於各種場合的「可移植執行檔」格式是合理的。然而,截至今天,wasm 主要與 JavaScript (JS) 相關,而 JavaScript 有許多類型(包括在 Web 及 Node.js 上)。