分类:wasm| 发布时间:2024-12-26 08:56:00
WebAssembly(缩写为 Wasm[1])是一种安全、可移植、低级别的代码格式,旨在实现高效执行和紧凑表示。 它的主要目标是支持 Web 上的高性能应用程序,但它并未做出任何 Web 特定的假设,也没有提供 Web 特定的功能,因此它也可以在其他环境中使用。
WebAssembly 是由 W3C 社区组 开发的开放标准。
本文档描述了 WebAssembly 核心标准的版本 2.0(草案 2024-12-18)。 预计未来将会有新的增量版本发布,包含更多的功能,逐步取代当前版本。
WebAssembly 的设计目标如下:
WebAssembly 代码还旨在便于检查和调试,尤其是在像网页浏览器这样的环境中,但此类功能超出了本规范的讨论范围。
注解:
从本质上讲,WebAssembly 是一种虚拟指令集架构(虚拟 ISA)。 因此,它具有多种用途,可以嵌入到许多不同的环境中。 为了涵盖这些多样性并实现最大程度的重用,WebAssembly 规范被分为多个文档,并按层次进行组织。
本文档关注的是 WebAssembly 的核心 ISA 层。 它定义了指令集、二进制编码、验证和执行语义,以及文本表示。 然而,它并没有定义 WebAssembly 程序如何与其执行的特定环境交互,也没有定义它们如何从该环境中被调用。
相反,本规范通过其他文档加以补充,这些文档定义了与特定嵌入环境(如 Web)的接口。 每个文档将定义一个适用于特定环境的 WebAssembly 应用程序接口(API)。
WebAssembly 不提供对执行代码的计算环境的直接访问。 与环境的任何交互,如输入输出、资源访问或操作系统调用,必须通过调用嵌入者提供的函数,这些函数被导入到 WebAssembly 模块中。 嵌入者可以通过控制或限制其为导入提供的功能能力,建立适合特定环境的安全策略。 这些安全性考虑是嵌入者的责任,并且是特定环境 API 定义的内容。
由于 WebAssembly 旨在被转换为直接在宿主硬件上运行的机器代码,因此它可能容易受到硬件层面的侧信道攻击。 在存在此类风险的环境中,嵌入者可能需要采取适当的缓解措施,以隔离 WebAssembly 的计算过程。
WebAssembly 依赖于两个现有的标准:
然而,为了使本规范自包含,本规范对上述标准相关方面进行了定义和重整(如浮点值的二进制表示和舍入、Unicode 字符的值范围和 UTF-8 编码)。