1 - Wasmer Runtime
https://docs.wasmer.io/ecosystem/wasmer
Wasmer允许您运行WebAssembly模块,无论是独立或嵌入式内其他语言,如 C/C++, Rust, Python, Go, PHP, Ruby…
根据设计,WebAssembly模块运行所在的环境与底层主机系统的原生功能完全隔离(或沙盒化)。这意味着默认情况下,Wasm模块被设计为仅执行纯计算。
因此,通常无法从WASM访问“ 操作系统”级资源,例如文件描述符,网络套接字,系统时钟和随机数。
但是,在许多情况下,Wasm模块需要执行的工作不仅仅是执行纯计算。它们必须与原生“ OS”功能交互。
Wasmer旨在提供三个关键功能:
- 使程序能够在任何编程语言中运行
- 使极其便携的二进制文件能够在Wasmer支持的任何“ OS”(例如,Linux,macOS,Windows和FreeBSD)上运行,且无需修改。
- 充当Wasm模块的安全桥梁, 通过诸如
WASI
和Emscripten
(版本1.38.43和更早版本)这样的的应用二进制接口(Application Binary Interfaces/ABI)与原生“ OS”功能交互。
对于第一种情况,我们提供了多种语言集成,允许从任何编程语言中运行相同的Wasm模块。
对于第二种情况,我们提供了独立运行时以在任何平台和芯片组上运行Wasm二进制文件。
重要提示:
上面使用的术语“ OS”用引号引起来,表明被调用的原生功能实际上可能不是由主机的操作系统提供的。
实际上,原生函数始终属于运行WebAssembly模块的主机环境,并且可以是主机语言的运行时环境(例如JavaScript,Python或Ruby),也可以是实际的操作系统。 。
无论哪种方式,从WebAssembly的角度来看,我们都不必太在乎这个细节。我们需要知道的是:
- 主机可以为WebAssembly模块提供“导入”功能
- 通过Wasmer附带的ABI,WebAssembly模块可以使用不同级别的沙箱访问一组类似于操作系统的功能
3 - Wasmer Feature
https://docs.wasmer.io/ecosystem/wasmer/wasmer-features
Wasmer WebAssembly运行时为用户和开发人员提供了各种功能:
- 后端: Wasmer支持多个编译器后端:Singlepass,Cranelift和LLVM。这些中的每一个在编译速度与运行速度之间都有不同的权衡。
- 缓存:可以重复使用已编译的WebAssembly模块,因此后续运行Wasm文件的启动时间很短
- 计量:可以监视计算时间和其他资源,并可以设置限制来控制Wasm代码的运行方式。这也称为“gas metering/气体计量”
- WebAssembly功能:
- 多值返回:从函数返回多个值,使host和guest之间的数据传输更加简单
- SIMD:单指令,多数据:更快地执行重数运算和/或以更低的功耗使用
- ABI:它允许使用ABI运行编译到WebAssembly的不同类型的程序,例如:
- Emscripten
- WASI
详细支持情况看原文。
备注:Rust 的支持还是挺好的。
4 - Wapm
https://docs.wasmer.io/ecosystem/wapm
WAPM = WebAssembly Package Manager
WAPM 是WebAssembly模块的包管理器,可以被任何WebAssembly运行时(如Wasmer运行时)独立使用。
WAPM生态系统使WebAssembly更易于开发人员使用。该系统起始于以下几个工具:
-
用于存储和提供服务的 WAPM包注册中心 wapm.io
-
WAPM 打包客户端(称为 wapm CLI)用于安装和管理软件包 WAPM-CLI GitHub仓库
wax
https://docs.wasmer.io/ecosystem/wapm/wax
wax = The WebAssembly package Runner
Wax允许直接在shell中运行wamp中可用的任何命令,而无需进行会污染目录的全局安装。