WebAssembly

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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. Je vyvíjen pod zastřešením W3C inženýry z firem Mozilla, Microsoft, Google a Apple.

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

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

Historie

Inspirací pro WebAssembly jsou Google Native Client (NaCl) a asm. +morejs. První implementace v prohlížeči byla založena na schopnostech asm. js. poprvé byl uveden 17. června 2015 a 15. března 2016 byla demonstrována hra Angry Bots založená na herním engine Unity v prohlížečích Firefox, Chromium, Google Chrome, a Microsoft Edge. 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. 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). V únoru 2018 zveřejnila pracovní skupina WebAssembly Working Group tři návrhy standardů pro Core Specification, Javascript Interface a Web API.

Podpora

Mozilla deklarovala podporu „ve všech hlavních prohlížečích“, implicitně je podpora povolena v Microsoft Edge verze 16. Pro zpětnou kompatibilitu může být wasm zkompilován do asm. +morejs pomocí JavaScript appletu (ve webových prohlížečích označována jako tzv. polyfill).

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

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

Reprezentace

V březnu 2017 byl dosažen konsenzus pro počáteční formu binárního formátu, JavaScript API a referenční interpret. 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 do mezijazyka wasm a pak do binárního formátu wasm:

zdrojový kód v Clineá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. +moreconst 1 else get_local 0 get_local 0 i64. const 1 i64. sub call 0 i64. mul end20 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ý:

(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))))

Reference

Literatura

Související články

XAML Browser Applications (XBAP)

Externí odkazy

[url=https://webassembly. org/]Oficiální webové stránky[/url] * [url=https://www. +morew3. org/community/webassembly/]W3C Community Group[/url] * [url=https://github. com/WebAssembly/design]WebAssembly Design[/url] * - with info on browser compatibility and specifications (WebAssembly JavaScript API) * [url=https://www. youtube. com/watch. v=R9wn99Xheq4]WebAssembly: What and What Next. (youtube)[/url].

Kategorie:Jazyk symbolických adres Kategorie:World Wide Web Kategorie:Internetové standardy

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top