Wasmer 3.0, ohun elo irinṣẹ fun kikọ awọn ohun elo orisun WebAssembly, wa

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

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

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

Syeed gba ọ laaye lati ṣaṣeyọri iṣẹ ṣiṣe ohun elo ti o sunmọ awọn apejọ abinibi. Lilo Ẹrọ Nkan Native fun module WebAssembly, o le ṣe ina koodu ẹrọ ("wasmer compile -native" lati ṣe ipilẹṣẹ .so, .dylib ati awọn faili ohun .dll ti a ti ṣajọ tẹlẹ), eyiti o nilo akoko asiko to kere julọ lati ṣiṣẹ, ṣugbọn da duro gbogbo ipinya apoti iyanrin. awọn ẹya ara ẹrọ. O ṣee ṣe lati pese awọn eto ti a ti ṣajọ tẹlẹ pẹlu Wasmer ti a ṣe sinu. API Rust ati Wasm-C-API ni a funni fun ṣiṣẹda awọn afikun ati awọn amugbooro.

Lati ṣe ifilọlẹ eiyan WebAssembly kan, kan fi Wasmer sori ẹrọ akoko asiko, eyiti o wa laisi awọn igbẹkẹle ita (“curl https://get.wasmer.io -sSfL | sh”), ati ṣiṣe faili to wulo (“wasmer test.wasm” ). Awọn eto ti pin kaakiri ni irisi awọn modulu WebAssembly deede, eyiti o le ṣakoso ni lilo oluṣakoso package WAPM. Wasmer tun wa bi ile-ikawe ti o le ṣee lo lati fi sabe koodu WebAssembly sinu Rust, C/C++, C # D, Python, JavaScript, Go, PHP, Ruby, Elixir, ati awọn eto 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), что в будущем позволит воплотить в жизнь серию новых возможностей.

orisun: opennet.ru

Fi ọrọìwòye kun