什麼是 WebAssembly?
WebAssembly (wasm) 是一個簡易的機器模型及可執行格式,並具有範例 規格。其設計目的為具備可攜性、精簡性,執行速度接近甚至等同原生速度。
WebAssembly 是一種程式語言,包含了兩種格式,用以表示相同的結構,儘管表達方式不同
-
.wat
文字格式(簡稱為「WebAssembly Text」)使用 S-expression,與 Lisp 家族語言(例如 Scheme 和 Clojure)有些類似。 -
.wasm
二進位格式較低階,用於直接提供 wasm 虛擬機器使用。其概念與 ELF 和 Mach-O 類似。
作為參考,以下是在 wat
中的階乘函數
(module
(func $fac (param f64) (result f64)
get_local 0
f64.const 1
f64.lt
if (result f64)
f64.const 1
else
get_local 0
get_local 0
f64.const 1
f64.sub
call $fac
f64.mul
end)
(export "fac" (func $fac)))
如果你好奇 wasm
檔案的樣貌,可以使用 wat2wasm 範例來執行上述程式碼。
線性記憶體
WebAssembly 有非常簡單的 記憶體模型。一個 wasm 模組可以存取一個「線性記憶體」,它基本上是一個平面位元組陣列。這個 記憶體可以增加,增加大小是頁面大小(64K)的若干倍。但記憶體不能縮小。
WebAssembly 僅限於 Web 上使用嗎?
雖然 WebAssembly 目前在 JavaScript 與 Web 社群中普遍受到關注,但 wasm 沒有對其寄存環境做出假設。因此可以推測 wasm 會在未來在各種情境中成為「可攜式可執行」格式。但到目前為止,wasm 主要與 JavaScript (JS) 有關,而且 JavaScript 有許多版本(包括 Web 和 Node.js)。