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. В будущем планируется включить загрузку кода из стандартной библиотеки, а также неродных сторонних гемов, чтобы снять это ограничение.

Читайте также
SortableJS переносит списки с перетаскиванием в Microsoft Blazor
SortableJS переносит списки с перетаскиванием в Microsoft Blazor
SortableJS переносит списки с перетаскиванием в Microsoft Blazor

Разработчики преобразовали SortableJS, инструмент JavaScript для создания списков с возможностью перетаскивания, в компонент Blazor для разработки веб-приложений Microsoft, переименовав его в Blazor Sortable.

Kuto — reverse сборщик javascript
Kuto — reverse сборщик javascript
Kuto — reverse сборщик javascript

Анонсировали сборщик, который уменьшит ваш бандл. Kuto — это новый подход к доставке кода пользователю. Он позволяет повторно использовать уже имеющийся у клиента код для доставки обновлений.

Google возьмет всю базу Stack Overflow для своего Gemini
Google возьмет всю базу Stack Overflow для своего Gemini
Google возьмет всю базу Stack Overflow для своего Gemini

Крупная база для разработчиков Stack Overflow запускает для ИИ доступ к своей всей базе через АПИ (OverflowAPI). И главным партнером становится Google, который будет использовать данные Stack Overflow для обучения Gemini. А Google поможет реализовать Stack Overflow мощные функции для проекта OverflowAI, который уже развивается. Обе компании планируют просмотр этих интеграций на конференции Google Cloud […]

Redwood.js и React Server Components
Redwood.js и React Server Components
Redwood.js и React Server Components

Redwood.js экспериментирует с RSC и уже в конце марта 2024, они добавили поддержку компонентов, добавляя документацию.