W3C揭幕 最近通过一个帖子 新规范草案 标准化的准备代码 WebAssembly 2.0 和相关的 API 能够创建可跨浏览器和硬件平台移植的高性能应用程序。
对于那些刚接触 WebAssembly 的人,你应该知道 这提供了一个通用中间件, 低电平和 独立于浏览器,运行已编译的应用程序 来自各种编程语言。 通过将 JIT 用于 WebAssembly,您可以获得接近原生代码的性能水平。
关于 WebAssembly
WebAssembly 可用于在浏览器中执行高性能任务,例如视频编码、音频处理、3D 和图形操作、游戏开发、密码运算和数学计算,通过执行用 C/C++ 等编译语言编写的代码。
WebAssembly 的主要任务之一是在不同平台上提供可移植性、行为可预测性和代码执行身份。 最近,WebAssembly 也被推广为在任何基础设施、操作系统和设备上安全执行代码的通用平台,不仅限于浏览器。
关于 WebAssembly 2.0 草案
自 WebAssembly 以来所做的部分更改是 WebAssembly 2.0 的最终提案,包括固定宽度 SIMD、大容量内存操作、引用类型、JavaScript BigInt 对 WebAssembly i64 的支持、对多个返回值的支持以及可变的导入/导出全局变量。
W3C 发布了三个 WebAssembly 2.0 规范草案:
- Web 组装核心: 描述了用于运行中间 WebAssembly 代码的低级虚拟机。 与 WebAssembly 相关的资源采用“.wasm”格式,类似于 Java“.class”文件,其中包含静态数据和用于处理该数据的代码段。
- WebAssembly JavaScript界面: 提供与 JavaScript 集成的 API。 允许您获取值并将参数传递给 WebAssembly 函数。 WebAssembly 执行遵循 JavaScript 安全模型,与主机的所有交互都以类似于运行 JavaScript 代码的方式执行。
- WebAssembly Web API: 定义了一个基于 Promise 机制的 API,用于请求和执行“.wasm”资源。 WebAssembly 资源格式经过优化,无需等待文件完全下载即可开始执行,从而提高了 Web 应用程序的响应能力。
WebAssembly 和 WebAssembly 2.0 的区别
另外,需要注意的是,WebAssembly 2.0 与标准的第一版相比有一些重要的变化:
- v128 向量类型支持 以及相关的向量指令,允许您对多个数值并行执行操作(SIMD,单指令,多数据)。
- 能够导入和导出可变全局变量,它允许将值全局绑定为 C++ 中的堆栈指针。
- 将 float 转换为 int 的新指令,而不是在结果溢出时引发异常,而是返回最小或最大可能值(SIMD 需要)。
- 扩展整数符号的说明 (增加保持符号和值的数字的位深度)。
- 支持按块和函数返回多个值 (以及将多个参数传递给函数)。
- 实现 JavaScript 函数 BigInt64Array 和 BigUint64Array 在 JavaScript 类型 BigInt 和 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)。
最后,如果你有兴趣了解更多,可以咨询详情 在下面的链接中。