WebAssembly是web的汇编语言,实际上是一个虚拟机,包含了低级汇编语言和虚拟机体系结构,特点是文件小、加载快、执行效率高,可以现实计算密集性任务。WebAssembly属于前端技术体系,具有很强的移植性,可以使用C/C++、Go、Rust等开发语言来写代码,然后编译为WebAssembly,并在Web上执行,这样可以将用其他语言编写的程序移植到Web上,丰富其内容。

WebAssembly是一种浏览器支持的二进制文件格式标准,该文件格式定义了基于堆栈运行的图灵完备的指令集所组成的二进制代码段,以及为了运行指定的代码(函数)所需要的相关环境,比如:数据类型、函数签名、数据区、内存区、表区、开始区、代码区等。

webAssembly有2种形式:
文本形式:一种基于S-表达式的表示形式,对人类友好,文件的扩展名是.wat
二进制形式:汇编格式的形式,对机器友好, 文件的扩展名是.wasm

2种形式的关系类似汇编语言和机器码关系。

S-表达式长什么样。树上的每个一个节点都有一对括号——( … )——包围。括号内的第一个标签告诉你该节点的类型,其后跟随的是由空格分隔的属性或孩子节点列表。

Table
用于存储WebAssembly不能表示或者访问的资源,比如: JavaScript对象或操作系统文件句柄。

wasm的执行是以栈式机器定义的。也就是说,其基本理念是每种类型的指令都是在栈上执行数值的入栈出栈操作。

BytecodeAlliance-字节码联盟

Bytecode Alliance 最早成立于2019年,当时只是一个由多家企业联合发起的非正式行业组织,旨在通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。

Bytecode Alliance 表示,加入联盟的这些组织都有一个共同的愿景,那就是建立一个 WebAssembly 生态以修复当今软件基础中的裂缝,这些裂缝阻碍了整个行业及其软件供应链在未来实现安全、高性能、跨平台和跨设备的发展。Bytecode Alliance 成员认为,有效的多方利益相关者合作对于实现软件基础的这一愿景至关重要,该愿景使安全性、效率和模块化能够在尽可能广泛的设备和架构中共存。

WebAssembly 是由 C/C++ 等高级语言生成的低级字节码,由于其内存安全性(如 Rust),它是一种类似汇编的编程语言或结构化堆栈机,而不是像 JVM 那样的通用堆栈机。作为高级语言的编译目标,WebAssembly 或 wasm 库经常被添加到基于网络的应用程序中,以处理计算密集型操作。

参考

理解WebAssembly文本格式
WebAssembly初步
https://github.com/WebAssembly/spec
https://webassembly.org/
https://www.w3.org/TR/wasm-js-api