Даступны Wasmer 3.0, інструментарый для стварэння прыкладанняў на базе WebAssembly

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

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

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

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

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

Крыніца: opennet.ru

Дадаць каментар