WebAssembly 2.0 标准预览版可用

W3C 发布了新规范草案,对 WebAssembly 2.0 中间件及其相关 API 进行标准化,从而能够创建可跨浏览器和硬件平台移植的高性能应用程序。 WebAssembly 提供独立于浏览器的、通用的、低级中间代码,用于运行从各种编程语言编译的应用程序。 通过将 JIT 用于 WebAssembly,您可以获得接近本机代码的性能水平。

WebAssembly 技术允许使用 C/C++ 等编译语言编写代码,可用于在浏览器中执行高性能任务,例如视频编码、音频处理、图形和 3D 操作、游戏开发、加密运算和数学计算。

WebAssembly 的主要目标之一是确保可移植性、可预测的行为以及在不同平台上相同的代码执行。 最近,WebAssembly 还被推广为跨任何基础设施、操作系统和设备安全执行代码的通用平台,而不仅限于浏览器。

W3C 发布了 WebAssembly 2.0 的三份规范草案:

  • WebAssembly Core - 描述用于运行 WebAssembly 中间代码的低级虚拟机。 与 WebAssembly 相关的资源以“.wasm”格式提供,类似于 Java 中的“.class”文件,包含静态数据和用于处理该数据的代码段。
  • WebAssembly JavaScript 接口 - 提供用于与 JavaScript 集成的 API。 允许您接收值并将参数传递给 WebAssembly 函数。 WebAssembly 的执行遵循 JavaScript 安全模型,所有与主系统的交互都以与执行 JavaScript 代码相同的方式进行。
  • WebAssembly Web API - 定义基于 Promise 机制的编程接口,用于请求和执行“.wasm”资源。 WebAssembly 资源格式经过优化,无需等待文件完全加载即可开始执行,从而提高了 Web 应用程序的响应能力。

与第一版标准相比,WebAssembly 2.0 的主要变化:

  • 支持 v128 向量类型和相关向量指令,允许您并行对多个数值执行操作(SIMD,单指令多数据)。
  • 能够导入和导出可变全局变量,允许对值进行全局绑定,例如C++中的堆栈指针。
  • 新的 float 到 int 转换指令,在结果溢出时不会抛出异常,而是返回最小或最大可能值(SIMD 必需的)。
  • 整数符号扩展的说明(增加数字的位深度,同时保持符号和值)。
  • 支持返回多个值的块和函数(除了向函数传递多个参数之外)。
  • 实现 BigInt64Array 和 BigUint64Array JavaScript 函数,以在 BigInt JavaScript 类型和 64 位整数的 WebAssembly 表示形式之间进行转换。
  • 支持引用类型(funcref 和 externref)和关联指令(select、ref.null、ref.func 和 ref.is_null)。
  • Memory.copy、memory.fill、memory.init 和 data.drop 指令用于在内存区域之间复制数据和清除内存区域。
  • 直接访问和修改表的说明(table.set、table.get、table.size、table.grow)。 能够在一个模块中创建、导入和导出多个表。 用于以批处理模式复制/填充表的函数(table.copy、table.init 和 elem.drop)。

来源: opennet.ru

添加评论