Главная | IT | Доступен Wasmer 5.0, инструментарий для создания приложений на базе WebAssembly

Доступен Wasmer 5.0, инструментарий для создания приложений на базе WebAssembly

Представлен выпуск проекта Wasmer 5.0, развивающего runtime для выполнения модулей WebAssembly, который можно использовать для создания универсальных приложений, способных выполняться в разных операционных системах. Wasmer также можно применять для изолированного выполнения не заслуживающих доверия блоков кода в составе обычных приложений. Код проекта написан на языке Rust и распространяется под лицензией MIT.

Возможность запуска одного приложения на разных платформах реализована через компиляцию в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программирования.

Для для выполнения промежуточного кода WebAssembly или его трансляции в машинный код целевой платформы предлагаются разные бэкенды:

  • Бэкенд на базе компилятора Singlepass, оптимальный для использования в блокчейнах.
  • Бэкенд на базе генератора кода Cranelift, оптимальный для использования в процессе разработки.
  • Бэкенд на базе компилятора LLVM, оптимальный для использования в рабочих внедрениях.
  • Бэкенд для запуска в web-браузере.
  • Бэкенд на базе JavaScript-движка JavascriptCore, оптимальный для использования на платформе macOS.
  • Бэкенд на базе JavaScript-движка V8, оптимальный для приложений для платформ iOS и Android.
  • Бэкенд на базе интерпретатора Wasmi, оптимальный для блокчейнов и Rust-проектов, не использующих стандартную библиотеку (nostd).
  • Бэкенд на базе runtime WAMR, оптимальный для платфлормы iOS

Приложения изолируются от основной системы в sandbox-окружении и имеют доступ только к заявленной функциональности. Для изоляции применяется механизм на основе управления возможностями – для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия. Управление доступом и взаимодействие с системой обеспечивается при помощи API WASI (WebAssembly System Interface), предоставляющего программные интерфейсы для работы с файлами, сокетами и другими системными функциями.

Платформа позволяет добиться производительности выполнения приложений, близкой к выполнению родных сборок. При помощи Native Object Engine для WebAssembly-модуля можно сгенерировать машинный код, для запуска которого требуется минимальный runtime, но сохраняются все возможности sandbox-изоляции. Возможна поставка предкомпилированных программ со встроенным Wasmer. Для создания надстроек и дополнений предлагаются Rust API и Wasm-C-API.

Для запуска WebAssembly-контейнера достаточно установить в системе runtime Wasmer, который поставляется без внешних зависимостей (“curl https://get.wasmer.io -sSfL | sh”), и запустить необходимый файл (“wasmer test.wasm”). Программы распространяются в форме обычных WebAssembly-модулей, для управления которыми можно использовать пакетный менеджер WAPM. Wasmer также доступен в форме библиотеки, которую можно использовать для встраивания кода WebAssembly в программы на языках Rust, С/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir и Java.

Основные новшества Wasmer 5.0:

  • Реализована возможность использования интерпретаторов WebAssembly.
  • Добавлен экспериментальный бэкенд на базе легковесного интерпретатора Wasmi, позволяющего выполнять промежуточный код WebAssembly в окружениях с ограниченными ресурсами.
  • Добавлен экспериментальный бэкенд на базе WebAssembly runtime WAMR (WebAssembly Micro Runtime), оптимизированного для минимального потребления ресурсов и пригодного для применения на устройствах с небольшим объёмом оперативной памяти.
  • Добавлен экспериментальный бэкенд на базе JavaScript-движка v8, используемого в браузерах на кодовой базе Chromium. Основным достоинством применения бэкенда на базе V8 называется возможность использования встроенного в данный движок отладчика и инструментария для web-разработчиков, а также доступность в V8 расширенной функциональности WebAssembly, такой как обработка исключений и сборка мусора.
  • В бэкенд, использующий LLVM, добавлена экспериментальная поддержка архитектуры Loongarch64.
  • Добавлена поддержка платформы iOS, доступная при использовании бэкендов WAMR, Wasmi и V8.
  • Прекращена поддержка компилятора Emscripten.
  • Обновлены зависимости, среди которых LLVM 18, генератор кода Cranelift 27 и фреймворк rkyv 0.8.
  • Проведена оптимизация производительности. Например, при выполнении операций десериализации модулей наблюдается прирост производительности до 50%.

Источник