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

Читайте также
Какой эффект от музыки при написании кода
Какой эффект от музыки при написании кода
Какой эффект от музыки при написании кода

Часто это делаю, хотя это плохая привычка и может мешать. Почему?

SQL Исполняется 50 Лет: Путешествие Через Полвека
SQL Исполняется 50 Лет: Путешествие Через Полвека
SQL Исполняется 50 Лет: Путешествие Через Полвека

В июне 1974 года состоялся первый выпуск языка SQL. Он был разработан Дональдом Д. Чемберлином и Раймондом Ф. Бойсом в IBM, основываясь на реляционной модели, предложенной Э.Ф. Коддом. SQL, что расшифровывается как Structured Query Language, стал наиболее распространенным языком для работы с базами данных, и до сих пор имеет множество диалектов, последний из которых — SQL 2023.

JetBrains запустила Writerside для документирования
JetBrains запустила Writerside для документирования
JetBrains запустила Writerside для документирования

Проекты создаются на базе HTML-проектов, которые можно развернуть как статические веб-сайты или опубликовать как GitHub Pages, GitLab или TeamCity Cloud. 

Google Chrome начал показывать, сколько памяти использует каждая вкладка
Google Chrome начал показывать, сколько памяти использует каждая вкладка
Google Chrome начал показывать, сколько памяти использует каждая вкладка

Браузер Google Chrome на системах с Windows 11 показывает, сколько оперативной памяти использует каждая вкладка.