Web összeállítás

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. március 17-én felülvizsgált verziótól ; az ellenőrzések 5 szerkesztést igényelnek .
web összeállítás
Nyelvóra kifejezés-orientált
Megjelent 2015 [2]
Fejlesztő
Fájlkiterjesztés _ .wastvagy [3].wasm
Kiadás 2.0.0 [1]  ( 2022. június 1. )
Típusrendszer statikus
Befolyásolt Asm.js és Native Client
Engedély Apache licenc 2.0
Weboldal webassembly.org
 Médiafájlok a Wikimedia Commons oldalon

A WebAssembly (rövidítve wasm ) egy alacsony szintű programozási nyelv a verem virtuális gépekhez, amelyet hordozható fordítási célként terveztek olyan magas szintű nyelvekhez, mint a C , C++ , C# , Rust , Go . A Wasm bináris formátumú utasításokat végrehajtó verem virtuális gép böngésző- és szerverkörnyezetben is futtatható. A Wasm kód egy hordozható absztrakt szintaktikai fa , amely a JavaScripthez képest gyorsabb elemzést és hatékonyabb végrehajtást biztosít .

A projekt 2015. június 17-én indult [4] , 2016. március 15-én mutatták be az Angry Bots játék működését a Unity mintakészletéből a Chromium böngészőben [5] . A projekt kezdetben asm.js [6] és PNaCl [7] alapú . 2017 márciusában a fejlesztői közösség megállapodásra jutott egy bináris formátumról, egy API for JavaScript-ről és egy referencia értelmezőről. 2017. május végén a Chromium projektcsapat bejelentette a PNaCl megszüntetését a WebAssembly javára [8] .

2021-től a WebAssembly csapatába a Mozilla , a Google , a Microsoft és az Apple fejlesztői tartoznak , amelyek a piac négy legelterjedtebb böngészőjét képviselik – a Firefoxot , a Chrome -ot , a Microsoft Edge - t és a Safarit [7] .

Bemutató

Az alábbi táblázat ugyanazon forráskód három különböző ábrázolását mutatja be, ahogyan azt wasm-re fordították:

C forráskód "lineáris összeállítás bájtkód" bináris kód WASM
int faktoriális ( int n ) { ha ( n == 0 ) visszatérés 1 ; más return n * faktoriális ( n -1 ); } get_local 0 i64.eqz ha i64 i64.const 1 más get_local 0 get_local 0 i64.const 1 i64.sub hívja a 0-t i64.mul vége 2000 ötven 047e 42 01 05 2000 2000 42 01 7d 1000 7e 0b

A fordító belsőleg egy s-kifejezés reprezentációt használ , amely több információt tartalmaz, mint a "lineáris összeállítás bájtkód". Például:

( module ( type $FUNCSIG$dd ( func ( param f64 ) ( eredmény f64 ))) ( import "global.Math" "exp" ( func $exp ( param f64 ) ( eredmény f64 ))) ( memória 256 256 ) ( export "memory" ( memória 0 )) ( func $doubleExp ( param $0 f64 ) ( eredmény f64 ) ( f64.mul ( call $exp ( get_local $0 ) ) ( f64.const 2 ) ) ) ( export "doubleExp" ( func $doubleExp )) )

Támogatás

A WebAssembly-be való fordítást számos nyelv támogatja, a megvalósítás különböző szakaszokban van [9] :

  • C és C ++  - az Emscripten és Binaryen eszközkészleten keresztül, az asm.js és a wasm formátumok fordítása biztosított, LLVM -et használ .
  • C#  - a Blazoron és az Uno Platformon keresztül - monó alapú .
  • Rust  – kísérleti támogatás a wasm-re fordításhoz az 1.14-es verzió óta támogatott [10] .
  • Elixir és Erlang  - a Lumen fordítón keresztül, kifejezetten a WebAssembly számára [11] .
  •  Az 1.11-es verzió óta támogatott a wasm-re való fordítás kísérleti támogatása [ 12] .
  • TypeScript  – AssemblyScripten keresztül .
  • A D  - LDC az 1.11-es verzió óta támogatja a D-kód fordítását és közvetlenül a WebAssembly-be való összekapcsolását [13] .
  • Lazarus  – támogatja az összeállítást a WebAssembly-ben [14]

Böngésző támogatás

A WebAssembly megvalósítása 2017 vége óta minden nagyobb böngészőben megtalálható (az Internet Explorer kivételével) [15] :

2021 júliusában a telepített böngészők 94%-a támogatja a WebAssembly-t [20] . A régebbi böngészőkhöz létezik egy asm.js polifill [7] .

Jegyzetek

  1. 2.0.0 .
  2. http://webassembly.org/roadmap/
  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
  4. ↑ Munka a webre fordítható alkalmazások  jövőjén . Mike Holman blogja (2015. június 17.). Letöltve: 2017. június 7. Az eredetiből archiválva : 2017. június 2.
  5. Wagner, Luke A WebAssembly mérföldköve: Kísérleti támogatás több böngészőben . Mozilla Hacks (2016. március 14.). Letöltve: 2017. június 6. Az eredetiből archiválva : 2017. augusztus 11..
  6. WebAssembly: bináris formátum az  internethez . ②ality – JavaScript és még sok más (2015. június 18.). Letöltve: 2016. február 2. Az eredetiből archiválva : 2016. február 5..
  7. 1 2 3 Bright, Peter A Web megkapja a bájtkódját: WebAssembly . Ars Technica . Conde Nast (2015. június 18.). Letöltve: 2015. november 20. Az eredetiből archiválva : 2015. november 21..
  8. Viszlát PNaCl, Hello WebAssembly!  (angol) (2017. május 30.). Letöltve: 2017. június 10. Az eredetiből archiválva : 2017. május 30.
  9. Félelmetes WebAssembly nyelvek . Letöltve: 2019. október 18. Az eredetiből archiválva : 2019. november 12.
  10. A Rust 1.14 bejelentése  ( 2016. december 22.). Letöltve: 2017. június 7. Az eredetiből archiválva : 2017. május 5..
  11. Alternatív BEAM megvalósítás, a WebAssembly számára készült: lumen/lumen . — 2019-12-06. Az eredetiből archiválva : 2019. december 27.
  12. Go 1.11 Kiadási megjegyzések – A Go programozási nyelv . tip.golang.org. Letöltve: 2018. július 16. Az eredetiből archiválva : 2018. augusztus 14.
  13. WebAssembly generálása az LDC segítségével . Letöltve: 2018. november 13. Az eredetiből archiválva : 2018. november 14.
  14. WebAssembly - Ingyenes Pascal wiki . wiki.freepascal.org. Letöltve: 2020. május 15. Az eredetiből archiválva : 2021. október 11.
  15. ↑ A WebAssembly támogatást már minden nagyobb böngészőben  szállítjuk . A Mozilla Blog (2017. november 13.). Letöltve: 2019. október 31. Az eredetiből archiválva : 2019. október 31.
  16. WebAssembly – Chrome Platform állapota . Letöltve: 2017. június 7. Az eredetiből archiválva : 2017. február 17.
  17. Firefox 52: Bemutatkozik a Web Assembly, a CSS Grid és a Grid Inspector  ( 2017. március 7.). Letöltve: 2017. június 7. Az eredetiből archiválva : 2017. május 27.
  18. Új WebKit-szolgáltatások a Safari 11  -ben ( 2017. szeptember 22.). Letöltve: 2017. szeptember 30. Az eredetiből archiválva : 2017. szeptember 30.
  19. Új JavaScript-optimalizálások, WebAssembly, SharedArrayBuffer és Atomics bemutatása az EdgeHTML 16  -ban ( 2017. október 31.). Letöltve: 2017. november 14. Az eredetiből archiválva : 2017. november 15.
  20. WebAssembly . Használhatom . Letöltve: 2020. március 22. Az eredetiből archiválva : 2021. november 13.

Linkek