| Paradigma | imperativní,strukturované,orientované na výrazy |
|---|---|
| Vznik | březen 2017 |
| Vývojář | W3C |
| Typová kontrola | Statický |
| Ovlivněn jazyky | asm.js (odMozilly) NaCl (odGoogle) |
| OS | Web |
| Licence | Apache 2.0 License |
| Přípona souboru | .wat, .wasm |
WebAssembly (wasm,WA) je vinformaticewebový standard, který definuje binární formát a odpovídající pseudo-jazyk symbolických adres pro přenositelnýstrojový kód spustitelný nawebových stránkách. Umožňuje provádět kód téměř tak rychle, jako nativnístrojový kód. Představuje tak doplněk kJavaScriptu, který má zrychlit kritické částiwebových aplikací a později umožnit webový vývoj i v jinýchprogramovacích jazycích, než je JavaScript.[1][2][3] Je vyvíjen pod zastřešenímW3C inženýry z firemMozilla,Microsoft,Google aApple.[4]
Po formální verifikaci je spouštěn vsandboxu vewebovém prohlížeči. Programy mohou býtkompilovány do wasm modulů zvyšších programovacích jazyků a zaváděny jakoknihovny z JavaScriptových appletů.
WebAssembly je abstraktníportabilní strukturovaný kód určený pro běh nazásobníkovém počítači,[5] a je navržen tak, aby bylparsován i prováděn rychleji než JavaScript[6] a aby výsledný kód byl velmi kompaktní.
Inspirací pro WebAssembly jsouGoogle Native Client (NaCl) aasm.js.[1][7] První implementace v prohlížeči byla založena na schopnostech asm.js.[8] poprvé byl uveden 17. června 2015[9] a 15. března 2016 byla demonstrována hraAngry Bots založená na herním engineUnity v prohlížečíchFirefox,[10]Chromium,Google Chrome,[11] aMicrosoft Edge.[12] V březnu 2017 bylo deklarováno, že vývoj dosáhl hranice minimálně životaschopného produktu a uváděcí fáze byla dokončena.[13] ProhlížečSafari dostal podporu ve verze 11 (konec roku 2017). V březnu 2018 byla deklarována podpora pro 72,75% globáně používaných prohlížečů (zbytek může mít podporu přes polyfill).[14] V únoru 2018 zveřejnila pracovní skupina WebAssembly Working Group tři návrhy standardů pro Core Specification, Javascript Interface a Web API.[15][16][17][18]
Dne16. října2024 přišlaMozilla s významným zrychlením spouštění WebAssembly, které dosahuje až 75 násobek dřívější rychlosti spouštění před optimalizací. Mozilla zaroveň uvádí, že pracuje na dalším zrychlení spouštění.[19][20]
Mozilla deklarovala podporu „ve všech hlavních prohlížečích“,[21] implicitně je podpora povolena vMicrosoft Edge verze 16.[22] Prozpětnou kompatibilitu může být wasm zkompilován do asm.js pomocí JavaScript appletu (ve webových prohlížečích označována jako tzv.polyfill).[23]
Emscripten může zkompilovat do wasm[13] v backendu pomocíLLVM.
Prvotní záměr je podporakompilace z jazykůC aC++,[6] ačkoliv je vyvíjena podpora i pro další jazyky, jako napříkladRust.[24] Po dosažení hranice minimálně životaschopného produktu je v plánu vytvoření podpory proGarbage collection,[25] což umožní pro WebAssembly podporu jazyků, které garbage collecting používají (Java,C#).
V březnu 2017 byl dosažen konsenzus pro počáteční formu binárního formátu, JavaScript API a referenční interpret.[26] Definuje binární formát, který není určen k tomu, aby byl lidmi používán podobně jako klasickýlineární kód jazyka symbolických adres, který je všeobecně znám.
Následující tabulka ukazuje tři různé pohledy na stejnýzdrojový kód zobrazený vlevo a vpravo od něj je převeden domezijazyka wasm a pak do binárního formátu wasm:[27]
| zdrojový kód vC | lineární assembly bytecode (mezijazyk) | WASM binary kód (hexadecimálně) |
|---|---|---|
intfactorial(intn){if(n==0)return1;elsereturnn*factorial(n-1);} | get_local 0i64.eqzif (result i64) i64.const 1else get_local 0 get_local 0 i64.const 1 i64.sub call 0 i64.mulend | 20 005004 7E42 010520 0020 0042 017D10 007E0B |
Textový formát WebAssembly může být zapsán ve složeném formátus-výrazů. Tento formát je čistěsyntaktický cukr a není od lineárního formátu nijak významově odlišný:[28]
(module(import"math""exp"(func$exp(paramf64)(resultf64)))(func(export"doubleExp")(param$0f64)(resultf64)(f64.mul(call$exp(get_local$0))(f64.const2))))
{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite news}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“. / WebAssembly / spec{{Cite journal}} označená jako k „pouze dočasnému použití“.{{Cite journal}} označená jako k „pouze dočasnému použití“.{{Cite web}} označená jako k „pouze dočasnému použití“. – with info on browser compatibility and specifications (WebAssembly JavaScript API)