U publikua numri i tretë i rëndësishëm i projektit Wasmer, i cili zhvillon një runtime për ekzekutimin e moduleve WebAssembly, i cili mund të përdoret për të krijuar aplikacione universale që mund të ekzekutohen në sisteme operative të ndryshme, si dhe për ekzekutimin e izoluar të kodit të pabesueshëm. Kodi i projektit është shkruar në gjuhën Rust dhe shpërndahet nën licencën MIT.
Mundësia e ekzekutimit të një aplikacioni në platforma të ndryshme sigurohet falë përpunimit të kodit në një kod të ndërmjetëm me nivel të ulët WebAssembly, i cili mund të funksionojë në çdo sistem operativ ose të integrohet në programa të tjera të gjuhëve të programimit. Programet paraqesin kontejnerë të lehtë, në të cilët ekzekutohet pseudokodi WebAssembly. Këta kontejnerë nuk janë të lidhur me sistemin operativ dhe mund të përmbajnë kod që është shkruar fillimisht në çdo gjuhë programimi. Për përpunim në WebAssembly mund të përdoret mjet i quajtur Emscripten. Për përkthimin e WebAssembly në kodin makinerik të platformës aktuale, mbështetet lidhja e backend-eve të ndryshme të kompilimit (Singlepass, Cranelift, LLVM) dhe motorëve (përdorimi i JIT ose gjenerimi i kodit makinerik).
Aplikacionet janĂ« tĂ« izoluar nga sistemi kryesor nĂ« njĂ« ambient sandbox dhe kanĂ« qasje vetĂ«m nĂ« funksionalitetin e deklaruar (mekanizmi i sigurisĂ« tĂ« bazuar nĂ« menaxhimin e mundĂ«sive â pĂ«r veprime me çdo burim (skedarĂ«, dosje, sokete, thirrje sistemike, etj.) aplikacionit duhet t'i jepen pĂ«rkatĂ«sisht autorizimet e nevojshme). Menaxhimi i qasjes dhe bashkĂ«veprimi me sistemin sigurohet pĂ«rmes API tĂ« WASI (WebAssembly System Interface), qĂ« ofron ndĂ«rfaqe pĂ«r punĂ«n me skedarĂ«t, soketet dhe funksione tĂ« tjera qĂ« ofrohen nga sistemi operativ.
Platformat ofrojnĂ« performancĂ« ekzekutimi tĂ« aplikacioneve qĂ« Ă«shtĂ« afĂ«r ekzekutimit tĂ« ndĂ«rtimeve native. Me ndihmĂ«n e Native Object Engine pĂ«r modul WebAssembly, mund tĂ« gjeneroni kod makinerie ("wasmer compile --native" pĂ«r tĂ« gjeneruar skedarĂ« objektĂ«sh tĂ« para-kompiluara .so, .dylib dhe .dll), pĂ«r ekzekutimin e tĂ« cilit kĂ«rkohet njĂ« runtime minimal, por tĂ« gjitha mundĂ«sitĂ« e izolimit sandbox mbahen. ĂshtĂ« e mundur tĂ« dorĂ«zoni programe tĂ« para-kompiluara me Wasmer tĂ« integruar. PĂ«r krijimin e shtesave dhe plotĂ«simeve ofrohen Rust API dhe Wasm-C-API.
Për të nisur një kontejner WebAssembly, mjafton të instaloni runtime-in Wasmer në sistem, i cili vjen pa varësi të jashtme ("curl https://get.wasmer.io -sSfL | sh"), dhe të nisni skedarin e nevojshëm ("wasmer test.wasm"). Programet shpërndahen në formën e moduleve të zakonshme WebAssembly, për menaxhimin e të cilave mund të përdorni menaxherin e paketave WAPM. Wasmer gjithashtu është i disponueshëm në formën e një biblioteke, e cila mund të përdoret për të integruar kodin WebAssembly në programet e shkruara në gjuhët Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir dhe Java.
Ndryshimet kryesore në Wasmer 3.0:
- Shtuar mundësia për të krijuar skedarë ekzekutivë native për çdo platformë. Ekipi "wasmer create-exe" është rishikuar plotësisht, i cili lejon transformimin e një skedari me kod ndërmjetës WebAssembly në skedarë ekzekutivë të pavarur për platformat Linux, Windows dhe macOS, të cilët mund të punojnë pa instaluar Wasmer-in vetë.
- Oferuar mundësia për të ekzekutuar paketat WAPM, të vendosura në katalogun wapm.io, përmes komandës "wasmer run". Për shembull, ekzekutimi i "wasmer run python/python" do të çojë në ngarkimin nga repositori wapm.io të paketës python dhe ekzekutimin e saj.
- API i Wasmer Rust Ă«shtĂ« rigsovuar komplet, me njĂ« stil tĂ« ri tĂ« punĂ«s me kujtesĂ«n dhe mundĂ«sinĂ« pĂ«r ruajtjen e sigurt tĂ« objekteve Wasm nĂ« strukturĂ«n Store. ĂshtĂ« propozuar njĂ« strukturĂ« e re MemoryView qĂ« lejon tĂ« lexoni dhe shkruani tĂ« dhĂ«na nĂ« njĂ« zonĂ« lineare tĂ« kujtesĂ«s.
- Një grup komponentësh wasmer-js është zbatuar për të ekzekutuar Wasmer në shfletuesin web dhe për të bashkëvepruar me të nga JavaScript, duke përdorur bibliotekën wasm-bindgen. Në funksionalitetin e tij, wasmer-js i përshtatet komponenteve wasmer-sys, të destinuara për ekzekutimin e Wasmer në sisteme operative të zakonshme.
- Makinat janë thjeshtuar. Në vend të makinave të ndara për JIT, lidhjen dinamike dhe atë statike (Universal, Dylib, StaticLib), tani ofrohet një motor i vetëm dhe ngarkimi dhe ruajtja e kodit menaxhohet në nivelin e parametrave.
- Për deserializimin e artefakteve është përdorur framework-u rkyv, i cili siguron funksionim në modalitetin zero-copy, duke mos kërkuar alokimin e kujtesës shtesë dhe duke kryer deserializimin vetëm duke përdorur tamponin fillestar të ofruar. Përdorimi i rkyv ka rritur ndjeshëm shpejtësinë e nisjes.
- Compileri i përmirësuar Singlepass, tani mbështet funksionet me shumë argumente (multi-value), rritet besueshmëria dhe është shtuar mbështetja për kadrot e trajtimit të përjashtimeve.
- Zhvillimi i API WASI (WebAssembly System Interface) është përmirësuar. Problemet në ndërfaqen e programit WASI për punën me sistemin e skedarëve janë zgjidhur. Llojet e brendshme janë rishikuar duke përdorur WAI (WebAssembly Interfaces), e cila në të ardhmen do të mundësojë implementimin e një serie mundësish të reja.
Burimi: opennet.ru
