Montáž webu

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 17. března 2022; kontroly vyžadují 5 úprav .
montáž webu
Jazyková třída orientovaný na výraz
Objevil se v 2015 [2]
Vývojář
Přípona souboru .wastnebo [3].wasm
Uvolnění 2.0.0 [1]  ( 1. června 2022 )
Typový systém statický
Byl ovlivněn Asm.js a Native Client
Licence Licence Apache 2.0
webová stránka webassembly.org
 Mediální soubory na Wikimedia Commons

WebAssembly (zkráceně wasm ) je nízkoúrovňový programovací jazyk pro virtuální stroj se zásobníkem, navržený jako přenosný cíl kompilace pro jazyky vysoké úrovně, jako jsou C , C++ , C# , Rust , Go . Zásobníkový virtuální stroj provádějící instrukce v binárním formátu wasm lze spouštět jak v prostředí prohlížeče, tak v prostředí serveru. Wasm kód je přenosný abstraktní syntaktický strom , který poskytuje rychlejší analýzu a efektivnější provádění ve srovnání s JavaScriptem .

Projekt odstartoval 17. června 2015 [4] , 15. března 2016 byla předvedena práce hry Angry Bots ze sady ukázek pro Unity v prohlížeči Chromium [5] . Zpočátku byl projekt založen na asm.js [6] a PNaCl [7] . V březnu 2017 se vývojářská komunita dohodla na binárním formátu, API pro JavaScript a referenčním interpretu. Na konci května 2017 projektový tým Chromium oznámil plány na ukončení podpory PNaCl ve prospěch WebAssembly [8] .

Od roku 2021 tým WebAssembly zahrnuje vývojáře z Mozilly , Google , Microsoftu a Apple , kteří zastupují čtyři nejběžnější prohlížeče na trhu – Firefox , Chrome , Microsoft Edge a Safari [7 ] .

Prezentace

Následující tabulka ukazuje tři různé reprezentace stejného zdrojového kódu, jak byl přeložen do wasm:

C zdrojový kód "bajtkód lineární sestavy" binární kód WASM
int faktoriál ( int n ) { if ( n == 0 ) návrat 1 ; jiný návrat n * faktoriál ( n -1 ); } get_local 0 i64.eqz pokud i64 i64.const 1 jiný get_local 0 get_local 0 i64.const 1 i64.sub zavolat 0 i64.mul konec 2000 padesáti 047e 42 01 05 2000 2000 42 01 7d 1000 7e 0b

Kompilátor interně používá reprezentaci s-výrazu , která obsahuje více informací než "bajtový kód lineární sestavy". Například:

( modul ( typ $FUNCSIG$dd ( func ( param f64 ) ( výsledek f64 ))) ( import "global.Math" "exp" ( func $exp ( param f64 ) ( výsledek f64 ))) ( paměť 256 256 ) ( export "memory" ( memory 0 )) ( func $doubleExp ( param $0 f64 ) ( result f64 ) ( f64.mul ( call $exp ( get_local $0 ) ) ( f64.const 2 ) ) ) ( export "doubleExp" ( func $doubleExp )) )

Podpora

Kompilace do WebAssembly je podporována pro mnoho jazyků, implementace je v různých fázích [9] :

  • C a C++  - prostřednictvím sady nástrojů Emscripten a Binaryen je zajištěna kompilace do asm.js a wasm, používá LLVM .
  • C#  - via Blazor a Uno Platform - založené na mono .
  • Rust  - experimentální podpora pro kompilaci do wasm je podporována od verze 1.14 [10] .
  • Elixir a Erlang  - přes kompilátor Lumen, navržený speciálně pro WebAssembly [11] .
  • Go  -experimentální podpora pro kompilaci do wasm je podporována od verze 1.11 [12] .
  • TypeScript  - přes AssemblyScript .
  • D  - LDC od verze 1.11 podporuje kompilaci a propojení D kódu přímo do WebAssembly [13] .
  • Lazarus  - podporuje sestavení ve WebAssembly [14]

Podpora prohlížeče

Implementace WebAssembly je od konce roku 2017 ve všech hlavních prohlížečích (kromě Internet Exploreru) [15] :

Od července 2021 podporuje WebAssembly 94 % nainstalovaných prohlížečů [20] . Pro starší prohlížeče existuje polyfill asm.js [7] .

Poznámky

  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. ↑ Práce na budoucnosti aplikací pro kompilaci do webu  . Blog Mika Holmana (17. června 2015). Získáno 7. června 2017. Archivováno z originálu 2. června 2017.
  5. Wagner, Luke A WebAssembly Milestone: Experimentální podpora ve více prohlížečích . Mozilla Hacks (14. března 2016). Získáno 6. června 2017. Archivováno z originálu 11. srpna 2017.
  6. WebAssembly: binární formát pro  web . ②ality - JavaScript a další (18. června 2015). Získáno 2. února 2016. Archivováno z originálu 5. února 2016.
  7. 1 2 3 Bright, Peter Web získává svůj bytecode: WebAssembly . Ars Technica . Conde Nast (18. června 2015). Získáno 20. listopadu 2015. Archivováno z originálu 21. listopadu 2015.
  8. Sbohem PNaCl, Ahoj WebAssembly!  (anglicky) (30. května 2017). Získáno 10. června 2017. Archivováno z originálu 30. května 2017.
  9. Skvělé jazyky WebAssembly . Získáno 18. října 2019. Archivováno z originálu 12. listopadu 2019.
  10. Oznamujeme Rust 1.14  ( 22. prosince 2016). Získáno 7. června 2017. Archivováno z originálu 5. května 2017.
  11. Alternativní implementace BEAM navržená pro WebAssembly: lumen/lumen . — 2019-12-06. Archivováno z originálu 27. prosince 2019.
  12. Go 1.11 Release Notes - The Go Programming Language . tip.golang.org. Získáno 16. 7. 2018. Archivováno z originálu 14. 8. 2018.
  13. Generování WebAssembly s LDC . Získáno 13. listopadu 2018. Archivováno z originálu 14. listopadu 2018.
  14. WebAssembly – Free Pascal wiki . wiki.freepascal.org. Získáno 15. května 2020. Archivováno z originálu dne 11. října 2021.
  15. ↑ Podpora WebAssembly se nyní dodává ve všech hlavních prohlížečích  . Blog Mozilly (13. listopadu 2017). Získáno 31. října 2019. Archivováno z originálu 31. října 2019.
  16. WebAssembly – stav platformy Chrome . Získáno 7. června 2017. Archivováno z originálu 17. února 2017.
  17. Firefox 52: Představujeme Web Assembly, CSS Grid a Grid Inspector  ( 7. března 2017). Získáno 7. června 2017. Archivováno z originálu 27. května 2017.
  18. Nové funkce WebKit v Safari 11  ( 22. září 2017). Získáno 30. září 2017. Archivováno z originálu 30. září 2017.
  19. Představujeme nové optimalizace JavaScriptu, WebAssembly, SharedArrayBuffer a Atomics v EdgeHTML 16  ( 31. října 2017). Získáno 14. listopadu 2017. Archivováno z originálu 15. listopadu 2017.
  20. WebAssembly . Mohu použít . Získáno 22. března 2020. Archivováno z originálu dne 13. listopadu 2021.

Odkazy