I-Wasmer 3.0, isixhobo sokwenza izicelo ezisekelwe kwiWebAssembly, iyafumaneka

Ukukhutshwa kwesithathu okukhulu kweprojekthi ye-Wasmer yaziswa, ephuhlisa ixesha lokuqhuba iimodyuli zeWebAssembly ezingasetyenziselwa ukudala izicelo zendalo yonke ezinokusebenza kwiinkqubo ezahlukeneyo zokusebenza, kunye nokwenza ikhowudi engathembekanga ngokuzimeleyo. Ikhowudi yeprojekthi ibhalwe kwi-Rust kwaye ihanjiswa phantsi kwelayisenisi ye-MIT.

Ikhono lokuqhuba isicelo esisodwa kwiiplatifti ezininzi zifezekiswa ngokuqulunqa ikhowudi kwikhowudi ye-WebAssembly ephakathi, enokuthi iqhube kuyo nayiphi na i-OS okanye ifakwe kwiiprogram kwezinye iilwimi zeprogram. Iinkqubo zizikhongozeli ezikhaphukhaphu ezisebenzisa i-WebAssembly pseudocode. Ezi zikhongozeli azibotshelelwanga kwinkqubo yokusebenza kwaye zinokubandakanya ikhowudi ebhalwe ekuqaleni kulo naluphi na ulwimi lwenkqubo. I-Emscripten toolkit ingasetyenziselwa ukuqokelela kwiWebAssembly. Ukuguqulela i-WebAssembly kwikhowudi yomshini weqonga langoku, ixhasa uxhulumaniso lweendlela ezahlukeneyo zokubuyela umva (i-Singlepass, i-Cranelift, i-LLVM) kunye neenjini (usebenzisa i-JIT okanye ukuveliswa kwekhowudi yomatshini).

Izicelo zibekwe zodwa kwinkqubo engundoqo kwindawo yebhokisi yesanti kwaye inofikelelo kuphela kumsebenzi obhengeziweyo (indlela yokhuseleko esekwe kulawulo lwesakhono - ngezenzo ngesixhobo ngasinye (iifayile, abalawuli, iziseko, iminxeba yenkqubo, njl. njl.), isicelo kufuneka sinikwe amagunya afanelekileyo). Ukulawulwa kokufikelela kunye nokusebenzisana kunye nenkqubo kubonelelwa ngokusebenzisa i-WASI (WebAssembly System Interface) API, ebonelela ngeenkqubo zokusebenzisana kunye nokusebenza ngeefayile, iziseko kunye neminye imisebenzi enikezelwa yinkqubo yokusebenza.

Iqonga likuvumela ukuba ufezekise ukusebenza kwesicelo kufutshane neendibano zomthonyama. Ukusebenzisa iNjini yeNative Object kwimodyuli yeWebAssembly, unokuvelisa ikhowudi yomatshini ("i-wasmer compile -native" ukuvelisa i-precompiled .so, .dylib kunye .dll iifayile zento), efuna ixesha elincinci lokugijima, kodwa igcina yonke i-sandbox yodwa. Iimbonakalo. Kuyenzeka ukubonelela ngeenkqubo eziqulunqwe kwangaphambili ngeWasmer eyakhelweyo. I-Rust API kunye ne-Wasm-C-API zinikezelwa ngokudala izongezo kunye nezandiso.

Ukuqalisa i-container ye-WebAssembly, vele ufake i-Wasmer kwi-runtime system, eza ngaphandle kokuxhomekeka kwangaphandle ("curl https://get.wasmer.io -sSfL | sh"), kwaye uqhube ifayile efunekayo ("wasmer test.wasm" ). Iinkqubo zihanjiswa ngendlela yeemodyuli zeWebAssembly eziqhelekileyo, ezinokulawulwa ngokusebenzisa umphathi wepakethe ye-WAPM. I-Wasmer iyafumaneka njengethala leencwadi elingasetyenziselwa ukubethelela ikhowudi yeWebAssembly kwiRust, C / C ++, C #, D, Python, JavaScript, Go, PHP, Ruby, Elixir, kunye neenkqubo zeJava.

Utshintsho olukhulu kwiWasmer 3.0:

  • Yongezwe ukukwazi ukwenza iifayile eziphunyeziweyo zemveli kulo naliphi na iqonga. Umyalelo we "wasmer create-exe" uhlaziywe ngokutsha ukuguqula ifayile yekhowudi ephakathi yeWebAssembly ibe yinkqubo ezimeleyo yeLinux, Windows, kunye neqonga leMacOS elinokuqhuba ngaphandle kokufaka iWasmer ngokwayo.
  • Kuyenzeka ukuba uqalise iipakethe ze-WAPM ezikuluhlu lwe-wapm.io usebenzisa i-"wasmer run" umyalelo. Umzekelo, ukuqhuba "i-wasmer run python/python" iya kukhuphela iphakheji yepython kwindawo yokugcina i-wapm.io kwaye uyiqhube.
  • I-Wasmer Rust API iye yahlaziywa ngokupheleleyo, itshintsha indlela yokusebenza ngememori kunye nokubonelela ngokukwazi ukugcina ngokukhuselekileyo izinto zeWasm kwisakhiwo seSitolo. Ulwakhiwo olutsha lweMemoryView lucetyiwe oluvumela ukufunda nokubhala idatha kwindawo yememori ehambelanayo.
  • Iseti yamacandelo e-wamer-js iphunyeziwe ukuze kuqhutywe i-Wasmer kwi-browser yewebhu kunye nokusebenzisana nayo kwiJavaScript usebenzisa ilayibrari ye-wasm-bindgen. Kwizakhono zayo, i-wamer-js ihambelana ne-wamer-sys components eyenzelwe ukuqhuba i-Wasmer kwiinkqubo zokusebenza eziqhelekileyo.
  • Iinjini zenziwe lula. Esikhundleni seenjini ezihlukeneyo ze-JIT, ukudibanisa okuguquguqukayo kunye nokudibanisa (i-Universal, i-Dylib, i-StaticLib), enye injini eqhelekileyo inikezelwa ngoku, kwaye ukulayisha kunye nokugcina ikhowudi ilawulwa kwinqanaba lokumisela iiparitha.
  • Ukulahla izinto zakudala, isakhelo se-rkyv sisetyenziswa, esiqinisekisa ukusebenza kwimodi ye-zero-copy, i.e. engafuni unikezelo lwenkumbulo eyongezelelweyo kwaye yenza i-deserialization isebenzisa kuphela isithinteli esibonelelwe ekuqaleni. Ukusetyenziswa kwerkyv kunyuse kakhulu isantya sokuqalisa.
  • I-Singlepass i-single-pass compiler iphuculwe, yongeza inkxaso yemisebenzi emininzi yexabiso, ukuthembeka okuphuculweyo, kunye nenkxaso eyongeziweyo yezakhelo zokuphatha ngaphandle.
  • Ukuphuculwa kokuphunyezwa kwe-WASI (WebAssembly System Interface) API. Iingxaki kwi-software ye-WASI yojongano lokusebenza kunye nenkqubo yefayile ziye zasonjululwa. Iindidi zangaphakathi zenziwe ngokutsha kusetyenziswa i-WAI (i-WebAssembly Interfaces), eya kwenza uluhlu lweempawu ezintsha kwixesha elizayo.

umthombo: opennet.ru

Yongeza izimvo