Shopify открывает Ruvy, инструментарий для создания Wasm-модулей из Ruby-кода

Ruvy от компании Spotify — это инструментарий WebAssembly, способный транслировать Ruby-код в модули Wasm, основанный на ruby.wasm. Ruvy реализован на языке Rust и содержит некоторые оптимизации для повышения производительности и упрощения выполнения Wasm-модулей.

Ruvy от компании Spotify — это инструментарий WebAssembly, способный транслировать Ruby-код в модули Wasm, основанный на ruby.wasm. Ruvy реализован на языке Rust и содержит некоторые оптимизации для повышения производительности и упрощения выполнения Wasm-модулей.

Ruvy использует модуль интерпретатора Ruby, предоставляемый ruby.wasm виртуальной wasi-vfs файловой системой WASI, для упаковки его в один модуль вместе со всеми указанными исходными файлами Ruby. wasi-vfsсоздает виртуальную файловую систему, встроенную в двоичный файл .wasm, и предоставляет популярный механизм, позволяющий сделать исходные файлы Ruby доступными для чтения ruby.wasm без предоставления доступа к файловой системе хоста во время выполнения WebAssembly.

Именно здесь Ruvy обеспечивает повышение производительности за счет предварительной инициализации виртуальной машины Ruby при сборке модуля Wasm, в отличие от того, когда он загружается в память для выполнения, как это происходит по умолчанию с ruby.wasmwasi-vfs. Это повышает производительность во время выполнения на 20 %, — объясняет старший разработчик Shopify Wasm Джефф Чарльз.

Кроме того, объясняет Чарльз, Ruvy сокращает до 30% время, необходимое для компиляции Wasm в собственный код с помощью компилятора Cranelift.

Еще одним преимуществом использования Ruvy, благодаря тому, что он упаковывает все необходимые файлы вместе, является упрощение синтаксиса выполнения, поскольку не требуется путь к файлу в качестве аргумента WASI. Это особенно актуально, например, для различных служб периферийных вычислений, которые не позволяют предоставлять дополнительные аргументы WASI основной функции конечной точки.

На данный момент Ruvy доступен только в виде дистрибутива с исходным кодом, а это значит, что вам необходимо собрать его перед использованием. В принципе, процесс довольно прост, если вы установили все необходимые зависимости , включая rustupwasm32-wasicmakeи Rosetta 2для хостов macOS. После этого вы просто запускаете makeи выполняете Ruvy, как показано в следующем примере, чтобы создать index.wasmмодуль из ruby_examples/hello_world.rbисходного кода:

$ cargo run --package=cli ruby_examples/hello_world.rb -o index.wasm


Недавно Spotify открыл исходный код Ruvy — это набор инструментов WebAssembly, способный транслировать код Ruby в модули Wasm . Основанный на ruby.wasm, Ruvy реализован на Rust и включает в себя некоторые оптимизации для повышения производительности и упрощения выполнения модуля Wasm.

Ruvy использует модуль интерпретатора Ruby, предоставляемый ruby.wasmвиртуальной wasi-vfsфайловой системой WASI, для упаковки его в один модуль вместе со всеми указанными исходными файлами Ruby. wasi-vfsсоздает виртуальную файловую систему, встроенную в .wasmдвоичный файл, и предоставляет популярный механизм, позволяющий сделать исходные файлы Ruby доступными для чтения ruby.wasmбез предоставления доступа к файловой системе хоста во время выполнения WebAssembly.

Именно здесь Ruvy обеспечивает повышение производительности за счет предварительной инициализации виртуальной машины Ruby при сборке модуля Wasm, в отличие от того, когда он загружается в память для выполнения, как это происходит по умолчанию с ruby.wasmwasi-vfs. Это повышает производительность во время выполнения на 20 %, — объясняет старший разработчик Shopify Wasm Джефф Чарльз.

По словам Чарльза, Ruvy сокращает до 30% время, которое необходимо для компиляции Wasm в собственный код с помощью компилятора Cranelift.

Еще одно преимущество использования Ruvy: он упаковывает все необходимые файлы вместе, и является упрощением синтаксиса выполнения, поскольку не требуется путь к файлу в качестве аргумента WASI. Это особенно актуально, например, для различных служб периферийных вычислений, которые не позволяют предоставлять дополнительные аргументы WASI основной функции конечной точки.

На данный момент Ruvy доступен только в виде дистрибутива с исходным кодом, а это значит, что вам необходимо собрать его перед использованием. В принципе, процесс довольно прост, если вы установили все необходимые зависимости , включая rustupwasm32-wasicmakeи Rosetta 2 для хостов macOS. После этого вы просто запускаете make и выполняете Ruvy, как показано в следующем примере, чтобы создать index.wasm модуль из ruby_examples/hello_world.rbисходного кода:

$ cargo run --package=cli ruby_examples/hello_world.rb -o index.wasm

Как упоминалось выше, вы можете использовать --preloadфлаг командной строки, чтобы указать каталог, содержащий файлы Ruby, которые следует передать в виртуальную машину Ruby.

Чарльз подчеркивает, что в настоящее время Ruvy может выполнять только простые Ruby-программы. В частности, он пока не может требовать Ruby gems, что делает недоступными значительные части стандартной библиотеки Ruby. В будущем планируется включить загрузку кода из стандартной библиотеки, а также неродных сторонних гемов, чтобы снять это ограничение.

Читайте также
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения

Разработчики не идут в крипту, аналог Copilot, AI && Python, Новый Storybook 8 и подборка новостей

Chrome 120 beta
Chrome 120 beta
Chrome 120 beta

Новые 7 фич для CSS. Улучшения для nesting (вложенности стилей). Создание «аккордиона» для через элемент details и многое другое.

Apple Vision Pro: какие приложения не будут работать
Apple Vision Pro: какие приложения не будут работать
Apple Vision Pro: какие приложения не будут работать

Очки дополненной реальности могут внести новый опыт для веб-разработки и приложений. Какие приложения уже работаю с Vision Pro.

Что нового в Chrome 118
Что нового в Chrome 118
Что нового в Chrome 118

Кратко рассказываем об обновлениях Chrome.