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

„Wasmer“ projektas išleido antrąjį pagrindinį leidimą, kuriame sukurtas WebAssembly modulių vykdymo laikas, kurį galima naudoti kuriant universalias programas, kurios gali veikti skirtingose ​​operacinėse sistemose, taip pat paleisti nepatikimą kodą atskirai. Projekto kodas parašytas Rust ir platinamas pagal MIT licenciją.

Perkeliamumas pasiekiamas sukompiliavus programos kodą į ž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šį.

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. 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).

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.

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.

Reikšmingas „Wasmer“ versijos numerio pasikeitimas yra susijęs su nesuderinamų vidinės API pakeitimų įvedimu, kuris, kūrėjų teigimu, nepaveiks 99% platformos vartotojų. Tarp pakeitimų, kurie pažeidžia suderinamumą, taip pat pasikeitė serializuotų Wasm modulių formatas (Wasmer 1.0 serijiniai moduliai negalės būti naudojami Wasmer 2.0). Kiti pakeitimai:

  • SIMD (Single Instruction, Multiple Data) instrukcijų palaikymas, leidžiantis lygiagretinti duomenų operacijas. Sritys, kuriose SIMD naudojimas gali žymiai pagerinti našumą, apima mašininį mokymąsi, vaizdo kodavimą ir dekodavimą, vaizdo apdorojimą, fizinių procesų modeliavimą ir grafikos manipuliavimą.
  • Nuorodų tipų palaikymas, leidžiantis Wasm moduliams pasiekti informaciją kituose moduliuose arba pagrindinėje aplinkoje.
  • Buvo atliktas reikšmingas našumo optimizavimas. LLVM vykdymo laikas su slankiojo kablelio skaičiais buvo padidintas maždaug 50%. Funkcijų iškvietimai buvo žymiai pagreitinti sumažinus situacijų, kai reikia prieigos prie branduolio, skaičių. Cranelift kodų generatoriaus našumas padidintas 40%. Sutrumpintas duomenų deserializacijos laikas.
    Galimas „Wasmer 2.0“ įrankių rinkinys, skirtas „WebAssembly“ programoms kurti
    Galimas „Wasmer 2.0“ įrankių rinkinys, skirtas „WebAssembly“ programoms kurti
  • Siekiant tiksliau atspindėti esmę, buvo pakeisti variklių pavadinimai: JIT → Universal, Native → Dylib (Dynamic Library), Object File → StaticLib (Static Library).

Šaltinis: opennet.ru

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