WebAssembly (WASM) – 深入探讨:第 1 部分
这篇文章开启了探索 WebAssembly 的系列。 在下面查找该系列其他部分的链接。
WebAssembly,或 WASM,是一种低级的、类似汇编的语言,旨在运行在 Web 浏览器中使用各种编程语言构建的应用程序。 其跨平台特性和底层设计提供了接近原生的速度,解锁了以前仅使用 JavaScript 无法实现的 Web 功能。 如果您渴望能够处理计算密集型任务的更快的 Web 应用程序,那么 WASM 就是解决方案。本介绍将涵盖 WASM 的核心功能、其起源以及如何开始使用它。
WebAssembly 是专为 Web 浏览器设计的低级编译目标。 它不是一种直接执行的语言;相反,它定义了一个类似程序集的结构,其他语言可以将其编译成。这个“编译目标”方面是关键。
考虑这个 C 代码示例:
<code class="language-c">int a = 1; int b = 2; int c = a + b;</code>
C 编译器将其翻译为汇编指令(或机器代码):
<code class="language-assembly">mov eax, 1 ; Load 1 into register EAX mov ebx, 2 ; Load 2 into register EBX add eax, ebx ; Add EAX and EBX, result in EAX</code>
这又会产生二进制表示:
<code>00000000000000000000000000000011</code>
(注意:确切的二进制输出因 CPU 架构而异。这是一个简化的说明。)
C 代码转换为汇编代码,然后转换为二进制文件——可由计算机直接执行。 WebAssembly 修改了这个过程。 编译器可能会生成:
,而不是标准汇编<code>$a int $b int $c int set $a 1 set $b 2 set $c = add $a $b</code>
(这是仅用于说明目的的假设语法,并非实际的 WASM 语法。)
如果所有浏览器都能理解这种语法,它将彻底改变 Web 开发。 C、Rust 和 Go 等语言的编译器可以生成此输出,从而使浏览器能够执行用任何语言编写的程序,无论操作系统或浏览器如何。
W3C 定义的 WebAssembly 规范确保浏览器对 WASM 的处理保持一致。 主流浏览器已经原生支持 WebAssembly。
WebAssembly 有两种主要格式:
这些格式是可以互换的; WAT 可以转换为 WASM,反之亦然。 编译为任一版本都是可能的。
让我们回顾一下使用 WAT 的示例:
<code class="language-c">int a = 1; int b = 2; int c = a + b;</code>
<code class="language-assembly">mov eax, 1 ; Load 1 into register EAX mov ebx, 2 ; Load 2 into register EBX add eax, ebx ; Add EAX and EBX, result in EAX</code>
<code>00000000000000000000000000000011</code>
WebAssembly 使用堆栈机。 get_local
将值压入堆栈,i32.add
添加堆栈顶部的两个元素,set_local
存储结果。 WASM 二进制等效项是:
<code>$a int $b int $c int set $a 1 set $b 2 set $c = add $a $b</code>
虽然这看起来很复杂,但请记住 WASM 是编译目标,而不是主要编程语言。 您通常会使用高级语言编写代码并编译为 WASM。
不。 WASM 旨在补充 JavaScript,而不是取代它。 JavaScript 擅长 DOM 操作和基本的 Web 交互,而 WASM 则以接近原生的性能处理计算密集型任务。 这种协同作用可以实现高效的任务分配。
WASM 的性能使其非常适合:
现有 WASM 应用程序的示例包括 Figma、Amazon Prime Video 和 Google Earth。
虽然最初以浏览器为中心,但 WASM 的功能通过 WASI(WebAssembly 系统接口)扩展到了 Web 之外。 WASI 提供标准 API,允许从单个二进制文件创建跨平台应用程序,从而无需特定于平台的构建。
之前的几个项目尝试在浏览器中运行其他语言,但由于缺乏标准化、安全漏洞或性能问题(ActiveX、Java Applets、Flash、NaCl、asm.js、Dart),经常面临限制。 WebAssembly 通过标准化、可移植性、安全性、性能和可扩展性解决了这些缺点。
本介绍提供了 WebAssembly 的高级概述。后续帖子将更深入地探讨特定主题并探索实用的 WebAssembly 项目。
以上是WebAssembly 简介的详细内容。更多信息请关注PHP中文网其他相关文章!