WebAssembly

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání
WebAssembly
Web Assembly Logo.svg
Paradigma imperativní, strukturované, orientované na výrazy
Vznikl v březen 2017
Vývojář W3C
Typová kontrola Statický
Ovlivněn jazyky asm.js (od Mozilly)
NaCl (od Google)
OS Web
Licence Apache 2.0 License
Přípona souboru .wat, .wasm

WebAssembly (wasm, WA) je v informatice webový standard, který definuje binární formát a odpovídající pseudo-jazyk symbolických adres pro přenositelný strojový kód spustitelný na webový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 k JavaScriptu, který má zrychlit kritické části webových aplikací a později umožnit webový vývoj i v jiných programovacích jazycích, než je JavaScript.[1][2][3] Je vyvíjen pod zastřešením W3C inženýry z firem Mozilla, Microsoft, Google a Apple.[4]

Po formální verifikaci je spouštěn v sandboxu ve webovém prohlížeči. Programy mohou být kompilovány do wasm modulů z vyšších programovacích jazyků a zaváděny jako knihovny z JavaScriptových appletů.

Design[editovat | editovat zdroj]

WebAssembly je abstraktní portabilní strukturovaný kód určený pro běh na zásobníkovém počítači,[5] a je navržen tak, aby byl parsován i prováděn rychleji než JavaScript[6] a aby výsledný kód byl velmi kompaktní.

Historie[editovat | editovat zdroj]

Inspirací pro WebAssembly jsou Google Native Client (NaCl) a asm.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 hra Angry Bots založená na herním engine Unity v prohlížečích Firefox,[10] Chromium, Google Chrome,[11] a Microsoft 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]

Podpora[editovat | editovat zdroj]

Mozilla deklarovala podporu „ve všech hlavních prohlížečích“,[19] implicitně je podpora povolena v Microsoft Edge verze 16.[20] Pro zpě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).[21]

Emscripten může zkompilovat do wasm[13] v backendu pomocí LLVM.

Prvotní záměr je podpora kompilace z jazyků C a C++,[6] ačkoliv je vyvíjena podpora i pro další jazyky, jako například Rust.[22] Po dosažení hranice minimálně životaschopného produktu je v plánu vytvoření podpory pro Garbage collection,[23] což umožní pro WebAssembly podporu jazyků, které garbage collecting používají (Java, C#).

Reprezentace[editovat | editovat zdroj]

V březnu 2017 byl dosažen konsenzus pro počáteční formu binárního formátu, JavaScript API a referenční interpret.[24] 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ý zobrazený vlevo a vpravo od něj je převeden do mezijazyka wasm a pak do binárního formátu wasm:[25]

zdrojový kód v C lineární assembly bytecode
(mezijazyk)
WASM binary kód
(hexadecimálně)
int factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n-1);
}
get_local 0
i64.eqz
if (result i64)
    i64.const 1
else
    get_local 0
    get_local 0
    i64.const 1
    i64.sub
    call 0
    i64.mul
end
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B

Textový formát WebAssembly může být zapsán ve složeném formátu s-výrazů. Tento formát je čistě syntaktický cukr a není od lineárního formátu nijak významově odlišný:[26]

(module
  (import "math" "exp" (func $exp (param f64) (result f64)))
  (func (export "doubleExp") (param $0 f64) (result f64)
    (f64.mul
      (call $exp
        (get_local $0))
      (f64.const 2))))

Literatura[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. a b Lardinois, Frederic(2015-06-17)."Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web"(in en).TechCrunch. Archived from the original. Šablona:Citation error. https://techcrunch.com/2015/06/17/google-microsoft-mozilla-and-others-team-up-to-launch-webassembly-a-new-binary-format-for-the-web/. 
  2. Cimpanu, Catalin(2015-06-18)."Mozilla, Microsoft, Google, and Apple Join Efforts to Create a Binary File Format for the Web"(in en-us).softpedia. Archived from the original. Šablona:Citation error. http://news.softpedia.com/news/Mozilla-Microsoft-Google-and-Apple-Join-Efforts-to-Create-a-Binary-File-Format-for-the-Web-484648.shtml. 
  3. Hoffmann, Moritz(2015-06-23)."Turbo-Boost für JavaScript: Eric Elliott über WebAssembly"(in de-DE).JAXenter. Archived from the original. Šablona:Citation error. https://jaxenter.de/turbo-boost-fuer-javascript-eric-elliott-ueber-webassembly-21720. 
  4. BRIGHT, Peter. The Web is getting its bytecode: WebAssembly [online]. Condé Nast, 18 June 2015. Dostupné online. (anglicky) 
  5. Design Rationale [online]. 1 October 2016. Dostupné online. (anglicky) 
  6. a b WebAssembly High-Level Goals [online]. 11 December 2015. Dostupné online. (anglicky) 
  7. AVRAM, Abel. Google Is to Remove Support for PNaCl [online]. 2017-05-31 [cit. 2017-12-22]. Dostupné online. (anglicky) 
  8. WebAssembly: a binary format for the web [online]. 18 June 2015. Dostupné online. (anglicky) 
  9. Launch bug [online]. 11 June 2015. Dostupné online. (anglicky) 
  10. WAGNER, Luke. A WebAssembly Milestone: Experimental Support in Multiple Browsers [online]. 14 March 2016. Dostupné online. (anglicky) 
  11. THOMPSON, Seth. Experimental support for WebAssembly in V8 [online]. 15 March 2016. Dostupné online. (anglicky) 
  12. ZHU, Limin. Previewing WebAssembly experiments in Microsoft Edge [online]. 15 March 2016. Dostupné online. (anglicky) 
  13. a b Krill, Paul(2017-03-06)."WebAssembly is now ready for browsers to use"(in en).InfoWorld. Archived from the original. Šablona:Citation error. https://www.infoworld.com/article/3176681/. 
  14. WebAssembly [online]. [cit. 2018-03-07]. Dostupné online. (anglicky) 
  15. WebAssembly First Public Working Drafts [online]. W3C, February 15, 2018 [cit. 2018-04-20]. Dostupné online. (anglicky) 
  16. WebAssembly Core Specification [online]. W3C, February 15, 2018 [cit. 2018-04-20]. Dostupné online. (anglicky) 
  17. WebAssembly JavaScript Interface [online]. W3C, February 15, 2018 [cit. 2018-04-20]. Dostupné online. (anglicky) 
  18. WebAssembly Web API [online]. W3C, February 15, 2018 [cit. 2018-04-20]. Dostupné online. (anglicky) 
  19. WebAssembly support now shipping in all major browsers [online]. [cit. 2017-11-21]. Dostupné online. (anglicky) 
  20. Introducing new JavaScript optimizations, WebAssembly, SharedArrayBuffer, and Atomics in EdgeHTML 16 [online]. [cit. 2017-11-21]. Dostupné online. (anglicky) 
  21. Bright, Peter(2015-06-18)."The Web is getting its bytecode: WebAssembly"(in en-us).Ars Technica. Archived from the original. Šablona:Citation error. https://arstechnica.com/information-technology/2015/06/the-web-is-getting-its-bytecode-webassembly/. 
  22. Krill, Paul(2017-11-29)."Direct WebAssembly compilation comes to Rust language"(in en).InfoWorld. Archived from the original. Šablona:Citation error. https://www.infoworld.com/article/3239129/. 
  23. Krill, Paul(2017-10-26)."What's next for WebAssembly: GC, threads, debugging".TechWorld. Archived from the original. Šablona:Citation error. https://www.techworld.com.au/article/629123/. 
  24. Roadmap [online]. March 2017. Dostupné online. (anglicky) 
  25. Text Format [online]. GitHub, 9 March 2017. Dostupné online. (anglicky) 
  26. Folded instructions [online]. Dostupné online. (anglicky)  / WebAssembly / spec

Související stránky[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]