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模塊,并從中獲得性能改進。