什么是WebAssembly?

WebAssembly(wasm)是一种简单的机器模型和可执行格式,有一个广泛的规范。它被设计成可移植、紧凑,并以或接近原生速度执行。

作为一种编程语言,WebAssembly是由两种格式组成的。表示相同的结构,只是方式不同而已:

  1. .wat 文本格式(称为wat,表示 "WebAssembly Text")使用 S-expressions,与 Lisp 系列语言有一些相似之处 像 Scheme 和 Clojure。
  2. .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 只是用于 Web 吗?

尽管它目前在 JavaScript 和 Web 社区中普遍受到关注,但 wasm 对其主机环境不做任何假设。因此,推测 wasm 将成为一种 "可移植的可执行 "格式,在未来被用于各种情况下是有意义的。然而,截至今天,wasm 主要与JavaScript(JS)有关,而 JavaScrip t有很多种类(包括 Web 和Node.js上的)。