Wasmer 2.0, amûrek ji bo avakirina serîlêdanên WebAssembly-ê, heye.

Projeya Wasmer serbestberdana xweya duyemîn a mezin derxistiye, ji bo pêkanîna modulên WebAssembly ku dikare were bikar anîn ji bo afirandina serîlêdanên gerdûnî yên ku dikarin li ser pergalên xebitandinê yên cihêreng bixebitin, û hem jî ji bo ku koda nebawer bi veqetandî bimeşîne, demek xebitandinê pêşve dike. Koda projeyê bi Rust hatî nivîsandin û di bin lîsansa MIT-ê de tê belav kirin.

Veguheztin bi berhevkirina koda serîlêdanê di koda navîn a WebAssembly ya asta nizm de, ku dikare li ser her OS-ê bixebite an jî di bernameyên bi zimanên din ên bernamekirinê de were bicîh kirin, tê bidestxistin. Bername konteynerên sivik in ku WebAssembly pseudocode dimeşînin. Van konteyneran bi pergala xebitandinê ve ne girêdayî ne û dikarin koda ku bi eslê xwe bi her zimanek bernamesaziyê hatî nivîsandin vehewînin. Amûra Emscripten dikare ji bo berhevkirina WebAssembly were bikar anîn. Ji bo wergerandina WebAssembly li koda makîneya platforma heyî, ew piştgirî dide girêdana paşnavên berhevokê yên cihêreng (Singlepass, Cranelift, LLVM) û motoran (bi karanîna JIT an hilberîna koda makîneyê).

Kontrola gihîştinê û danûstendina bi pergalê re bi karanîna API-ya WASI (WebAssembly System Interface) tê peyda kirin, ku ji bo xebata bi pelan, soketan û fonksiyonên din ên ku ji hêla pergala xebitandinê ve têne peyda kirin, navbeynkariya bernameyê peyda dike. Serlêdan ji pergala sereke di hawîrdorek sandboxê de têne veqetandin û tenê gihîştina fonksiyona diyarkirî (mekanîzmayek ewlehiyê ya ku li ser bingeha rêveberiya kapasîteyê ye - ji bo çalakiyên bi her yek ji çavkaniyan (pel, peldank, soket, bangên pergalê, hwd.), serîlêdanê divê hêzên guncan bêne dayîn).

Ji bo destpêkirina konteynerek WebAssembly, tenê Wasmer-ê di pergala xebitandinê de saz bikin, ku bêyî girêdanên derveyî tê ("curl https://get.wasmer.io -sSfL | sh"), û pelê pêwîst bimeşînin ("wasmer test.wasm" ). Bername di forma modulên WebAssembly yên birêkûpêk de têne belav kirin, ku dikarin bi karanîna rêveberê pakêtê WAPM ve werin rêvebirin. Wasmer di heman demê de wekî pirtûkxaneyek heye ku dikare were bikar anîn da ku koda WebAssembly di bernameyên Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir, û Java de bi cih bike.

Platform dihêle hûn performansa darvekirina serîlêdanê li nêzî meclîsên xwecihî bi dest bixin. Bi karanîna Engine Object Native ji bo modula WebAssembly, hûn dikarin koda makîneyê biafirînin ("wasmer compile -native" da ku pelên objeya .so, .dylib û .dll berî berhevkirî çêbike), ku ji bo xebitandinê dema xebitandinê hindiktirîn hewce dike, lê hemî veqetandina sandboxê digire. taybetmendiyên. Mimkun e ku bernameyên pêş-kompilkirî bi Wasmer-a çêkirî re peyda bikin. Rust API û Wasm-C-API ji bo afirandina pêvek û pêvekan têne pêşkêş kirin.

Guherînek girîng di jimareya guhertoya Wasmer de bi danasîna guhertinên nehevgirtî yên API-ya navxweyî re têkildar e, ku, li gorî pêşdebiran, dê bandorê li 99% bikarhênerên platformê neke. Di nav guheztinên ku lihevhatiniyê dişkînin, di forma modulên Wasm ên serialîzekirî de jî guherînek heye (modulên ku di Wasmer 1.0 de serialîzekirî ne dê di Wasmer 2.0 de werin bikar anîn). Guhertinên din:

  • Piştgiriya ji bo rêwerzên SIMD (Rêveberiya Yekane, Daneyên Pirjimar), ku destûrê dide paralelkirina operasyonên daneyê. Qadên ku tê de karanîna SIMD dikare bi girîngî performansê baştir bike fêrbûna makîneyê, şîfrekirin û dekodkirina vîdyoyê, pêvajokirina wêneyê, simulasyona pêvajoya laşî, û manîpulasyona grafîkê ne.
  • Piştgiriya celebên referansê, dihêle ku modulên Wasm di modulên din an jîngeha bingehîn de bigihîjin agahdariyan.
  • Optimîzasyonên performansê yên girîng hatine çêkirin. Leza dema xebitandinê ya LLVM bi hejmarên xala herikînê re bi qasî 50% zêde bûye. Bangên fonksiyonê bi kêmkirina rewşên ku hewcedariya gihîştina kernelê heye bi girîngî bileztir bûne. Performansa hilberînerê koda Cranelift% 40 zêde bûye. Dema deserialîzasyona daneyê kêm kir.
    Wasmer 2.0, amûrek ji bo avakirina serîlêdanên WebAssembly-ê, heye.
    Wasmer 2.0, amûrek ji bo avakirina serîlêdanên WebAssembly-ê, heye.
  • Ji bo ku esasê bi awayekî rasttir nîşan bide, navên motoran hatine guhertin: JIT → Gerdûnî, Native → Dylib (Pirtûkxaneya Dînamîk), Pelê Objekt → StaticLib (Pirtûkxaneya Statîk).

Source: opennet.ru

Add a comment