Wasmer 3.0, 'n gereedskapstel vir die bou van WebAssembly-gebaseerde toepassings, is beskikbaar

Dit is die derde groot vrystelling van die Wasmer-projek, wat 'n looptyd ontwikkel vir die uitvoering van WebAssembly-modules wat gebruik kan word om universele toepassings te skep wat op verskillende bedryfstelsels kan loop, sowel as sandbox-uitvoering van onbetroubare kode. Die projekkode is in Rust geskryf en onder die MIT-lisensie versprei.

Die vermoë om dieselfde toepassing op verskillende platforms te laat loop, word verskaf deur die kode saam te stel in 'n laevlak WebAssembly-tussenkode wat op enige bedryfstelsel kan loop of in programme in ander programmeertale ingebed kan word. Programme is liggewig houers wat WebAssembly pseudokode laat loop. Hierdie houers is nie gekoppel aan die bedryfstelsel nie en kan kode insluit wat oorspronklik in enige programmeertaal geskryf is. Die Emscripten toolkit kan gebruik word om saam te stel na WebAssembly. Om WebAssembly in die masjienkode van die huidige platform te vertaal, word dit ondersteun om verskillende samestellings-agtergronde (Singlepass, Cranelift, LLVM) en enjins (met behulp van JIT of generering van masjienkode) te verbind.

Toepassings is geïsoleer van die hoofstelsel in 'n sandbox-omgewing en het slegs toegang tot die verklaarde funksionaliteit (vermoë-gebaseerde sekuriteitsmeganisme - vir aksies met elk van die hulpbronne (lêers, gidse, voetstukke, stelseloproepe, ens.), moet die toepassing die toepaslike magte gegee word). Toegangsbeheer en interaksie met die stelsel word verskaf deur gebruik te maak van die WASI (WebAssembly System Interface) API, wat programmeerkoppelvlakke verskaf vir werk met lêers, voetstukke en ander funksies wat deur die bedryfstelsel verskaf word.

Die platform laat jou toe om toepassingsuitvoering te bereik naby dié van inheemse samestellings. Deur die Native Object Engine vir 'n WebAssembly-module te gebruik, kan jy inheemse kode genereer ("wasmer compile -native" vir die generering van vooraf saamgestelde .so-, .dylib- en .dll-objeklêers), wat minimale looptyd vereis om te loop, maar behou al die kenmerke van sandbox isolasie. Dit is moontlik om vooraf saamgestelde programme met ingeboude Wasmer te verskaf. Rust API en Wasm-C-API word aangebied vir die skep van byvoegings en byvoegings.

Om 'n WebAssembly-houer te begin, is dit genoeg om Wasmer-looptyd op die stelsel te installeer, wat sonder eksterne afhanklikhede kom ("krul https://get.wasmer.io -sSfL | sh") en die nodige lêer ("wasmer-toets") .wasm"). Programme word versprei in die vorm van gewone WebAssembly-modules, wat met die WAPM-pakketbestuurder bestuur kan word. Wasmer is ook beskikbaar as 'n biblioteek wat gebruik kan word om WebAssembly-kode in Rust-, C/C++-, C#-, D-, Python-, JavaScript-, Go-, PHP-, Ruby-, Elixir- en Java-programme in te sluit.

Groot veranderinge in Wasmer 3.0:

  • Bygevoeg die vermoë om inheemse uitvoerbare lêers vir enige platform te skep. Die "wasmer create-exe"-opdrag is heeltemal herontwerp om 'n WebAssembly-tussenkodelêer te omskep in selfstandige uitvoerbare vir Linux-, Windows- en macOS-platforms wat kan loop sonder om Wasmer self te installeer.
  • Die vermoë om WAPM-pakkette te laat loop wat in die wapm.io-gids geleë is met die "wasmer run"-opdrag is verskaf. Byvoorbeeld, die uitvoering van "wasmer run python/python" sal die python-pakket van die wapm.io-bewaarplek aflaai en dit laat loop.
  • Die Wasmer Rust API is heeltemal herontwerp, waarin die styl van werk met geheue verander is en die vermoë om Wasm-voorwerpe veilig in die Store-struktuur te stoor verskaf is. 'n Nuwe MemoryView-struktuur word voorgestel wat die lees en skryf van data na 'n lineêre geheuearea moontlik maak.
  • 'n Stel wasmer-js-komponente is geïmplementeer om Wasmer in 'n webblaaier te laat loop en daarmee te kommunikeer vanaf JavaScript deur die wasm-bindgen-biblioteek te gebruik. Wasmer-js is soortgelyk in funksionaliteit aan die wasmer-sys-komponente wat ontwerp is om Wasmer op gewone bedryfstelsels te laat loop.
  • Vereenvoudigde enjins. In plaas van afsonderlike enjins vir JIT, dinamiese en statiese koppeling (Universal, Dylib, StaticLib), word een gemeenskaplike enjin nou aangebied en laai en stoor kode waarin dit op die parameterinstellingsvlak beheer word.
  • Om artefakte te deserialiseer, word die rkyv-raamwerk gebruik, wat nulkopie-operasie bied, d.w.s. wat geen addisionele geheuetoewysing benodig nie en deserialisering uitvoer deur slegs die aanvanklik voorsiene buffer te gebruik. Die gebruik van rkyv het die opstartspoed aansienlik verhoog.
  • Die Singlepass-samesteller is verbeter om multiwaarde-funksies te ondersteun, betroubaarheid te verbeter en ondersteuning vir uitsonderingshanteringsrame by te voeg.
  • Verbeterde implementering van die WASI (WebAssembly System Interface) API. Probleme in die WASI API vir werk met die lêerstelsel opgelos. Interne tipes is herontwerp met behulp van WAI (WebAssembly Interfaces), wat 'n reeks nuwe kenmerke in die toekoms sal toelaat om geïmplementeer te word.

Bron: opennet.ru

Voeg 'n opmerking