commit/089aa91cd71c127854898b794664b2ba7113a4f4

什么是 WebAssembly?

WebAssembly (wasm) 是一种具有广泛规范的机器模型和可执行格式。 它被设计为轻便,紧凑并且以原生速度或接近原生速度运行。

作为一种程序语言,WebAssembly由两种表示相同结构的格式构成,尽管以不同的方式:

  1. .wat 文本格式 (称为 wat 是 "WebAssembly Text") 使用符号表达式, 并且与Lisp族的语言有一些相似,如Scheme 和 Clojure。

  2. .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看起来是怎样的你可以使用上面代码的wat到wasm示例

线性内存

WebAssembly 有一个非常简单的内存模型。 一个wasm模块访问单个“线性数组”,它本质上是一个平面的字节数组。 这个内存可以按照页大小(64K)成倍的增长memory can be grown。 它不能被缩小。

WebAssembly只针对Web吗?

虽然它目前一般在JavaScript和Web社区获得关注,但是wasm并没有假定它的宿主环境。 因此可以推测wasm未来将成为一个用于多种环境下的“便携的可执行”格式。 不过截至目前,与wasm最相关的是JavaScript(JS),他是有很多形式(包括在Web上面的和Node.js).

results matching ""

    No results matching ""