WebAssembly 的 二进制格式 旨在在各种操作系统和指令集体系结构上高效执行,在 Web 上 和 在 Web 之外。
尽管 有限、局部、非确定性,但无法提供以下特征的执行环境仍然可以执行 WebAssembly 模块。 在某些情况下,它们可能需要模拟主机硬件或操作系统不提供的行为,以便 WebAssembly 模块如同支持该行为一样执行。 这有时会导致性能低下。
随着 WebAssembly 标准化的推进,我们预计将正式确定这些要求,以及 WebAssembly 如何适应 WebAssembly 最初设计时不存在的新平台。
WebAssembly 可移植性假定执行环境提供以下特征
WebAssembly 不指定任何 API 或系统调用,只指定一个 导入机制,其中可用的导入集由主机环境定义。 在 Web 环境中,功能通过 Web 平台 定义的 Web API 访问。 非 Web 环境可以选择实现标准 Web API、标准非 Web API(例如 POSIX)或发明自己的 API。
可以通过对标准 API(例如 POSIX)进行编程并在编译时(通过 #ifdef
)或运行时(通过 特性检测 和动态 加载/链接)依赖编译器和/或库将标准接口映射到主机环境的可用导入来实现 C/C++ 级别的可移植性。