先看一个完整过程
源码 → 编译 → Wasm → 运行时 → 宿主能力。下面的动画用同一个照片例子把它们串起来。
先用一段照片处理逻辑,理解 WebAssembly(Wasm)是什么、怎样运行、与 JavaScript 有什么关系;再进入组件化、标准进展和 Agent 时代的深度研究。
表示该章节含 SVG 动画,目录和正文使用同一标识。
按“入门 → 架构装配 → Agent 洞察”阅读,也可直接定位单张图。图号表示阅读顺序,不表示技术成熟度。
入门 · 1 张图
手机默认纵向阅读;需要完整桌面构图时使用播放器的“查看细节”。图旁提供本图链接、前后图和返回目录入口。链接只定位图,不设定播放时间。
零基础入口。先理解程序如何被运行,再看版本号、组件模型和 Agent。
.wasm,由支持它的运行时执行;不是让 CPU 直接识别一种新的程序文件。[B1] [B7]源码 → 编译 → Wasm → 运行时 → 宿主能力。下面的动画用同一个照片例子把它们串起来。
Module、Runtime、Host、WIT、Component、WASI 各有职责。进入术语速查。
生成代码之后,怎样验证、限权、版本化并重复调用?跳到 Agent 深度章节。该部分保留研究假设标记。
机制示意
读图结论:源码先编译为 Wasm,再由运行时执行;照片例子用 JS 与 Wasm 的分工说明这一过程。
阅读顺序:先看源码与编译,再看运行时和宿主;最后对照照片例子中传入像素、执行计算、显示结果的分工。
读图:五张卡依次高亮;照片例子展示 JS 与 Wasm 的分工。动画为说明性演示,本页没有真实执行图中的 Wasm 代码。可暂停、重播;手机默认纵向阅读,也能切换完整桌面图。
本图不证明:照片流程只是说明性演示,本页没有执行对应的 Wasm 代码,也没有给出性能测试。
依据与验证:WebAssembly 定义 · JS 协作与 FAQ
先分清谁负责计算、谁负责执行、谁提供外部能力。接口与组件定义见一手文档。[B4]
包含函数、内存与导入/导出等定义的程序单元。可以先把它理解为“一份能被装载的计算模块”,而不是完整操作系统。
负责校验、实例化与执行 Wasm 的引擎。浏览器可以内置引擎,应用也可以嵌入独立引擎。
承载运行时的环境或应用,并通过接口提供文件、网络、页面或领域服务。支持一个接口,不代表自动授予所有资源权限。
描述组件需要什么、提供什么,以及参数和结果的类型。它是接口合同,不是业务逻辑语言,也不是用户权限表。
在核心模块之上组织更丰富的接口与组合关系。一个组件可以包含模块或其他组件;普通核心模块不自动等于组件。
为文件、时钟、HTTP 等能力定义标准接口。它不是操作系统,也不等于宿主必须提供全部能力。
2026-10-07 增补。实线框表示包含,接口接头表示依赖绑定,外层边界区分制品与宿主。动画解释结构,不代表已运行编译器。
架构示例
读图结论:组合可以在内部满足一部分接口依赖,剩余依赖仍需要宿主提供。
阅读顺序:先看包含关系,再对准 Reporter 与 Formatter 的接口接头;最后找组合边界之外的 store 导入。
看图方法:Core 模块轻微入位,接口接头靠拢,组合边界与宿主框分阶段强调。所有内容始终保留,暂停在任何时间都能读完整架构。Reporter 使用 Formatter 的 format 导出;组合后 format 变成内部依赖,store 仍须外部提供。图中 @1 是版本标识的简写,并非完整 WIT 包名。[A3]
本图不证明:模块入位和接头靠拢只是解释结构,不证明已运行编译器、实现零拷贝或完成运行中热替换。
例如 WAC 把 Reporter 的 format 导入接到 Formatter 的导出,生成组合组件。没有被内部满足的依赖仍是外部导入;“拼成一个文件”不等于依赖或权限消失。[A3]
宿主注册接口实现,连接组件所需的 imports,然后实例化。以 Wasmtime 的常规 Linker 路径为例,缺少导入或类型不匹配会报错;资源权限仍需宿主配置。[A4]
LRI 推演:Agent 可以选择已经验证的组合制品,也可以提出新的组合方案;但部署、授权和验证仍由应用机制落实。一次工具调用不是一次二进制组件组合。
world 描述需要与提供的接口;Canonical ABI 规定类型值在二进制边界的表示与传递。它们帮助跨语言互操作,但不是共享同一套语言内部对象,也不能据此承诺零拷贝。[A2] [A6]
工程判断:替换存储或排版实现后,还要检查错误语义、状态、性能、权限与回退。构建时重组、新实例装配和运行中热替换是三个不同问题;图中的装配动画不证明后者。
架构示例
读图结论:浏览器、服务端与 Agent 应用分别需要匹配的运行时和宿主接口。
固定 Reporter、Formatter、输入与 report 接口;分别接入内存存储和持久化存储。检查组合产物的外部 WIT、剩余导入、输出一致性、错误语义、权限范围与资源预算;缺失接口或版本不匹配应明确失败。随后验证新实例的状态接续与回退。当前是新增实验设计,尚未实施真实 WAC 编译或跨宿主部署。
理解能力边界,比记住术语更重要。
不等同。它通常是编译目标;也有可手写的文本形式 WAT,但这不改变它与 Rust、JavaScript 等源语言的分工。[B1]
不是性能保证。要对实际计算、编译装载、数据传递和宿主调用一起测量。能够互补不等于需要把全部逻辑迁移。[B2]
不是。Wasm 是候选执行底座;Agent 仍需要验证、授权、版本管理与故障恢复。后文对此作研究推演,不把方向判断写成已验证结果。进入 Agent 章节。
事实、趋势判断和待验证假设分开。
2025 年 Wasm 3.0 把 core language 的大块长期缺口一次性补齐:memory64、多 memory、GC、typed references、tail calls、原生异常、relaxed SIMD 和 deterministic profile。2026 年生态重心明显上移:WASI 0.3 把 async/future/stream 下沉为 Component Model 原语,0.3.1 开始形成固定 release train;与此同时 Component Model 1.0 的路线已经从“功能够不够”转向“ABI 是否足够轻、浏览器能否原生、线程/资源/包管理/调试能否形成生产闭环”。未来 Wasm 的竞争力更可能来自组件边界,而不是单个模块跑分。
本次新增基础导读与可视化,不把旧时间线重新标记为全量最新核验。
2025-09-17 发布的 Wasm 3.0 将 memory64、多 memory、GC、typed references、tail calls、exception handling、relaxed SIMD、deterministic profile 等并入正式标准,明显增强高层语言、超大内存、函数式/动态语言和可重放执行能力。
2026-06-11 发布 WASI 0.3.0:future、stream、async function 进入 Component Model/canonical ABI,解决 P2 中 pollable 无法自然穿过组件链的问题,让异步调用真正可组合。
2026-08-11 的 0.3.1 是 0.3.x 首个 point release,并宣布约每两个月一个版本、计划延续到 2027;新增 WIT 的 map<K,V> 以及 implements/external-id annotations,表明 Component Model 正从“大版本实验”走向连续演进。
Wasmtime 47 默认启用 Wasm GC 和 exceptions;截至 2026-09-24 最新维护版 49.0.1 已进入修正 fuel accounting、HTTP body memory exhaustion、WASI filesystem 边界等生产细节的阶段,说明核心能力正在从“实现”走向“硬化”。
Core Wasm 已足够成熟,差异化会转到 typed interface、组件组合、async、线程、零拷贝 ABI、包发布、record/replay、跨语言 bindings 与 host capability。价值单位从“一个 .wasm 模块”转向“一个可组合组件”。
Agent 不缺生成代码的能力,缺的是可限制权限、可复现、可版本化、可移植、可快速装载的运行边界。Wasm + WIT + capability host 很可能比“直接 shell / Python / native plugin”更适合作为模型生成程序的执行单元,但这一方向仍需系统级实测。
只列对架构判断有实质影响的里程碑。
| 时间 | 事件 | 技术含义 |
|---|---|---|
| 2025-09-17 | Wasm 3.0 completed | Core 标准一次性吸收 memory64、multi-memory、GC、typed refs、tail calls、EH、relaxed SIMD、deterministic profile;高层语言和大型非 Web workload 的基础明显加强。 |
| 2026-06-08 | 公开 Component Model 1.0 路线 | 工作焦点明确转向 lazy ABI、zero-copy forwarding、sync-call overhead、browser native、C ABI lowering、record/replay、WIT expressivity。 |
| 2026-06-11 | WASI 0.3.0 ratified | async/future/stream 成为 Component Model 原语;组件链异步语义正式进入标准路径。 |
| 2026-07-20 | Wasmtime 47 默认启用 GC + Exceptions | Core 3.0 的高层语言能力进入主流 standalone runtime 默认配置,而不是长期 feature gate。 |
| 2026-07-21 | WAMR 离开 Bytecode Alliance 独立发展 | 生态出现更明确分工:Bytecode Alliance 继续押注 Wasmtime/Component Model,嵌入式 runtime 可能形成更独立路线。 |
| 2026-08-11 | WASI 0.3.1 | 引入 map 与 implements annotations;正式建立 0.3.x 双月 release train。 |
| 2026-09-21/24 | Wasmtime 49.0.0 / 49.0.1 | 持续推进 EH/GC/CLI 与安全修复,runtime 正在进入快速迭代 + LTS/安全工程并行阶段。 |
Core Wasm 的能力边界已明显从 C/Rust 风格扩展到 GC 语言、函数式语言和大型内存应用。
内存/表可使用 i64 地址。理论地址空间到 16 EiB;Web 仍有限制,但 standalone runtime 可承载更大数据与 server workload。
安全隔离、public/private buffer、instrumentation、static linking 都更自然;也为后续“component smashing / lower-components”提供底层基础。
runtime 提供低层 struct/array/ref/GC primitives;Java/Kotlin/Scala/Dart/OCaml 等语言的 Wasm 路线因此更实际。
异常不再需要逃逸到 JS/host 模拟;tail calls 支持函数式语言、CPS、FSM 和 tracing/JIT 风格技术。
Relaxed SIMD 允许部分平台差异,同时标准又定义 deterministic profile,为区块链、可重放系统和需要跨平台一致性的执行环境提供明确选择。对 Agent 生成程序、审计回放、调试复现,这一点可能比“峰值 SIMD 性能”更重要。
64-bit memory、多个 address space、GC heap、typed function ref、EH、tail call 的组合,意味着源语言不必再强行折叠到“单线性内存 + 整数/浮点 + 手写 runtime”模型。
P2 的异步主要通过 wasi:io/pollable 建模,P3 把它下沉到 Component Model 自身。
bindings generator 可以直接生成语言原生 async API,不需要每个组件各自解释 pollable 协议。
跨组件边界表达延迟完成的结果,不再依赖 component-local pollable 中转。
适合 HTTP body、文件流、网络、生成式数据通道和长链 pipeline,重点是 wake-up/flow control 可以跨组件组合。
未来架构判断必须明确每个能力属于哪一层。
模块、指令、内存、表、GC、异常、线程等“计算机本体”。它不定义文件、网络、HTTP、GPU,也不定义高层语言之间如何传 string/record/resource。
定义组件如何 bundle/link/compose,以及 typed values、resources、interfaces、canonical ABI 如何跨隔离边界传递。它更像“Wasm 的微内核与 ABI”。
文件、socket、clock、HTTP、random 等 capability-secure OS/service interfaces。WASI 依赖 Component Model,但 Component Model 不依赖某一套 WASI service。
以下趋势以 Component Model 1.0 路线和当前 active proposals 为依据。
当前 canonical ABI 依赖 cabi_realloc,复杂返回值可能产生多次 host↔guest allocation/copy。1.0 路线提出 lazy value handles:callee 返回 opaque handle,caller 再把值直接 materialize 到目标位置,可支持未使用即 drop、零拷贝 forward,并减少 host round trip。
公开测量显示当前 async task machinery 曾给纯同步跨组件调用带来约 3.5× overhead。后续目标是把同步 adapter task 压到 stack 上,让 Cranelift 等优化器基本消掉额外成本。
cooperative threads 位于 Component Model 层;wasi-libc pthreads 大部完成、LLVM patch 已进入发布链、Wasmtime 有 feature-flag 实现。它被视为迈向 shared-everything threads 的关键桥梁。
Component Model 1.0 的公开条件之一是至少两个浏览器 engine 原生实现。当前 jco 可以 transpile 到 Core Wasm + JS glue,并用 “use components” telemetry 为原生实现积累真实使用证据;Mozilla/V8 都在关注,但尚不能写成已承诺。
wkg/OCI、wac composition、wit-bindgen、guest/host C ABI、“component smashing”、包版本与 interface compatibility 会成为生产工程重点。WASI 0.3 已要求 phase-2 proposal 有 OCI-published artifact,说明 registry/包分发正在进入标准流程。
公开 1.0 路线展示了用 instrumentation component 包裹 imports/exports,把 WIT-level calls 记录为 WAVE,再脱离原 host 重放。共享无状态/显式接口让这种调试能力比传统进程更自然。
2026 年同时存在多条并发路线,成熟度不同。
| 能力 | 当前状态(2026-09) | 作用 | 判断 |
|---|---|---|---|
| Core Threads | Phase 4 | shared memory + atomics 的核心线程基础 | 标准化程度高,但 standalone “如何 spawn” 仍需要上层系统接口 |
| Stack Switching | Phase 3 | continuation / coroutine / language runtime control | 重要但不再是 WASI 0.3 async 的前置条件;P3 async 已走 Component Model 路线 |
| Cooperative Threads | Component Model 后续 P3 minor,实现进行中 | 让 std::thread::spawn 等语言线程模型跨组件工作 | 短期最值得关注的组件并发能力 |
| Shared-Everything Threads | Phase 1 | 多个组件/模块更深层共享 heap/runtime state | 长期方向,可能显著提高共享语言 runtime 的效率,但复杂度/隔离成本更高 |
| Wide Arithmetic / Custom Page Size | Phase 3 | 扩大数值/内存表达与 runtime 调优空间 | 属于 Core 持续演进,不是 Component Model 主线但会改善专业 workload |
过去几年 WASI/Component Model 主要在 server/edge 先走,1.0 路线开始明确要求浏览器原生回归。
任何 component 可以 transpile 为 Core Wasm + JS glue 在浏览器运行。它解决“现在能不能跑”,同时通过实际 usage telemetry 帮助浏览器厂商判断 native implementation 的价值。
如果浏览器原生支持 WIT/component,并结合 WebIDL imports,Rust/Go/Python/Java 等组件可以用同一种 interface/packaging 逻辑跨 Web、server、edge 分发。这个愿景仍受浏览器实现投入和 ABI 简化进度约束。
这是基于标准特性的 LRI 推论,不是 WebAssembly 官方 roadmap。
LRI 架构推演
读图结论:生成只是候选起点,验证、权限与版本管理之后才讨论可复用执行路径。
阅读顺序:按六幕看实际形变:接口与逻辑拼合;接头不匹配先回弹、修正后嵌合;检查完成后闸门才开启;程序入位;Host 区分允许读与拒绝写;异常携带记录返回 Agent。
读图重点:Agent 负责高自由度 reasoning;WIT/Component 把程序契约、类型与 capability surface 显式化;通过验证的 Wasm artifact 才进入可复用 Fast Path。Record/replay 与版本证据用于判断是否值得长期沉淀,而不是把“生成出来”直接等同于“可以上线”。
本图不证明:这条链是 LRI 系统推演,不是标准自带的完整 Agent 平台,也不是已经通过的上线验收。
待验证比较
读图结论:程序记忆要回答的是验证后的重复调用何时值得,而不是保证总比逐次推理便宜。
阅读顺序:按六幕比较:重新推理的步骤轮转;候选装配;版本指示器在验证通过后切换;多个请求复用原位的 vN;新情况被退回 Agent;最后把前期投入与后续调用、维护放在一起计算。
Program Memory 不是 prompt cache:它把通过验证的 reasoning 结果变成具备 contract、version、evidence 与 rollback 的执行资产。真正应实验的是 break-even:调用频率、reasoning 成本、任务变更率、验证成本与回放/治理收益在什么条件下使“生成一次、调用多次”明显优于每次重新 reasoning。
本图不证明:本图没有实测盈亏平衡点;调用频率、环境变化和验证成本需要在同一任务下比较。
依据与验证:E5 等验证计划
Agent 生成代码后,不必默认落到 shell/native/python 全权限环境。Wasm 可以用 import surface 精确描述能力,让生成程序只能调用被注入的 Host resources。
WIT interface 比“函数名 + JSON schema”更接近可编译 ABI:资源、stream、future、result、record 都是强类型。Agent 可生成组件,再由 host 在装载时完成类型/能力检查。
Agent 经常把反复成功的动作固化成程序。Wasm 的小体积、AOT/JIT、版本化二进制和 deterministic profile 适合承载这种“动作记忆”,尤其是高频、重复、无需每次 reasoning 的路径。
Component Model 的目标不是所有 Skill 都用同一种语言,而是让 Rust/C/Go/Python/JS/GC language 在统一 typed boundary 下组合。未来 Skill/Plugin 市场更可能按 WIT contract 而不是源码语言组织。
组件 imports/exports 是天然切点,可以插入 tracing、quota、auth、policy、record/replay 组件,而不必修改业务二进制;这对 Agent 动态加载不可信第三方能力尤其重要。
Wasm 只能限制“通过 Host imports 暴露的能力”;Host API 设计错误、资源泄漏、side-channel、DoS、runtime 漏洞仍存在。Wasmtime 49.0.1 的多项安全/资源修复正说明生产沙箱需要持续 hardening。
LRI 架构推演
读图结论:Wasm 被放在程序执行边界,不替代规划、长期记忆、宿主授权或设备安全。
阅读顺序:自上向下区分语义智能、程序记忆、Wasm 执行边界、Host 能力和真实副作用层。
边界判断:Wasm 最可能承担的是 Program Execution Boundary,而不是 Planner、长期记忆、全部 capability authority 或真实设备安全本身。系统安全来自 Agent policy、Program Memory、Wasm runtime、Host API、OS/设备五层共同设计。
本图不证明:五层划分是本专题的分析框架,不是官方唯一架构;沙箱不能独自提供整栈安全。
待验证比较
读图结论:比较重点是权限如何授予、执行如何约束,不是按语言名称判定哪种方式天然安全。
阅读顺序:先对比环境可触达能力与显式导入,再查看启动、内存、回放和可观测性等实验维度。
这不是“Wasm 一定更快”的宣传图,而是 E5 实验的治理假设:真正要对比 Shell、Python、Native、Core Wasm、Wasm Component 的 permission surface、启动、RSS、deterministic replay、artifact size、throughput 与 observability。
本图不证明:这是比较框架,不是性能排名;没有证明 Wasm 在所有任务中更快或绝对安全。
当前最值得警惕的不是标准功能缺失,而是实现复杂度、性能和生态一致性。
1.0 路线明确要从 cabi_realloc eager ABI 迁到 lazy ABI,说明当前 Component Model 并非最终形态;长期兼容靠 adapter 维持,而不是“二进制格式已经永久冻结”。
spec → wasm-tools → runtime → wit-bindgen → LLVM/Rust/CPython/Go 等有多个 release cadence。标准已发布不等于所有语言马上得到稳定支持。
jco 可以运行 component,但 native browser Component Model 仍在评估/推动阶段。真正统一 Web + Server 仍有工程与治理门槛。
从 shared-nothing module 到 async task/stream/thread,runtime 的 scheduling、resource lifecycle、cancellation、fuel、debug 复杂度快速上升。
Wasmtime/Component Model、WAMR/embedded、browser engines、WasmEdge 等可能选择不同 feature floor。可移植性必须由明确 profile/feature contract 管理,而不是假设“Wasm 都一样”。
组件边界能缩小权限,但 host capability 设计、供应链签名、OCI artifact provenance、资源限制和 runtime advisories 同样必须进入生产治理。
重点验证 2026 新能力对真实系统是否产生可量化收益。
| 实验 | 问题 | 指标 | 价值 |
|---|---|---|---|
| E1 · Core vs Component Sync | Component boundary 的同步开销到底多少? | ns/call、P50/P99、alloc/copy count、CPU | 验证 1.0 “zero-overhead sync” 是否是关键瓶颈 |
| E2 · P2 vs P3 Async Chain | A→B→Host 的 stream/future 是否显著简化并改善 async composition? | 代码量、wakeups、latency、throughput、RSS | 量化 WASI 0.3 的系统价值 |
| E3 · Lazy ABI / Splicing | 复杂值和大 stream 能否真正减少 copy? | bytes copied、host round trips、bandwidth、CPU | 验证 Component Model 1.0 性能主线 |
| E4 · GC Language | Java/Kotlin/Scala/Dart/OCaml 等 Wasm GC 路线相比自带 GC runtime 如何? | binary size、startup、RSS、GC pause、throughput | 判断 Wasm 是否真正扩大语言边界 |
| E5 · Agent-generated Component | Agent 生成 Wasm component 与 Python/shell fast path 谁更可治理? | 权限 surface、启动、RSS、审计、可重放、故障隔离 | 验证 Agent Runtime 新机会 |
| E6 · Record/Replay | WIT-level trace 能否稳定复现跨组件故障? | trace size、replay fidelity、debug time | 验证 Component Model 独特可观测性 |
| E7 · Runtime Matrix | Wasmtime/WAMR/WasmEdge/browser 的 feature floor 实际差多少? | proposal compatibility、startup、AOT、memory、component support | 防止“标准已完成=所有 runtime 一致”的误判 |
不是预测发布日期,而是按技术因果关系给出演进优先级。
lazy ABI、stream splicing、sync fast path 直接回应当前生产痛点,且已进入明确 1.0 路线。
0.3.1 已建立双月 release train,未来 0.3.x 将持续吸收成熟 Component features。
toolchain/runtimes 已有较深实现基础,短期落地概率明显高于 shared-everything threads。
是 1.0 必要条件且浏览器团队已在评估,但投入规模和时间仍不确定。
标准流程开始要求发布 artifact,wkg/wac 等工具已形成方向;能否形成统一“Wasm package ecosystem”取决于 discovery/signing/metadata。
技术属性高度匹配,但尚缺行业统一范式。应通过真实 Agent-generated code workloads 验证,而不是从沙箱特性直接外推。
可能提升共享 runtime/heap 的语言互操作效率,但会削弱 shared-nothing 的简单隔离模型,需要更复杂安全和生命周期语义。
组件在运行时创建组件,将打开 lazy loading、子任务、动态插件与 per-component lifetime;同时也把动态系统复杂度带进 Component Model。
优先使用 WebAssembly/WASI 官方仓库、Bytecode Alliance 与 Wasmtime release;趋势部分明确区分已发布与 roadmap。
Core 3.0 正式能力:memory64、multi-memory、GC、typed refs、tail calls、EH、relaxed SIMD、deterministic profile。
Primary · WASI2026-06 native async;2026-08 map、implements annotations 与双月 release train。
Primary · Bytecode Alliancefuture/stream/async 与 Component Model native async 的动机和架构变化。
Primary · Roadmaplazy ABI、zero-copy、浏览器、C ABI、record/replay、cooperative threads、WIT expressivity。
Primary · RuntimeWasm 3.0 高层语言能力在主流 standalone runtime 默认启用。
Primary · Release2026-09-24 最新维护版及 fuel、HTTP body memory exhaustion、WASI filesystem 等生产修复。
Primary · StandardsThreads、Stack Switching、Wide Arithmetic、Custom Page Sizes、Shared-Everything Threads 等当前 phase。
Primary · Component Model0.2/0.3/0.3.1 feature baseline,以及后续 cooperative threads 等 gated feature。