Wasmer 3.0, isang toolkit para sa pagbuo ng mga application na nakabatay sa WebAssembly, ay magagamit

Ang ikatlong pangunahing pagpapalabas ng proyektong Wasmer ay ipinakilala, na bumubuo ng isang runtime para sa pagpapatupad ng mga module ng WebAssembly na maaaring magamit upang lumikha ng mga unibersal na application na maaaring tumakbo sa iba't ibang mga operating system, gayundin upang magsagawa ng hindi pinagkakatiwalaang code sa paghihiwalay. Ang code ng proyekto ay nakasulat sa Rust at ipinamamahagi sa ilalim ng lisensya ng MIT.

Ang kakayahang magpatakbo ng isang application sa maraming platform ay nakakamit sa pamamagitan ng pag-compile ng code sa mababang antas na WebAssembly intermediate code, na maaaring tumakbo sa anumang OS o mai-embed sa mga programa sa iba pang mga programming language. Ang mga programa ay magaan na mga lalagyan na nagpapatakbo ng WebAssembly pseudocode. Ang mga container na ito ay hindi nakatali sa operating system at maaaring magsama ng code na orihinal na nakasulat sa anumang programming language. Ang Emscripten toolkit ay maaaring gamitin upang mag-compile sa WebAssembly. Upang isalin ang WebAssembly sa machine code ng kasalukuyang platform, sinusuportahan nito ang koneksyon ng iba't ibang compilation backend (Singlepass, Cranelift, LLVM) at engine (gamit ang JIT o machine code generation).

Ang mga application ay nakahiwalay sa pangunahing system sa isang sandbox environment at may access lamang sa ipinahayag na functionality (isang mekanismo ng seguridad batay sa pamamahala ng kakayahan - para sa mga aksyon sa bawat isa sa mga mapagkukunan (mga file, direktoryo, socket, system call, atbp.), ang ang aplikasyon ay dapat bigyan ng naaangkop na kapangyarihan). Ang kontrol sa pag-access at pakikipag-ugnayan sa system ay ibinibigay gamit ang WASI (WebAssembly System Interface) API, na nagbibigay ng mga interface ng programming para sa pagtatrabaho sa mga file, socket at iba pang mga function na ibinigay ng operating system.

Binibigyang-daan ka ng platform na makamit ang pagganap ng pagpapatupad ng aplikasyon malapit sa mga katutubong asembliya. Gamit ang Native Object Engine para sa WebAssembly module, maaari kang bumuo ng machine code (β€œwasmer compile -native” para makabuo ng mga precompiled .so, .dylib at .dll object file), na nangangailangan ng minimal na runtime para tumakbo, ngunit pinapanatili ang lahat ng sandbox isolation mga tampok. Posibleng magbigay ng mga precompiled program na may built-in na Wasmer. Ang Rust API at Wasm-C-API ay inaalok para sa paggawa ng mga add-on at extension.

Para maglunsad ng container ng WebAssembly, i-install lang ang Wasmer sa runtime system, na walang mga external na dependency (β€œcurl https://get.wasmer.io -sSfL | sh”), at patakbuhin ang kinakailangang file (β€œwasmer test.wasm” ). Ang mga programa ay ipinamamahagi sa anyo ng mga regular na WebAssembly module, na maaaring pamahalaan gamit ang WAPM package manager. Available din ang Wasmer bilang isang library na maaaring magamit upang i-embed ang WebAssembly code sa Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir, at Java na mga programa.

Mga pangunahing pagbabago sa Wasmer 3.0:

  • Idinagdag ang kakayahang lumikha ng mga katutubong executable na file para sa anumang platform. Ang command na "wasmer create-exe" ay ganap na muling idinisenyo upang i-convert ang isang WebAssembly intermediate code file sa mga self-contained executable para sa mga platform ng Linux, Windows, at macOS na maaaring tumakbo nang hindi ini-install ang Wasmer mismo.
  • Posibleng ilunsad ang mga pakete ng WAPM na matatagpuan sa direktoryo ng wapm.io gamit ang command na "wasmer run". Halimbawa, ang pagpapatakbo ng "wasmer run python/python" ay magda-download ng python package mula sa wapm.io repository at patakbuhin ito.
  • Ang Wasmer Rust API ay ganap na muling idinisenyo, binabago ang istilo ng pagtatrabaho gamit ang memorya at nagbibigay ng kakayahang ligtas na i-save ang mga Wasm object sa istraktura ng Store. Ang isang bagong istraktura ng MemoryView ay iminungkahi na nagbibigay-daan sa pagbabasa at pagsulat ng data sa isang linear na lugar ng memorya.
  • Ang isang hanay ng mga bahagi ng wasmer-js ay ipinatupad upang patakbuhin ang Wasmer sa isang web browser at makipag-ugnayan dito mula sa JavaScript gamit ang wasm-bindgen library. Sa mga kakayahan nito, ang wasmer-js ay tumutugma sa mga bahagi ng wasmer-sys na idinisenyo upang patakbuhin ang Wasmer sa mga regular na operating system.
  • Ang mga makina ay pinasimple. Sa halip na magkahiwalay na makina para sa JIT, dynamic at static na pag-link (Universal, Dylib, StaticLib), isang karaniwang engine ang inaalok na ngayon, at ang paglo-load at pag-save ng code ay kinokontrol sa antas ng pagtatakda ng mga parameter.
  • Upang deserialize ang mga artifact, ginagamit ang rkyv framework, na nagsisiguro ng operasyon sa zero-copy mode, i.e. na hindi nangangailangan ng karagdagang paglalaan ng memorya at nagsasagawa lamang ng deserialization gamit ang unang ibinigay na buffer. Ang paggamit ng rkyv ay makabuluhang nadagdagan ang bilis ng pagsisimula.
  • Ang Singlepass single-pass compiler ay napabuti, nagdaragdag ng suporta para sa mga multi-value function, pinahusay na pagiging maaasahan, at nagdagdag ng suporta para sa exception handling frames.
  • Pinahusay na pagpapatupad ng WASI (WebAssembly System Interface) API. Ang mga problema sa interface ng software ng WASI para sa pagtatrabaho sa file system ay nalutas na. Ang mga panloob na uri ay muling idinisenyo gamit ang WAI (WebAssembly Interfaces), na magbibigay-daan sa isang serye ng mga bagong feature sa hinaharap.

Pinagmulan: opennet.ru

Magdagdag ng komento