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