Wasmer 3.0, ngwa ọrụ maka iwulite ngwa dabere na WebAssembly, dị

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

Возможность запуска одного приложения на разных платформах обеспечивается благодаря компиляции кода в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программирования. Для компиляции в WebAssembly может использоваться инструментарий Emscripten. Для трансляции WebAssembly в машинный код текущей платформы поддерживается подключение разных бэкендов компиляции (Singlepass, Cranelift, LLVM) и движков (задействование JIT или генерация машинного кода).

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

Ikpo okwu na-enye gị ohere ịrụ ọrụ mmezu ngwa dị nso na nke ọgbakọ obodo. Iji Native Object Engine for a WebAssembly modul, ị nwere ike ịmepụta koodu obodo ("wasmer compile -native" maka ịmepụta precompiled .so, .dylib na .dll ihe faịlụ), nke na-achọ obere oge iji na-agba ọsọ, ma na-ejigide atụmatụ niile nke. mwepu sandbox. Ọ ga-ekwe omume ịnye mmemme achịkọtara na Wasmer arụnyere n'ime ya. A na-enye Rust API na Wasm-C-API maka ịmepụta mgbakwunye na mgbakwunye.

Iji malite akpa WebAssembly, ọ ga-ezuru iji wụnye Wasmer oge ojiri gaa na sistemụ, nke na-abịa na-enweghị ịdabere na mpụga (“curl https://get.wasmer.io -sSfL | sh”), wee mee faịlụ dị mkpa (“wasmer test). .wasm"). A na-ekesa mmemme n'ụdị modul WebAssembly nkịtị, nke enwere ike ijikwa njikwa ngwugwu WAPM. Wasmer dịkwa ka ọbá akwụkwọ nke enwere ike iji tinye koodu WebAssembly na Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir, na Java.

Основные изменения в Wasmer 3.0:

  • Добавлена возможность создания родных исполняемых файлов для любых платформ. Полностью переработана команда «wasmer create-exe», которая позволяет преобразовать файл с промежуточным кодом WebAssembly в самодостаточные исполняемые файлы для платформ Linux, Windows и macOS, которые могут работать без установки самого Wasmer.
  • Предоставлена возможность запуска WAPM-пакетов, размещённых в каталоге wapm.io, при помощи команды «wasmer run». Например, выполнение «wasmer run python/python» приведёт к загрузке из репозитория wapm.io пакета python и его запуску.
  • Полностью переработан Wasmer Rust API, в котором изменён стиль работы с памятью и обеспечена возможность безопасного сохранения объектов Wasm в структуре Store. Предложена новая структура MemoryView, позволяющая читать и записывать данные в линейную область памяти.
  • Реализован набор компонентов wasmer-js для запуска Wasmer в web-браузере и взаимодействия с ним из JavaScript, используя библиотеку wasm-bindgen. По своим возможностям wasmer-js соответствует компонентам wasmer-sys, предназначенным для запуска Wasmer в обычных операционных системах.
  • Упрощены движки. Вместо раздельных движков для JIT, динамического и статического связывания (Universal, Dylib, StaticLib) теперь предлагается один общий движок и загрузка и сохранение кода в котором управляется на уровня выставления параметров.
  • Для десериализации артефактов задействован фреймворк rkyv, обеспечивающий работу в режиме zero-copy, т.е. не требующий выделения дополнительной памяти и выполняющий десериализацию только с использованием изначально предоставленного буфера. Применение rkyv позволило значительно повысить скорость запуска.
  • Улучшен однопроходный компилятор Singlepass, в котором появилась поддержка функций с несколькими аргументами (multi-value), повышена надёжность работы и добавлена поддержка кадров обработки исключений.
  • Улучшена реализация API WASI (WebAssembly System Interface). Решены проблемы в программном интерфейсе WASI для работы с файловой системой. Внутренние типы переработаны с использованием WAI (WebAssembly Interfaces), что в будущем позволит воплотить в жизнь серию новых возможностей.

isi: opennet.ru

Tinye a comment