Lëshimi i dytë i rëndësishëm i projektit Wasmer ka ndodhur, i cili zhvillon runtime për ekzekutimin e moduleve WebAssembly, që mund të përdoret për të krijuar aplikacione universale, të cilat mund të ekzekutohen në sisteme të ndryshme operative, si dhe për ekzekutimin e izoluar të kodit të pa besueshëm. Kodi i projektit është shkruar në gjuhën Rust dhe shpërndahet nën licencën MIT.
Transportueshmëria sigurohet përmes përkthimit të kodit të aplikacionit në kod të ulët ndërmjetësor WebAssembly, i cili mund të ekzekutohet në çdo OS ose të integrohet në programe të tjerë gjuhësh programimi. Programet përbëjnë konteinerë të lehtë, në të cilat ekzekutohet pseudo-kodi WebAssembly. Këta konteinerë nuk janë të lidhur me sistemin operativ dhe mund të përmbajnë kode fillimisht të shkruara në çdo gjuhë programimi. Për përkthimin në WebAssembly mund të përdoret mjetin Emscripten. Për përkthimin e WebAssembly në kod maqine për platformat aktuale, mbështeten lidhjet e ndryshme të përpunimit (Singlepass, Cranelift, LLVM) dhe motorëve (përdorimi i JIT ose gjenerimi i kodit maqine).
Menaxhimi i aksesit dhe ndĂ«rveprimi me sistemin sigurohet pĂ«rmes API WASI (WebAssembly System Interface), i cili ofron interface pĂ«r punĂ« me skedarĂ«t, soketat dhe funksione tĂ« tjera tĂ« ofruara nga sistemi operativ. Aplikacionet janĂ« tĂ« izoluar nga sistemi kryesor nĂ« njĂ« mjedis sandbox dhe kanĂ« akses vetĂ«m nĂ« funksionalitetin e deklaruar (mekanizmi i sigurisĂ« bazuar nĂ« menaxhimin e mundĂ«sive â pĂ«r çdo veprim me burimet (skedarĂ«, katalogĂ«, soketĂ«, thirrje sistemike, etj.) aplikacioni duhet tĂ« ketĂ« autorizimet pĂ«rkatĂ«se).
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.
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.
Ndryshimi i rëndësishëm i numrit të versionit të Wasmer është i lidhur me ndryshimet që thyejnë kompatibilitetin në API-in e brendshëm, të cilat, sipas zhvilluesve, nuk do të ndikojnë në 99% të përdoruesve të platformës. Nga ndryshimet që thyejnë kompatibilitetin gjithashtu përmendet ndryshimi i formatit të moduleve të serializuar Wasm (modulet e serializuara në Wasmer 1.0 nuk do të mund të përdoren në Wasmer 2.0). Ndryshime të tjera:
- Mbështetje për instruksione SIMD (Single Instruction, Multiple Data), që lejojnë organizimin e paralelizimit të operacioneve mbi të dhënat. Nga fushat ku përdorimi i SIMD mund të rrisë ndjeshëm performancën, përmendet mësimi automat, kodimi dhe dekodimi i videove, përpunimi i imazheve, simulimi i proceseve fizike dhe manovrat me grafikën.
- Mbështetje për llojet e referencave, që lejojnë moduleve Wasm të aksesojnë informacionin në module të tjera ose në ambientin bazë.
- ĂshtĂ« realizuar njĂ« optimizim i rĂ«ndĂ«sishĂ«m i performancĂ«s. ShpejtĂ«sia e runtime-it LLVM me numra me pikĂ« tĂ« lĂ«vizshme Ă«shtĂ« rritur afĂ«rsisht me 50%. Thirrja e funksioneve Ă«shtĂ« pĂ«rshpejtuar ndjeshĂ«m pĂ«r shkak tĂ« zvogĂ«limit tĂ« rasteve qĂ« kĂ«rkojnĂ« qasje nĂ« bĂ«rthamĂ«. Performanca e gjeneratorit tĂ« kodit Cranelift Ă«shtĂ« rritur me 40%. ĂshtĂ« zvogĂ«luar koha e deserializimit tĂ« tĂ« dhĂ«nave.


- PĂ«r tĂ« reflektuar mĂ« saktĂ« thelbin, emrat e motorĂ«ve janĂ« ndryshuar: JIT â Universal, Native â Dylib (Biblioteka Dinamik), Object File â StaticLib (Biblioteka Statike).
Burimi: opennet.ru


