WebAssembly组件提案


本文探讨了新的 WebAssembly 组件模型提案,并展示了一种使用接口、构建 Rust 和 C++ 组件、链接和使用 Wasmtime 运行它们的非常早期的方法。
随着越来越多的编程语言将 WebAssembly 添加为编译目标,并且构建了自动为这些编程语言生成绑定的工具,组件模型将为软件实现真正的可移植和跨语言组合。
WebAssembly (或 Wasm)是 W3C 规范,用于分发和运行代码的可移植二进制格式,自 2017 年以来已在四大浏览器引擎中实现。用熟悉的术语来说,Wasm 被用作 各种编程语言的编译目标 ,生成一个紧凑的二进制文件,可以在浏览器中以接近本机的速度运行。这将 Rust、C 和 C++、Go 或 C# 等现有语言(以及Grain等新语言 )引入了网络,并允许将极其复杂的应用程序(如 Google Earth 或Photoshop )移植 到浏览器中。
 WASI 项目或 WebAssembly 系统接口 是一项旨在标准化 Wasm 在浏览器之外的执行并提供通用(平台无关)层和一组原语的提案,客户端使用这些原语与其底层运行时进行交互,同时维护 WebAssembly 承诺的安全沙箱。
 
什么是WebAssembly 组件模型
使用操作系统类比,WebAssembly 允许执行低级 CPU 指令,而 WASI 是一种对输入/输出接口进行建模的方法。
从这个角度来看,对定义流程如何启动以及它们如何相互交互的“流程模型”的需求开始出现——这就是 WebAssembly 组件模型提案试图解决的问题。
组件模型的第一个既定 目标 是定义一种可移植的、加载和运行时高效的二进制格式 […],它支持可移植的跨语言组合——有效地解决多个组件如何相互交互,以及用例描述了嵌入组件、组合和动态链接的广泛场景。
本文讨论的主要用例如下——将 API 层定义为 WebAssembly 接口,将其实现为 WebAssembly 组件,然后通过传递参数和返回值从其他组件中使用它。在该领域还有许多其他主题需要探索,例如传递依赖、分发、开发人员体验或为给定接口构建专门的主机运行时,所有这些都将在以后的文章中讨论。
详细点击标题