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 .
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
- ↑ 2.0.0 . (neurčitý)
- ↑ http://webassembly.org/roadmap/
- ↑ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
- ↑ 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.
- ↑ 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. (neurčitý)
- ↑ 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.
- ↑ 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. (neurčitý)
- ↑ Sbohem PNaCl, Ahoj WebAssembly! (anglicky) (30. května 2017). Získáno 10. června 2017. Archivováno z originálu 30. května 2017.
- ↑ Skvělé jazyky WebAssembly . Získáno 18. října 2019. Archivováno z originálu 12. listopadu 2019. (neurčitý)
- ↑ Oznamujeme Rust 1.14 ( 22. prosince 2016). Získáno 7. června 2017. Archivováno z originálu 5. května 2017.
- ↑ Alternativní implementace BEAM navržená pro WebAssembly: lumen/lumen . — 2019-12-06. Archivováno z originálu 27. prosince 2019.
- ↑ 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. (neurčitý)
- ↑ Generování WebAssembly s LDC . Získáno 13. listopadu 2018. Archivováno z originálu 14. listopadu 2018. (neurčitý)
- ↑ WebAssembly – Free Pascal wiki . wiki.freepascal.org. Získáno 15. května 2020. Archivováno z originálu dne 11. října 2021. (neurčitý)
- ↑ 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.
- ↑ WebAssembly – stav platformy Chrome . Získáno 7. června 2017. Archivováno z originálu 17. února 2017. (neurčitý)
- ↑ 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.
- ↑ Nové funkce WebKit v Safari 11 ( 22. září 2017). Získáno 30. září 2017. Archivováno z originálu 30. září 2017.
- ↑ 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.
- ↑ WebAssembly . Mohu použít . Získáno 22. března 2020. Archivováno z originálu dne 13. listopadu 2021. (neurčitý)
Odkazy