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

Читайте также
Microsoft Dev Kit для Visual Studio Code стал общедоступным
Microsoft Dev Kit для Visual Studio Code стал общедоступным
Microsoft Dev Kit для Visual Studio Code стал общедоступным

Расширение C# Dev Kit включает в себя основные сервисы языка C#, помощь IntelliCode, возможности тестирования, отладки и управления проектами. Поддержка .NET MAUI и Unity сейчас находится в стадии предварительного просмотра.

WP Engine запустил поиск на основе искусственного интеллекта для сайтов WordPress
WP Engine запустил поиск на основе искусственного интеллекта для сайтов WordPress
WP Engine запустил поиск на основе искусственного интеллекта для сайтов WordPress

«Поиск — это сложная техническая задача », — сказал Люк Паттерсон, менеджер по продукту WP Engine, присутствующим. Пользователи все чаще ожидают, что их поиск будет более похож на GPT, добавил он. И ставки высоки: статистика Google показывает, что 82% клиентов избегают веб-сайтов, на которых у них возникают трудности с поиском.

Игра «Нейрогород» на знание JavaScript и исправление фронтендерских багов
Игра «Нейрогород» на знание JavaScript и исправление фронтендерских багов
Игра «Нейрогород» на знание JavaScript и исправление фронтендерских багов

Задача игры — устранить все баги, особенно присматриваться к любым странным и необычным явлениям во внешнем облике города.

Dev новости: Deno Decorates, предварительный рендеринг в Nuxt, Astro
Dev новости: Deno Decorates, предварительный рендеринг в Nuxt, Astro
Dev новости: Deno Decorates, предварительный рендеринг в Nuxt, Astro

Прогресс у Deno с JS && TS. релизы Astro и другие новости