Wasmer 3.0, ilaro por konstruado de WebAssembly-bazitaj aplikoj, estas havebla

La tria grava eldono de la projekto Wasmer estas lanĉita, kiu disvolvas rultempon por ekzekuti WebAssembly-modulojn, kiuj povas esti uzataj por krei universalajn aplikojn, kiuj povas funkcii per malsamaj operaciumoj, kaj ankaŭ por ekzekuti nefiditan kodon izole. La projektkodo estas skribita en Rust kaj estas distribuita sub la MIT-licenco.

La kapablo prizorgi unu aplikaĵon sur malsamaj platformoj estas disponigita kompilante kodon en malaltnivelan WebAssembly mezan kodon, kiu povas funkcii en iu ajn OS aŭ esti enigita en programoj en aliaj programlingvoj. La programoj estas malpezaj ujoj, kiuj rulas WebAssembly pseŭdokodon. Ĉi tiuj ujoj ne estas ligitaj al la operaciumo kaj povas inkluzivi kodon originale skribitan en iu ajn programlingvo. La ilaro Emscripten povas esti uzata por kompili al WebAssembly. Por traduki WebAssembly en maŝinkodon de la nuna platformo, ĝi subtenas la ligon de diversaj kompilaj backends (Singlepass, Cranelift, LLVM) kaj motoroj (uzante JIT aŭ maŝinkodgeneracion).

Aplikoj estas izolitaj de la ĉefa sistemo en sablokesto-medio kaj havas aliron nur al la deklarita funkcieco (sekureca mekanismo bazita sur kapablo-administrado - por agoj kun ĉiu el la rimedoj (dosieroj, dosierujoj, ingoj, sistemvokoj, ktp.), la apliko devas ricevi la taŭgajn povojn). Alirkontrolo kaj interagado kun la sistemo estas provizitaj per la API WASI (WebAssembly System Interface), kiu disponigas programajn interfacojn por labori kun dosieroj, ingoj kaj aliaj funkcioj disponigitaj de la operaciumo.

La platformo ebligas al vi atingi aplikaĵan ekzekutadon proksime al indiĝenaj asembleoj. Uzante la Native Object Engine por la WebAssembly-modulo, vi povas generi maŝinkodon ("wasmer compile -native" por generi antaŭkompilitajn .so, .dylib kaj .dll-objektajn dosierojn), kiu postulas minimuman rultempon por funkcii, sed konservas la tutan sablokestan izolitecon. Trajtoj. Eblas provizi antaŭkompilitajn programojn kun enkonstruita Wasmer. La Rust API kaj Wasm-C-API estas ofertitaj por krei aldonaĵojn kaj etendaĵojn.

Por lanĉi WebAssembly-ujon, simple instalu Wasmer en la rultempa sistemo, kiu venas sen eksteraj dependecoj ("curl https://get.wasmer.io -sSfL | sh"), kaj rulu la necesan dosieron ("wasmer test.wasm" ). Programoj estas distribuitaj en la formo de regulaj WebAssembly-moduloj, kiuj povas esti administritaj per la pakaĵmanaĝero WAPM. Wasmer ankaŭ haveblas kiel biblioteko, kiu povas esti uzata por enigi WebAssembly-kodon en Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir, kaj Java programojn.

Gravaj ŝanĝoj en Wasmer 3.0:

  • Aldonis la kapablon krei denaskajn ruleblajn dosierojn por ajna platformo. La komando "wasmer create-exe" estis tute restrukturita por konverti WebAssembly-interan koddosieron en memstarajn ruleblajn ruliĝojn por platformoj Linukso, Vindozo kaj macOS, kiuj povas funkcii sen instali Wasmer mem.
  • Eblas lanĉi WAPM-pakaĵojn situantajn en la dosierujo wapm.io uzante la komandon "wasmer run". Ekzemple, ruli "wasmer run python/python" elŝutos la python-pakaĵon el la deponejo wapm.io kaj ruligos ĝin.
  • La Wasmer Rust API estis tute restrukturita, ŝanĝante la stilon labori kun memoro kaj havigante la kapablon sekure konservi Wasm-objektojn en la Store-strukturo. Nova MemoryView-strukturo estis proponita kiu permesas legi kaj skribi datenojn al linia memorareo.
  • Aro de wasmer-js-komponentoj estis efektivigita por ruli Wasmer en tTT-legilo kaj interagi kun ĝi de JavaScript uzante la wasm-bindgen-bibliotekon. En ĝiaj kapabloj, wasmer-js egalrilatas al la wasmer-sys-komponentoj dizajnitaj por ruli Wasmer sur regulaj operaciumoj.
  • Motoroj estis simpligitaj. Anstataŭ apartaj motoroj por JIT, dinamika kaj senmova ligado (Universala, Dylib, StaticLib), unu ofta motoro nun estas ofertita, kaj ŝarĝo kaj ŝparado de kodo estas kontrolita je la nivelo de fiksado de parametroj.
  • Por deserialigi artefaktojn, la rkyv-kadro estas uzata, kiu certigas funkciadon en nul-kopia reĝimo, t.e. kiu postulas neniun kroman memorasignon kaj elfaras deseriigon nur uzante la komence disponigitan bufron. La uzo de rkyv signife pliigis ekrapidecon.
  • La Singlepass unu-enirpermesila kompililo estis plibonigita, aldonante subtenon por mult-valoraj funkcioj, plibonigitan fidindecon, kaj aldonis subtenon por escepttraktadkadroj.
  • Plibonigita efektivigo de la API de WASI (WebAssembly System Interface). Problemoj en la WASI-programa interfaco por labori kun la dosiersistemo estis solvitaj. Internaj tipoj estis restrukturitaj uzante WAI (WebAssembly Interfaces), kiu ebligos serion da novaj funkcioj en la estonteco.

fonto: opennet.ru

Aldoni komenton