Wasmer 1.0

2021-01-09 07:05:14

新功能包括更好的错误处理,更强大的API,交叉编译,无头Wasmer等!

自我们发布第一行Wasmer代码以来,已经过去了两年,这是第一个能够在Nginx服务器端运行的服务器端WebAssembly(Wasm)运行时。我们相信WebAssembly将是未来软件执行和容器化(不仅在浏览器内部,而且在外部)的关键组件。

通过利用Wasm进行软件容器化,我们创建了无需修改即可在任何地方运行的通用二进制文件,包括Linux,macOS,Windows以及Web浏览器等操作系统。 Wasm默认情况下会自动沙盒化应用程序以安全执行,从而保护主机环境免受运行中软件中的恶意代码,错误和漏洞的侵害。 Wasm还提供了一个精益执行环境,使Wasmer容器可以在Docker容器过重而无法工作的地方运行。

Wasmer 1.0性能基准测试需要独立发布。将Wasmer与其他Wasm运行时进行完整的分析,以便您比较并选择最适合您的项目的技术!

现在,我们所有的编译器都可以并行编译函数。借助这一新策略,我们在所有编译器中的编译速度均提高了9倍。

通过实际示例比较,这些数字更容易理解。在这里,我们可以看到Wasmer 0.17.1与Wasmer 1.0中clang.wasm的编译时间:

使用Wasmer CLI时,编译仅进行一次,然后将结果缓存,以实现最佳的将来运行。

可扩展性是任何基础架构产品中最关键的功能之一。我们最重要的功能之一就是支持多个编译器。选择和插入最能满足客户使用情况的编译器的功能非常强大。 Wasmer 1.0附带了以下方面的现成支持:

LLVM:当必须具有最佳性能时(理想的生产方式),最佳生成的机器代码。

除了编译器,我们还引入了对可插入引擎的支持。 WebAssembly引擎是一种抽象,它决定编译器如何管理所生成的汇编代码,包括如何对其进行加载和序列化。 Wasmer 1.0支持以下编译器引擎:

本机引擎:它生成可以作为共享对象加载的本机代码。另外,本机引擎共享的对象和模块在短短几微秒内的执行和启动性能令人难以置信!

Wasmer 1.0引入了“ wasmer编译”,这是一个用于预编译Wasm文件的新命令。我们的客户和开发人员使用“ wasmer compile --native”将WebAssembly模块预编译为.so,.dylib和.dll之类的本机目标文件。预编译的对象和模块与Wasmer CLI兼容,或与Wasmer嵌入(Rust,Python,Go等)一起使用。

预编译本机对象的核心优势在于,它们只需要最少的运行时间即可运行已编译模块,同时仍提供完整的沙盒环境。消除了编译时间,可以在极快的启动时间直接执行工件。

边缘运行的物联网设备正在推动计算的未来,这已不是什么秘密。但是,许多设备缺少最佳的计算硬件或其他资源,例如电源,网络和存储。过去,用户在Wasm应用程序中附带了Wasmer和所有编译器。这种做法不是最理想的,尤其是对于物联网和边缘计算用例。

在Wasmer 1.0中,我们看到Wasm和Wasmer在提供尽可能轻量级的执行环境方面处于领先地位,这对于在边缘的IoT设备上高效运行Wasm至关重要。借助我们对AOT(超前时间)编译的新增支持,您可以运行“无头”版本的Wasmer,其重量仅为数百KB,并且可以在任何设备上运行任何预编译的Wasm二进制文件。

Wasmer 1.0现在具有交叉编译功能。在以前的Wasmer版本中,以本机编译的Wasm应用程序为目标并在同一体系结构上运行。使用Wasmer 1.0,您可以从x86_64机器为aarch64体系结构预编译Wasm,反之亦然。

注意:在最后一个“ wasmer run”步骤中,您还可以使用轻巧得多的无头Wasmer版本! (或者您可以像以前演示的那样以嵌入式方式运行它)

Wasmer 1.0的主要目标是使对高级WebAssembly概念或WebAssembly生态系统知识有限的开发人员可以轻松使用API​​。 Wasmer 1.0通过基于标准Wasm-C-API所具有的相似结构对其进行整形,从而进一步改进了我们的API,使其具有未来的弹性。

我们的文档和完整的示例集使开发人员可以在眨眼之间开始使用Wasmer!

随着WebAssembly生态系统的成熟,业界将正确地推动和统一与WebAssembly交互的API。在我们旅途的早期,Wasm-C-API仍然很年轻,因此我们决定构建一个与内部结构紧密匹配的API。但是,随着行业朝着通用API迈进,我们决定将其作为Wasmer 1.0的一部分并做出贡献,以便每个人都能从中受益。

注意:我们将继续支持Wasmer-C-API。但是,我们建议当前用户切换到标准Wasm-C-API。

Wasmer 1.0完全重新定义并提供了新的改进的错误处理功能,使开发人员可以放心地与Wasmer集成。大大缩短了构建可投入生产的Wasm应用程序所需的时间。例如,每次发生错误时,都要准确知道错误的来源:它是虚拟机吗?是因为没有足够的可用资源吗?还是仅仅是某些主机功能触发的预期错误? Wasmer 1.0为将来进行更高级的错误检测和报告奠定了基础。

就在几周前,苹果公司推出了其新系列的计算机,该计算机系列具有基于ARM的全新芯片组:Apple Silicon。

服务器端工作负载中的ARM有着光明的前途,它巩固了跨芯片组通用二进制文件的需求。我们非常高兴地宣布Wasmer是第一个在Apple Silicon中支持Wasm的未解释的服务器端WebAssembly VM!

Wasmer 1.0已被全球的公司和个人开发人员使用和测试。我们要感谢所有这些人帮助实现了Wasmer推动Wasm前进的愿景。

正如您在本文中所阅读的那样,Wasmer 1.0展示了众多的开发周期和迭代,我们在过去两年中所学的内容得到了改进。没有Google,Mozilla,Cloudflare和Fastly(仅举几例)之类的公司推动WebAssembly的发展,Wasmer当前的化身是不可能的。

如果您想尝试Wasmer,则可以从wasmer.io安装CLI,以独立运行Wasmer或将Wasmer嵌入您喜欢的编程语言中。

Wasmer Inc.总部位于加利福尼亚州旧金山,是流行的开源WebAssembly运行时Wasmer背后的公司。除了Wasmer运行时之外,该公司还对WAPM,WebAssembly软件包管理器以及WebAssembly生态系统中的许多其他开源项目进行了重大投资。

我们的使命是使软件普遍可用。 我们致力于开源社区,并致力于为全球的开发人员和公司做出贡献,以帮助使Wasmer和WebAssembly成为通用标准。