Shopify最近开源了一个名为Ruvy的项目。Ruvy是一个工具链,它接受Ruby代码作为输入,并创建一个将执行该Ruby代码的WebAssembly模块。
目前已有从Ruby代码创建Wasm模块的项目,最常见的是ruby.wasm,Ruvy也是基于ruby.wasm构建,并提供了一些特定的优势。
官方称创建Ruvy旨在利用预初始化Ruby虚拟机和Ruby脚本包含的Ruby文件带来的性能改进。此外,Ruvy不需要在运行时提供WASI参数,从而简化了Wasm模块的执行。
WASI是一组导入的Wasm函数的标准化集合,旨在为Wasm模块提供一个标准接口,以实现许多典型语言标准库中存在的系统调用。
目前,Ruvy并未随预编译的二进制文件一起发布,因此需要安装它的构建依赖项,然后编译Ruvy才能使用。
安装这些依赖项的详细信息请查看README。
构建Ruvy后,可以运行以下命令来打印出 Hello World。
$ cargo run -- package=cli ruby_examples / hello_world.rb - o index.wasm
$ wasmtime index.wasm
Hello world
上述命令将构建并执行CLI,首先获取ruby_examples/hello_world.rb
的内容,并创建一个名为index.wasm
的Wasm模块。当调用index.wasm
的导出_start
的函数时,将执行puts “Hello world”
。
如果要使用额外的Ruby文件,可以运行以下命令:
$ cargo run -- package=cli -- -- preload=prelude / ruby_examples / use_preludes_and_stdin.rb
$ echo "this is my input" | wasmtime index.wasm
{:discount_input=>"this is my input", :value=>100.0}
这就是Shopify新推出Ruvy项目的简要介绍。它为Ruby开发者提供了一个新工具,使得他们可以更方便地将Ruby代码转换为WebAssembly模块,并从中获得性能改进。
延伸阅读:Shopify 开发团队放弃 Ruby,改用 Node 重写 CLI 工具