WebAssembly (o Wasm) és un format de codi de bytes (un llenguatge de programació de baix nivell) per estendre les pàgines web amb programes que s'executen en els navegadors. Malgrat haver sorgit com una evolució de JavaScript, el seu objectiu és servir de llenguatge resultant de la compilació de molts llenguatges d'alt nivell, començant per C i C++. En anglès, "WebAssembly" vol dir "llenguatge d'assemblador web".

Disseny WebAssembly és una màquina de pila que executa codi que és portable i alhora més ràpid d'analitzar i d'executar que JavaScript.

Història WebAssembly es va anunciar el 17 de juny del 2015 i es va presentar el 15 de març del 2016 executant el videojoc Angry Bots de Unity dins dels navegadors Firefox, Chromium, Google Chrome, i Microsoft Edge.

Segons el lloc web Can I use, la majoria dels navegadors en ús ja són compatibles amb WebAssembly.

Desenvolupament La implementació inicial de WebAssembly en els navegadors es va basar en les característiques presents al llenguatge asm.js. Després de publicar l'MVP, el pla és afegir-hi la recollida de memòria brossa, cosa que permetria compilar a WebAssembly els llenguatges que la necessiten, com ara Java i C#. A l'equip que treballa en WebAssembly hi ha gent de Mozilla, Microsoft, Google i Apple.

Representació El març del 2017, el grup comunitari de WebAssembly al W3C va acabar de consensuar-ne el format binari inicial (MVP), l'API de JavaScript i l'intèrpret de referència. A més del format binari de WebAssembly, que no està dissenyat perquè l'utilitzin els humans, també s'hi defineix un format textual similar als llenguatges d'assemblador que els humans poden llegir més fàcilment.

La taula següent conté un exemple dels diferents formats: a l'esquerra hi ha el codi font original escrit en el llenguatge C, al centre el mateix programa en el format WebAssembly textual resultant de la compilació i a la dreta en format WebAssembly binari hexadecimal:

C Wasm textual Wasm binari int factorial(int n) { if (n == 0) return 1; else return n * factorial(n-1); } get_local 0 i64.eqz if 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

Referències

Enllaços externs

Grup comunitari de WebAssembly al W3C Disseny de WebAssembly

Categoria:Llenguatges de programació Categoria:World Wide Web