Представлен Lucet, компилятор для WebAssembly

29 марта 2019 года

Следом за технологией WASI (WebAssembly System Interface), нацеленной на использование WebAssembly вне браузера, представлен проект Lucet, предлагающий компилятор lucetc и runtime для выполнения программ в формате WebAssembly. Lucet позволяет скомпилировать модули в псевдокоде WebAssembly (.wasm или .wat) в машинный код, пригодный для прямого исполнения. Результат сохраняется в виде разделяемой библиотеки или объектных файлов, которые можно связать с приложениями на языках Си или Rust. Код проекта написан на языке Rust и распространяется под лицензией Apache 2.0.

Основной задачей проекта является предоставление возможности безопасного исполнения сторонних программ на WebAssembly внутри других приложений (например, для реализации плагинов). Исходные приложения для встраивания могут быть написаны на языках Си (компилируется в WebAssembly при помощи clang), Rust и AssemblyScript (TypeScript). Для использования в окружении WebAssembly предлагается Си-библиотека lucet-builtins, предоставляющая базовые функции libc.

Проектом поставляется runtime для модулей, скомпилированных при помощи lucetc. Указанный runtime предоставляет функции для загрузки модулей из объектных файлов, их активации и организации вызова функций из базового приложения. Lucet-runtime также выполняет задачи по управлению ресурсами для каждого экземпляра WebAssembly и обработке исключений, возникающих при сбоях. Компонент может использоваться как crate-пакет для Rust или как разделяемая библиотека для Си.

Дополнительно предлагается Lucet-wasi, расширение к runtime с реализацией режима изоляции и системных прослоек WASI, позволяющих напрямую запускать WebAssembly-приложения с применением расширенных механизмов контроля доступа и с возможностью обращения к ресурсам системы (файлы, сокеты и т.п.). Lucet-wasi также может использоваться в виде библиотеки для интеграции поддержки WASI в другие приложения. В настоящее время lucet-wasi пока поддерживает только запуск в Linux-системах на базе архитектуры x86-64.

Код открыт компанией Fastly, которая использует Lucet в качестве основы движка облачных вычислений, использующего WebAssembly для обработчиков. Так как модель "edge cloud" подразумевает запуск обработчика на каждый запрос, а запросов может быть десятки тысяч в секунду, проект изначально рассчитан на потребление минимальных ресурсов и очень быстрый запуск новых экземпляров окружений для выполнения WebAssembly. Запуск модуля WebAssembly производится менее чем за 50 микросекунд, а дополнительное потребление памяти составляет всего несколько килобайт на каждый экземпляр (для сравнения движок Chromium V8 требует для запуска JavaScript или WebAssembly 5 миллисекунд и десятки мегабайт).

Для достижения подобного уровня производительности программы WebAssembly запускаются в рамках одного процесса с изоляцией на уровне runtime, который предоставляет каждой программе WebAssembly доступ только к собственным ресурсам. В отличие от других окружений для выполнения WebAssembly, в Lucet используется не JIT, а полноценная упреждающая компиляция в машинный код (AOT, ahead-of-time).

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Представлен Lucet, компилятор для WebAssembly», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.