WebAssemblys 是什么?
WebAssembly(wasm)是一个简单的机器模型和可执行格式广泛的规范。设计成便携,紧凑,并以原生速度或接近原始速度执行。
作为一种编程语言,WebAssembly 由两种表示相同结构的格式组成,尽管方式不同:
-
- 该
.wat
文字格式(称为wat
为”WebAssembly Text”)使用S 表达式。与 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 demo看上面的代码.
线性内存
WebAssembly
有一个非常简单的内存模型。 目前,一个wasm
模块可以访问单个”线性内存”,它本质上是一个固定数字类型的普通数组。 这个内存成长性是页面大小 (64K) 的倍数,并且不能缩小。
WebAssembly 是否仅给到 Web?
虽然它目前在 JavaScript 和 Web 社区 中受到关注, 但并没有限制它的运行环境。 因此,认为在不久的将来, wasm将可能成为在各种环境中, 重要的”便携式可执行”格式 (我们将花一些时间仔细研究一下wasm便携性功能,待本书进一步说明)。
今时今日,总得来说,wasm主要与 JavaScript 有关,它有很多种类 (包括浏览器和 Node.js
) 。 由于 JS 广泛且易于访问, 我们将主要关注使用这些平台来运行 Rust 生成的wasm,但 其他语言的编译 可能会在不久的将来发布。