{"name":"WebAssembly","id":"编程语言-WebAssembly","content":"# WebAssembly\n\n## 一、WebAssembly 的本质定位\n\nWebAssembly（Wasm）并不是一门编程语言，而是一种**面向多宿主环境的虚拟指令集架构（Virtual ISA, V-ISA）**。\n\n* 对应物理世界中的 ISA（如 x86 / ARM），Wasm 作用于**虚拟执行体系**\n* JVM 与 Wasm 同属 V-ISA，但设计目标不同：\n\n  * JVM 面向对象与托管运行时\n  * Wasm 面向**可验证、安全、可移植的底层执行模型**\n\n**第一性原理**：\n\n> Wasm 的核心目标不是\"替代 JavaScript\"，而是提供一种 *跨语言、跨平台、可沙箱化执行的最小通用计算抽象*。\n\n---\n\n## 二、整体系统分层模型（认知骨架）\n\n```\n┌────────────────────────────┐\n│        应用 / 语言层        │  C / C++ / Rust / Go / …\n├────────────────────────────┤\n│        编译与 IR 层         │  LLVM IR → WASM Binary\n├────────────────────────────┤\n│     WebAssembly 指令集      │  Stack VM / Binary Format\n├────────────────────────────┤\n│   系统抽象层（WASI）        │  Capability-based API\n├────────────────────────────┤\n│        Wasm 运行时          │  Wasmtime / Wasmer / WAMR\n├────────────────────────────┤\n│        宿主环境             │  Browser / OS / Cloud / Edge\n└────────────────────────────┘\n```\n\n该分层模型体现了 Wasm 的核心设计思想：**强边界、弱假设、最小抽象**。\n\n---\n\n## 三、Wasm 二进制模块的架构模型\n\nWasm 模块是一种**自描述、可验证、与平台无关的二进制单元**。其内部结构由一组 Section 组成，但 Section 的本质并非“文件格式”，而是**系统能力的声明集合**。\n\n### 3.1 模块能力分类模型\n\n| 能力维度 | 对应 Section             | 设计意图      |\n| ---- | ---------------------- | --------- |\n| 类型系统 | Type                   | 行为签名的前置声明 |\n| 行为映射 | Function / Code        | 类型与实现的分离  |\n| 状态模型 | Global / Memory / Data | 显式状态与线性内存 |\n| 动态分发 | Table / Element        | 间接调用与多态   |\n| 生命周期 | Start                  | 模块初始化钩子   |\n| 边界接口 | Import / Export        | 能力与依赖显式化  |\n| 元数据  | Custom                 | 调试与工具支持   |\n\n### 3.2 魔数与版本\n\n* 魔数：`0x00 0x61 0x73 0x6d`（\"\\0asm\"）\n* 版本号：MVP 为 `0x01`\n\n**意义**：确保模块在加载前即可被快速识别与验证。\n\n---\n\n## 四、执行模型：栈式虚拟机与指令设计\n\nWasm 采用**栈式虚拟机模型**，其设计权衡包括：\n\n* 指令紧凑，便于二进制压缩与网络传输\n* 易于静态验证（无隐式寄存器依赖）\n* 降低后端 JIT / AOT 的复杂度\n\n### 4.1 数值与编码模型\n\n* 固定宽度整数：`uintN`\n* 变长整数：`varuintN / varintN`\n* 统一使用 LEB128 编码\n\n**设计哲学**：以编码复杂度换取传输与存储效率。\n\n---\n\n## 五、WAT：可读的等价表示\n\nWebAssembly Text Format（WAT）是 Wasm 二进制的**语义等价文本表示**，主要用于：\n\n* 人类阅读与调试\n* 工具链中间表示\n\n### 5.1 S-表达式与 Flat-WAT\n\n* S-表达式：强调嵌套求值顺序（类似 Lisp）\n* Flat-WAT：显式指令序列，贴近 VM 执行模型\n\n### 5.2 工具链\n\n* `wasm2wat`\n* `wat2wasm`\n* `wat-desugar`\n\n---\n\n## 六、运行时模型与内存体系\n\n### 6.1 实例化语义\n\n* 每个 Wasm 模块实例：\n\n  * 拥有独立调用栈\n  * 拥有私有线性内存（MVP 阶段仅 1 个）\n\n### 6.2 线性内存模型\n\n* 内存以 Page（64KB）为单位增长\n* 在浏览器中通常映射为 `ArrayBuffer`\n\n**核心思想**：\n\n> 无指针共享、无隐式对象、无宿主内存污染。\n\n---\n\n## 七、WASI：系统调用的抽象层\n\nWASI（WebAssembly System Interface）是 Wasm 在 Web 之外可运行的关键。\n\n### 7.1 设计目标\n\n* 与操作系统解耦\n* 与具体平台无关\n* 明确能力边界\n\n### 7.2 Capability-based Security\n\n* 模块默认无权限\n* 权限通过 Import 显式授予\n* 权限不可隐式扩散\n\n**对比传统 OS**：\n\n* fd / socket ≈ capability handle\n\n---\n\n## 八、纳米进程（Nanoprocess）模型\n\n在 Wasm 语义下：\n\n> **模块实例 = 最小隔离执行单元**\n\n特征：\n\n* 私有内存\n* 私有栈\n* 显式能力集\n* 无全局共享状态\n\n权限规则：\n\n* 所有 capability 均来自调用者\n* 不存在“越权系统调用”\n\n该模型天然适配：\n\n* Serverless\n* Edge Computing\n* 多租户环境\n\n---\n\n## 九、宿主环境与加载模型（以浏览器为例）\n\n### 9.1 生命周期\n\n1. fetch：获取二进制\n2. compile：编译为平台代码\n3. instantiate：绑定导入并初始化\n4. call：执行导出函数\n\n### 9.2 Web API\n\n* `WebAssembly.Module`\n* `WebAssembly.instantiate`\n* Streaming API\n\n---\n\n## 十、运行时实现生态\n\n| 运行时      | 特点        | 适用场景           |\n| -------- | --------- | -------------- |\n| Wasmtime | 标准友好、性能稳定 | 云 / Server     |\n| Wasmer   | 多语言绑定     | 平台集成           |\n| WAMR     | 轻量、C 实现   | IoT / Embedded |\n| WasmEdge | 云原生导向     | Edge / AI      |\n\n---\n\n## 十一、编译体系与语言生态\n\n* 多语言 → LLVM IR\n* `llc` → WASM\n\n**本质**：\n\n> Wasm 是 LLVM 生态的可执行终点之一。\n\n---\n\n## 十二、能力边界与局限性\n\n* DOM 操作需经宿主桥接\n* 复杂数据类型需显式编解码\n\n这是 Wasm **强隔离换取安全与可移植性** 的必然代价。\n\n---\n\n## 十三、应用定位与长期演进\n\n### 当前稳定价值\n\n* 浏览器中的计算密集任务\n* 统一的跨语言执行格式\n\n### 演进方向\n\n* Component Model\n* WASI Preview 2\n* 更强的模块组合能力\n\n---\n\n## 总结\n\nWebAssembly 是一种：\n\n> **以安全、可验证、最小能力集为核心的通用执行抽象**。\n\n它不是某一语言的替代品，而是未来多计算环境的**公共底座**。\n\n---\n\n## 关联内容（自动生成）\n\n- [/编译原理/编译原理.md](/编译原理/编译原理.md) WebAssembly与编译原理密切相关，Wasm作为编译目标，连接了高级语言与底层执行模型，体现了编译器前端、中间表示和后端优化的完整流程\n- [/编程语言/Rust.md](/编程语言/Rust.md) Rust是WebAssembly生态系统中最活跃的语言之一，Rust的内存安全特性与Wasm的安全执行模型相结合，为Wasm生态提供了强大的底层开发能力\n- [/软件工程/架构/Web前端/Web前端.md](/软件工程/架构/Web前端/Web前端.md) WebAssembly与前端技术密切相关，是现代Web前端架构中的重要组成部分，用于提升计算密集型任务的性能\n- [/操作系统/操作系统.md](/操作系统/操作系统.md) WebAssembly的虚拟指令集架构与操作系统的虚拟化和抽象概念有相似之处，Wasm的执行模型借鉴了操作系统的安全和隔离机制\n","metadata":"tags: ['编程语言', '执行与运行时', '数据技术']","hasMoreCommit":false,"totalCommits":5,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2025-12-17T17:17:23+08:00","author":"MY","message":"feat(doc): 更新 WebAssembly 文档结构与内容","hash":"8c8fa5a36144e62ad5fc5c5f30eb88658ca60e30"},{"date":"2022-11-30T17:06:22+08:00","author":"cjiping","message":"✏️wasm","hash":"cc344486ece0f3518cdde17a00184b55d790ceed"},{"date":"2022-11-29T15:20:34+08:00","author":"cjiping","message":"✏️wasm","hash":"f1c153f8751648af2f91f80486f9b0d46d2013b0"},{"date":"2022-11-28T15:06:25+08:00","author":"cjiping","message":"➕wasm","hash":"45403fd551cc1f5954ad883c6977e3da2c98a49f"}],"createTime":"2022-11-28T15:06:25+08:00"}