Wasmer 2.0, työkalupakki WebAssembly-pohjaisten sovellusten rakentamiseen, on saatavilla

Wasmer-projekti on julkaissut toisen suuren julkaisunsa, jossa kehitetään ajonaikaista WebAssembly-moduulien suorittamiseen, jonka avulla voidaan luoda universaaleja sovelluksia, jotka voivat toimia eri käyttöjärjestelmissä, sekä ajaa epäluotettavaa koodia erillään. Projektikoodi on kirjoitettu Rust-kielellä ja sitä jaetaan MIT-lisenssillä.

Siirrettävyys saavutetaan kääntämällä sovelluskoodi matalan tason WebAssembly-välikoodiksi, jota voidaan käyttää missä tahansa käyttöjärjestelmässä tai upotettuna muiden ohjelmointikielien ohjelmiin. Ohjelmat ovat kevyitä säiliöitä, jotka käyttävät WebAssembly-pseudokoodia. Näitä säilöjä ei ole sidottu käyttöjärjestelmään, ja ne voivat sisältää koodia, joka on alun perin kirjoitettu millä tahansa ohjelmointikielellä. Emscripten-työkalupakkia voidaan käyttää WebAssemblyn kääntämiseen. WebAssemblyn kääntämiseksi nykyisen alustan konekoodiksi se tukee erilaisten käännöstaustaohjelmien (Singlepass, Cranelift, LLVM) ja moottoreiden (käyttämällä JIT- tai konekoodin generointia) yhteyttä.

Kulunvalvonta ja vuorovaikutus järjestelmän kanssa tarjotaan WASI (WebAssembly System Interface) API:lla, joka tarjoaa ohjelmointirajapinnat tiedostojen, pistokkeiden ja muiden käyttöjärjestelmän tarjoamien toimintojen käsittelyyn. Sovellukset on eristetty pääjärjestelmästä hiekkalaatikkoympäristössä, ja niillä on pääsy vain ilmoitettuihin toimintoihin (ominaisuuksien hallintaan perustuva suojausmekanismi - jokaiselle resurssille (tiedostot, hakemistot, pistorasiat, järjestelmäkutsut jne.) kohdistuville toimille. hakemukselle on annettava asianmukaiset valtuudet).

Käynnistä WebAssembly-säilö asentamalla Wasmer ajonaikaiseen järjestelmään, joka tulee ilman ulkoisia riippuvuuksia ("curl https://get.wasmer.io -sSfL | sh") ja suorittamalla tarvittava tiedosto ("wasmer test.wasm" ). Ohjelmat jaetaan tavallisina WebAssembly-moduuleina, joita voidaan hallita WAPM-paketinhallinnan avulla. Wasmer on saatavana myös kirjastona, jota voidaan käyttää WebAssembly-koodin upottamiseen Rust-, C/C++-, C#-, D-, Python-, JavaScript-, Go-, PHP-, Ruby-, Elixir- ja Java-ohjelmiin.

Alustan avulla voit saavuttaa sovellusten suorituskyvyn lähellä alkuperäisiä kokoonpanoja. Käyttämällä WebAssembly-moduulin Native Object Engineä voit luoda konekoodin ("wasmer compile -native" esikäännettyjen .so-, .dylib- ja .dll-objektitiedostojen luomiseksi), jonka suorittaminen vaatii vähän ajoaikaa, mutta säilyttää kaiken hiekkalaatikon eristyksen. ominaisuudet. On mahdollista toimittaa esikäännetyt ohjelmat sisäänrakennetulla Wasmerilla. Rust API ja Wasm-C-API tarjotaan lisäosien ja laajennusten luomiseen.

Merkittävä muutos Wasmerin versionumerossa liittyy yhteensopimattomien muutosten käyttöönottoon sisäiseen API:iin, jotka kehittäjien mukaan eivät vaikuta 99 prosenttiin alustan käyttäjistä. Yhteensopivuutta rikkovien muutosten joukossa on myös muutos serialisoitujen Wasm-moduulien muodossa (Wasmer 1.0:ssa sarjoitettuja moduuleja ei voida käyttää Wasmer 2.0:ssa). Muut muutokset:

  • Tuki SIMD (Single Instruction, Multiple Data) -käskyille, mikä mahdollistaa datatoimintojen rinnakkaistamisen. Alueita, joilla SIMD:n käyttö voi parantaa suorituskykyä merkittävästi, ovat koneoppiminen, videon koodaus ja dekoodaus, kuvankäsittely, fyysinen prosessisimulaatio ja grafiikan manipulointi.
  • Tuki viitetyypeille, jolloin Wasm-moduulit voivat käyttää tietoja muissa moduuleissa tai taustalla olevassa ympäristössä.
  • Suorituskykyä on optimoitu merkittävästi. LLVM-ajon nopeutta liukulukuilla on lisätty noin 50 %. Toimintokutsuja on nopeutettu merkittävästi vähentämällä tilanteita, jotka vaativat pääsyn ytimeen. Cranelift-koodigeneraattorin suorituskykyä on parannettu 40 %. Lyhennetty tietojen deserialisointiaika.
    Wasmer 2.0, työkalupakki WebAssembly-pohjaisten sovellusten rakentamiseen, on saatavilla
    Wasmer 2.0, työkalupakki WebAssembly-pohjaisten sovellusten rakentamiseen, on saatavilla
  • Moottoreiden nimet on muutettu, jotta se kuvastaisi tarkemmin olemusta: JIT → Universal, Native → Dylib (dynaaminen kirjasto), Object File → StaticLib (Staattinen kirjasto).

Lähde: opennet.ru

Lisää kommentti