Galimas „Wasmer 3.0“ įrankių rinkinys, skirtas „WebAssembly“ programoms kurti

Pristatomas trečiasis pagrindinis Wasmer projekto leidimas, kuriame sukurtas WebAssembly modulių vykdymo laikas, kuris gali būti naudojamas kuriant universalias programas, kurios gali veikti skirtingose ​​operacinėse sistemose, taip pat vykdyti nepatikimą kodą atskirai. Projekto kodas parašytas Rust ir platinamas pagal MIT licenciją.

Galimybę paleisti vieną aplikaciją skirtingose ​​platformose suteikia kodo kompiliavimas į žemo lygio WebAssembly tarpinį kodą, kuris gali veikti bet kurioje OS arba būti įterptas į programas kitomis programavimo kalbomis. Programos yra lengvi konteineriai, kuriuose veikia WebAssembly pseudokodas. Šie konteineriai nėra susieti su operacine sistema ir gali turėti kodą, iš pradžių parašytą bet kuria programavimo kalba. „Emscripten“ įrankių rinkinys gali būti naudojamas kompiliuojant į „WebAssembly“. Norint išversti WebAssembly į dabartinės platformos mašininį kodą, ji palaiko įvairių kompiliavimo užpakalinių sistemų (Singlepass, Cranelift, LLVM) ir variklių (naudojant JIT arba mašininio kodo generavimą) ryšį.

Programos yra atskirtos nuo pagrindinės sistemos smėlio dėžės aplinkoje ir turi prieigą tik prie deklaruotų funkcijų (apsaugos mechanizmas, pagrįstas pajėgumų valdymu – veiksmams su kiekvienu ištekliu (failais, katalogais, lizdais, sistemos iškvietimais ir kt.), prašymui turi būti suteikti atitinkami įgaliojimai). Prieigos kontrolė ir sąveika su sistema teikiama naudojant WASI (WebAssembly System Interface) API, kuri suteikia programavimo sąsajas darbui su failais, lizdais ir kitomis operacinės sistemos teikiamomis funkcijomis.

Platforma leidžia pasiekti programų vykdymo našumą, artimą vietiniams rinkiniams. Naudodami „WebAssembly“ modulio vietinį objektų modulį galite sugeneruoti mašinos kodą („wasmer compile -native“, kad būtų generuojami iš anksto sukompiliuoti .so, .dylib ir .dll objektų failai), kuriam paleisti reikia minimalios vykdymo laiko, tačiau išsaugoma visa smėlio dėžės izoliacija. funkcijos. Galima tiekti iš anksto sukompiliuotas programas su įmontuotu Wasmer. „Rust“ API ir „Wasm-C-API“ siūlomi priedams ir plėtiniams kurti.

Norėdami paleisti „WebAssembly“ konteinerį, tiesiog įdiekite „Wasmer“ vykdymo sistemoje, kuri yra be išorinių priklausomybių („curl https://get.wasmer.io -sSfL | sh“), ir paleiskite reikiamą failą („wasmer test.wasm“). ). Programos platinamos įprastų WebAssembly modulių pavidalu, kuriuos galima valdyti naudojant WAPM paketų tvarkyklę. „Wasmer“ taip pat galima įsigyti kaip biblioteką, kurią galima naudoti „WebAssembly“ kodui įterpti į Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir ir Java programas.

Pagrindiniai Wasmer 3.0 pakeitimai:

  • Pridėta galimybė kurti vietinius vykdomuosius failus bet kuriai platformai. Komanda „wasmer create-exe“ buvo visiškai perkurta, kad „WebAssembly“ tarpinio kodo failas būtų konvertuojamas į savarankiškus vykdomuosius failus, skirtus „Linux“, „Windows“ ir „MacOS“ platformoms, kurios gali veikti neįdiegus paties „Wasmer“.
  • Galima paleisti WAPM paketus, esančius wapm.io kataloge, naudojant komandą „wasmer run“. Pavyzdžiui, paleidus „wasmer run python/python“, python paketas atsisiunčiamas iš wapm.io saugyklos ir paleistas.
  • Wasmer Rust API buvo visiškai perkurta, pakeitus darbo su atmintimi stilių ir suteikiant galimybę saugiai išsaugoti Wasm objektus Store struktūroje. Buvo pasiūlyta nauja „MemoryView“ struktūra, leidžianti nuskaityti ir įrašyti duomenis į tiesinę atminties sritį.
  • Buvo įdiegtas „Wasmer-js“ komponentų rinkinys, skirtas „Wasmer“ paleisti žiniatinklio naršyklėje ir sąveikauti su juo iš „JavaScript“ naudojant wasm-bindgen biblioteką. Savo galimybėmis wasmer-js atitinka wasmer-sys komponentus, skirtus paleisti Wasmer įprastose operacinėse sistemose.
  • Varikliai buvo supaprastinti. Vietoj atskirų JIT, dinaminio ir statinio susiejimo variklių (Universal, Dylib, StaticLib) dabar siūlomas vienas bendras variklis, o kodo įkėlimas ir išsaugojimas valdomas parametrų nustatymo lygiu.
  • Artefaktams deserializuoti naudojamas rkyv karkasas, kuris užtikrina veikimą nulinės kopijos režimu, t.y. kuris nereikalauja papildomo atminties paskirstymo ir atlieka deserializavimą tik naudodamas iš pradžių pateiktą buferį. Rkyv naudojimas žymiai padidino paleidimo greitį.
  • Singlepass vieno eigos kompiliatorius buvo patobulintas, pridėjus kelių reikšmių funkcijų palaikymą, patobulintą patikimumą ir papildomą išimčių apdorojimo kadrų palaikymą.
  • Patobulintas WASI (WebAssembly System Interface) API diegimas. Išspręstos problemos, susijusios su WASI programinės įrangos sąsaja dirbant su failų sistema. Vidiniai tipai buvo perkurti naudojant WAI (WebAssembly Interfaces), kurios ateityje leis naudoti daugybę naujų funkcijų.

Šaltinis: opennet.ru

Добавить комментарий