Доступний Wasmer 2.0, інструментарій для створення програм на базі WebAssembly

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

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

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

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

Платформа дозволяє досягти продуктивності виконання додатків, близьких до виконання рідних збірок. За допомогою Native Object Engine для WebAssembly-модуля можна згенерувати машинний код ("wasmer compile -native" для генерації передкомпільованих об'єктних файлів .so, .dylib і .dll), для запуску якого потрібен мінімальний runtime, але зберігаються всі можливості sandbox-ізоляції. Можливе постачання передкомпільованих програм із вбудованим Wasmer. Для створення надбудов та доповнень пропонуються Rust API та Wasm-C-API.

Значна зміна номера версії Wasmer пов'язана з внесенням змін, що порушують сумісність, у внутрішній API, які, як запевняють розробники, ніяк не позначаться на 99% користувачів платформи. З змін, що порушують сумісність, також відзначається зміна формату серіалізованих модулів Wasm (модулі, серіалізовані у Wasmer 1.0, не зможуть використовуватися в Wasmer 2.0). Інші зміни:

  • Підтримка інструкцій SIMD (Single Instruction, Multiple Data), що дозволяють організувати розпаралелювання операцій над даними. З областей, у яких застосування SIMD може помітно підняти продуктивність, відзначається машинне навчання, кодування та декодування відео, обробки зображень, симуляція фізичних процесів та маніпуляції з графікою.
  • Підтримка типів посилань, що дозволяють модулям Wasm звертатися до інформації в інших модулях або в базовому оточенні.
  • Проведено значну оптимізацію продуктивності. Швидкість роботи LLVM runtime з числами з плаваючою комою збільшена приблизно на 50%. Значно прискорено виклик функцій рахунок скорочення ситуацій, потребують звернення до ядру. На 40% збільшено продуктивність генератора коду Cranelift. Скорочено час десеріалізації даних.
    Доступний Wasmer 2.0, інструментарій для створення програм на базі WebAssembly
    Доступний Wasmer 2.0, інструментарій для створення програм на базі WebAssembly
  • Для більш точного відображення суті змінені назви двигунів: JIT → Universal, Native → Dylib (Dynamic Library), Object File → StaticLib (Static Library).

Джерело: opennet.ru

Додати коментар або відгук