什么是 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 只是为了 Web 吗?
虽然它目前在 JavaScript 和 Web 社区中引起了广泛关注,但 wasm 并没有对它的宿主环境做出任何假设。因此,可以推测 wasm 将成为一种“可移植可执行”格式,将来将在各种环境中使用。然而,就 *今天* 而言,wasm 主要与 JavaScript (JS) 相关,JS 有很多种形式(包括 Web 上和 Node.js 上的)。