Даступны 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#, 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

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