• WebAssembly在现实世界中可以做什么?
  • 发布于 2个月前
  • 180 热度
    0 评论
WebAssembly 的计算潜力引起了广泛关注,但要真正将其潜力完全发挥出来可能需要相当长的时间,可能需要一到两年的时间,因为有很多挑战需要克服。其中一个挑战是确保 WebAssembly 模块支持所有编程语言,尽管目前主要局限于少数几种语言,如 Rust、C++、Python 和 JavaScript。其他语言仍然面临一些障碍,当开发人员编写代码并一次性部署到多种设备和环境(当然所有设备和环境都兼容)时,即使是 Rust 和 C++ 以及 Python 也会遇到问题。

那么,WebAssembly 的目标是什么呢?虽然号称 “一次编写,到处部署”,但更准确的说法可能是你可以编写代码一次,然后在任何 CPU 或设备上同时部署,而且只需极少的配置,甚至无需配置。在某种程度上,可以把它看作是一种高效的编译器(尽管某些人可能有不同看法)。

一.标准定义
根据标准定义,WebAssembly 是一种面向堆栈的虚拟机的二进制指令格式,边缘云平台供应商 Fastly 杰出工程师 Luke Wagner 在 WasmCon 2023 的演讲中解释说:“Wasm 的设计是为编程语言提供便携式的编译目标。我认为这里的关键词是 '编译目标',这意味着我们可以将各种源语言编译成不同的本机指令集,也可以编译成 WebAssembly。然后,我们可以将这个 WASM 发送到浏览器或某种 WASM 引擎,它会在内部将其编译成实际运行的指令集。这为我们带来的好处包括可移植性、确定性(如果需要的话)、控制流完整性和子进程沙盒化。”

除了定义,还有必要看看 WebAssembly 在现实世界中可以做什么。Wagner 说:“那么,我们能用这些强大的功能做什么呢?在浏览器中,现在流行的用例包括运行大型代码库,尤其是 C++。” 例子包括 Unity、AutoCAD 和 Photoshop。此外,还可以将计算密集型的子任务从 JavaScript 转移到 Wasm,例如编解码、压缩、推理、加密和过滤器。

“在浏览器之外,将 Wasm 嵌入到现有系统中,使其更接近系统,也是常见的做法。”Wagner 说。“最后,人们正在使用 Wasm 来探索分布式计算的替代模型,比如无服务器、分布式参与者、记录和重放,以及边缘计算,类似于我们在 Fastly 所做的。”

WebAssembly 的用例正在不断扩展,但仍然需要进一步的工作和项目进展。例如,当组件结构更加标准化时,跨多种设备和环境的部署将变得更加可行。希望在不久的将来,可以实现这一目标,也许在一年半到两年内就可以实现。

二.像一台计算机?
最近在一次与 NGINX 产品管理高级总监 Liam Crilly 的对话中,他将 WebAssembly 类比为概念上的一台计算机。虽然 WebAssembly 不直接在物理设备上运行,但它有可能通过使用 WebAssembly 模块在用于数据交换和部署的设备网络上运行,正如 Crilly 所解释的那样。

“WebAssembly 让我们重新思考我们需要的抽象,”Crilly 说。“从社会的角度来说,它使我们能够迈出下一步,而不是不断地被初步描述存储和计算的原始基元所限制。这就是为什么我在 Kubernetes 的背景下提到它,因为它仍然带有一些包袱。”

实际上,WebAssembly 可以被视为一种新型计算机。它具有一套指令集,类似于 CPU,从中派生了 “汇编” 部分。当你查看示例代码时,它在可读性良好的情况下与 CPU 指令集非常相似。这个简单的计算机能够执行传统计算机可以执行的任何任务,正如我们所知,这些任务非常广泛。重要的是,这个新的、简单的指令集成为所有编程语言的编译目标。基本上,任何高级编程语言都可以编译成特定硬件的 CPU 指令集,也可以编译成 WebAssembly 指令集。

此外,WebAssembly 可以被看作是一个强大的编译器目标,正如 Crilly 所解释的:“WebAssembly 的有趣之处在于它提供了编译器的优势,使你能够将高级语言转化为优化良好的指令集代码。” 然而,由于 WebAssembly 充当了一个抽象的计算机,它需要一个虚拟机或运行时来获取这个指令集,并在硬件上执行它。虽然这乍看起来像是一个额外的抽象层,但实际上非常巧妙。使用 WebAssembly,可以为任何硬件构建运行时,消除了开发人员和运维人员关注特定硬件细节的需要,Crilly 说道。

Crilly 进一步强调:“如果我有一个 WebAssembly 模块,并将其编译为该指令集,那么我就能获得编译器优化带来的好处,以及从十多年的浏览器 JavaScript 经验中获得的启示,其中包括在运行时进行即时(JIT)优化,将这个指令集的字节码转换成 CPU 指令。这一额外的优化层,类似于 JIT 编译器和浏览器运行时,提供了接近本机计算性能。因此,这个抽象层几乎没有什么缺点。”

三.计算机中的计算机
进一步思考将 WebAssembly 视为计算机的概念,Enterprise Management Associates(EMA)分析师 Torsten Volk 表示,他将 WASM 描述为 “计算机中的计算机”。

“它不是直接提供对 CPU、RAM、存储和网络硬件的直接访问,而是为应用程序提供对这些资源的简化通用版本的访问,”Volk 说。“它通过将从为 WASM 编译的应用程序的字节码中提取的指令转化为直接与 CPU、RAM 和磁盘的指令集交流的字节码来实现。一旦这个翻译层对大多数类型的应用程序普遍适用,你实际上可以将 WASM 运行时描述为一种新型计算机。”

总的来说,WebAssembly 是 “我们思考操作系统和硬件的第三次浪潮”,Fermyon Technologies 联合创始人兼 CEO Matt Butcher 说到。“虚拟机打破了我们将操作系统与硬件视为一对一关系的想法。我们可以在一台硬件上运行很多个操作系统,而容器则通过允许我们安全地(以多租户方式)运行大量共享一个内核的离散文件系统,进一步推动了这一进程。” 他接着说:“WebAssembly 代表了第三波浪潮:应用程序不再直接依赖于主机操作系统。它只需声明它需要什么,主机运行时可以满足这些特定需求。最重要的是,开发人员不需要了解目标环境的操作系统或架构。”
用户评论