何謂 WebAssembly?
WebAssembly (wasm) 是設計為可攜式、緊湊且執行速度接近或達到原生速度的簡單機器模型和可執行檔格式,並且擁有 廣泛的規範。
作為一門程式語言,WebAssembly 由兩個格式組成,它們以不同的方式表示相同的結構
-
.wat
文字格式(稱為wat
,代表「WebAssembly Text」)使用 S 運算式,與 Scheme 和 Clojure 等 Lisp 語系有些類似。 -
.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 上)。