The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

29.03.2019 20:23

Следом за технологией 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).

  1. Главная ссылка к новости (https://www.fastly.com/blog/an...)
  2. OpenNews: Компилятор Emscripten достиг возможности собственной пересборки
  3. OpenNews: Технология WebAssembly признана готовой для включения в браузерах по умолчанию
  4. OpenNews: Сравнение производительности различных реализаций WebAssembly
  5. OpenNews: Запуск WebAssembly runtime как модуля ядра Linux
  6. OpenNews: Mozilla развивает WASI для использования WebAssembly вне браузера
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/50418-webassembly
Ключевые слова: webassembly, lucet
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, grayich (ok), 21:17, 29/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    ожидаемо

    а вообще всё плохо, а будет ещё хуже.. ага

     
  • 1.2, Аноним (2), 21:23, 29/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    А зачем городить лишние сущности?
    В примерах берут код на Си, компилируют clang-ом в WebAssembly, а потом  WebAssembly компилируют в машинный код. Почему сразу в машинный код не скомпилить в shared-библиотеку, а для изоляции какой-нибудь готовый sandbox не использовать? Тот же Sandboxed API от Google о котором новость пару недель назад была https://www.opennet.me/opennews/art.shtml?num=50349
     
     
  • 2.4, имя (?), 21:40, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Напрямую скомпилированный машинный код, во-первых, не переносим, во-вторых, не предотвращает фокусов вроде манипуляции указателями или прямого вызова сисколлов, а исполнять ведь предполагается засланный пользователем код. Да и си там, скорее, для примера взят, в большинстве своём люди всё равно будут компилировать из привычных им джаваскриптов.

    Здесь скорее напрашивается вопрос о причинах NIH при наличии JVM/CLR.

     
     
  • 3.5, Илья (??), 21:58, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем исплнять код, которому не доверяешь?
     
     
  • 4.7, Аноним (-), 22:16, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Чтобы деньги за это получать же.
     
  • 3.11, Crazy Alex (ok), 22:47, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    джаваскрипты в wasm? Где ж такое? Знаю си, плюсы, вроде go был... джаваскрипт в wasm совать - это вообще бессмвыслица какая-то
     
     
  • 4.33, НяшМяш (ok), 17:30, 31/03/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наоборот, вебмакаки ликуют. Теперь, вместо изучения нормального языка для разработки нормальных приложений, достаточно будет в свой вебпук.жиэс поставить плагин, который будет компилять их творчество в васм. Вебмакаки целы и юзеры довольны производительности.
     

  • 1.3, Аноним (3), 21:39, 29/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Я вот джва года жду транслятор wasm -> llvm.
     
     
  • 2.6, Анон Анонов (?), 22:05, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    wasm это таргет llvm. Какой смысл обратно компилить, да ещё и с потерей информации?
     
     
  • 3.8, Аноним (3), 22:18, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >Какой смысл обратно компилить, да ещё и с потерей информации?

    Очевидно же - когда нет исходника.

     
     
  • 4.14, ig0r (??), 22:53, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    То есть вы планируете запускать код не имея исходников? присылайте мне wasm бинарник, я сконвертирую.
     
     
  • 5.23, Аноним (3), 09:08, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Смысл в том, чтобы почти похоронить пакеты, специфичные для архитектур. То есть я компилирую нейтив-код в васм, кладу васм-байткод в пакет. При установке васм преобразуется в llvm и компилируется в нативную библиотеку, с которой можно делать всё то, что и с нативной библиотекой, собранной из C++.
     
     
  • 6.25, КО (?), 10:34, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >Смысл в том, чтобы почти похоронить пакеты, специфичные для архитектур. То есть я компилирую нейтив-код в васм,

    Не забываем, что wasm это фигня, которая по идейным соображениям безопасности не может взаимодействовать с оборудованием, а значит пользователем и сетью, зато переносимая. При таком подходе оно даже питон заменить не в силах.

     
  • 6.27, Аноним (27), 10:37, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Смысл в том, чтобы почти похоронить пакеты, специфичные для архитектур.

    Вот это дело! Тогда и необходимость в открытых исходниках пропадёт. ;-)

     
     
  • 7.31, ig0r (??), 08:50, 31/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Если вы считаете, что открытые исходники нужны только для того, чтобы приложение можно было пересобрать для других архитектур, то это далеко не правда.
     

  • 1.9, Аноним (-), 22:19, 29/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Представляю как браузер внутри себя будет делать сначала:
    $ lucetc-wasi hello.wasm -o hello.so
    а потом:
    $ lucet-wasi hello.so.
     
     
  • 2.12, Crazy Alex (ok), 22:49, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    браузер wasm умеет исполнять прямо сейчас, никакие сторонние кмопиляторы ему для этого не нужны
     
     
  • 3.19, Аноним (-), 00:57, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как следует из текста новости, сейчас он это умеет не слишком оптимально.
     
  • 2.37, abc (??), 00:58, 02/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    идея как раз в том чтоб компилировать однажды исполнять wasi напрямую без компиляции
     

  • 1.10, X4asd (ok), 22:39, 29/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Результат сохраняется в виде разделяемой библиотеки или объектных файлов, которые можно связать с приложениями на языках Си или Rust. [...] возможности безопасного исполнения сторонних программ на WebAssembly внутри других приложений

    разбежались с "безопасным".

    Спектр (который будут исправлять последущие 10 лет) не даст возможности так просто взять и "безопасно" исполнить

     
     
  • 2.13, Crazy Alex (ok), 22:50, 29/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    поруби таймеры и будет счастье. Впрочем, что-то другое найдётся. Песочницы и недоверенный код - это всегда игры с огнём.
     

  • 1.15, Аноним (15), 23:23, 29/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Одни и те же библиотеки для браузера и десктопа. Да еще и на любом компилируемом языке...
    Разработчики молодцы, раньше о таком только и мечтать можно было.
     
     
  • 2.22, Аноним (22), 08:15, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Как Java-апплеты?
     
     
  • 3.24, Аноним (3), 09:10, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Как ActiveX + .Net или как Silverlight
     
  • 3.26, КО (?), 10:36, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет java апплеты нужны были для взаимодействия с оборудованием через песочницу. WASM чистая числодробилка.
     
  • 2.30, Анонимчжан (?), 22:27, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    еще одно ненужно типа электрон.))
     
     
  • 3.36, X4asd (ok), 15:36, 01/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > еще одно ненужно типа электрон.))

    ну полезность электрона в том что он отвлёк на себя горе-программистов (js-обезъянок со своими реактами)

     

  • 1.16, Аноним (16), 00:31, 30/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А чем это отличается от "программа на любом языке" которая общается с внешним миром через "безопасную" libc (ну например на rust) с изоляцией и контролем доступа?
     
  • 1.17, Аноним (16), 00:32, 30/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А чем это отличается от "программа на любом языке" которая общается с внешним миром через "безопасную" libc (ну например на rust) с изоляцией и контролем доступа?
     
  • 1.18, Иваныч (??), 00:40, 30/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Теперь таки можно будет написать язык программирования где целевое использование будет WebAssembly, а при желании можно в нативный код при помощи упомянутого инструмента. Зачем? Just for fun, конечно же. Как минимум вариация на тему WebAssembly Little C без оптимизаций и просто более читаемое представление того что будет уже в "ASM" от WebAssembly. Бесполезно, но интересно.
     
     
  • 2.28, Аноним (28), 10:41, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >  можно будет написать язык программирования где целевое использование будет WebAssembly

    https://github.com/AssemblyScript/assemblyscript

     

  • 1.20, Аноним (20), 07:38, 30/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    замечательно - а есть pascal там поддерживается?
     
     
  • 2.21, Аноним (21), 08:03, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы вспоминаете свой любимый язык в каждой новости про программирование. Очевидно, Вам не дает покоя мысль, что давая Вам его в 90-х в школах РФ, Вас намеренно или по глупости заставили учить то, что никому не сдалось, особенно в остальной вселенной.  
     
     
  • 3.29, Аноним (29), 15:05, 30/03/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > что давая Вам его в 90-х в школах РФ, Вас намеренно или по глупости заставили учить то, что никому не сдалось, особенно в остальной вселенной.

    Специалиста-знатока по школам вне РФ, ненужности навыка написания чистого и структурированного кода и вообще, по целым вселенным, вижу я.
    Отчего-то правда создается впечатление, что спицилист сугубо опеннетный, у которого от упоминания паскаля просто начинает подпекать.

     
  • 3.32, аноним2019 (?), 11:49, 31/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    просто оставлю это сдесь

    https://lazarusccr.github.io/apps/

     
     
  • 4.35, x3who (?), 11:03, 01/04/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    "37 apps in our registry" - странно что так мало, язык же действительно хороший.
     
  • 2.34, НяшМяш (ok), 17:32, 31/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Тебе нужно - напиши патч.
     

  • 1.38, Брат Анон (?), 08:25, 02/04/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вася поверх Люси? Извращенцы какие-то))
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру