什么是 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 demo
与上述代码一起使用。
线性存储器
WebAssembly有一个非常简单的内存模型。wasm模块可以访问单个“线性内存”,它本质上是一个扁平的字节数组。此内存可以按页面大小(64K)的倍数增长。不能减少。
WebAssembly 只能运行在浏览器吗?
尽管 wasm 目前在 JavaScript 和 Web 社区中引起了广泛的关注,但它并没有对其宿主环境做出任何假设。因此,推测 wasm 将成为一种“可移植的可执行文件”格式是有意义的,它将在未来的各种上下文中使用。然而,到目前为止,wasm 主要与 JavaScript(JS)相关,JavaScript 有多种 runtime(包括浏览器和 Node.JS)。