WebAssembly

De Viquipèdia
Salta a la navegació Salta a la cerca
Infotaula de llenguatge de programacióWebAssembly
Web Assembly Logo.svg
Tipus entorn de treball per a aplicacions web, bytecode i Web API Tradueix
Data de creació 2015
Darrera versió estable 1.1 ()
Influenciat per asm.js i Google Native Client Tradueix
Extensió dels fitxers wast i wasm
Codi font Codi font i Codi font
Llicència llicència Apache
Etiqueta d'Stack Exchange Etiqueta
Pàgina web Web oficial
Modifica les dades a Wikidata

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++.[1] En anglès, "WebAssembly" vol dir "llenguatge d'assemblador web".

Disseny[modifica]

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

Història[modifica]

WebAssembly es va anunciar el 17 de juny del 2015[3] i es va presentar el 15 de març del 2016 executant el videojoc Angry Bots de Unity dins dels navegadors Firefox,[4] Chromium, Google Chrome,[5] i Microsoft Edge.[6]

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

Desenvolupament[modifica]

La implementació inicial de WebAssembly en els navegadors es va basar en les característiques presents al llenguatge asm.js.[8] Després de publicar l'MVP, el pla és afegir-hi la recollida de memòria brossa,[9][10] 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.[11]

Representació[modifica]

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.[12] 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:[13]

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[modifica]

  1. 1,0 1,1 «WebAssembly High-Level Goals». GitHub / WebAssembly / design, 11 December 2015.
  2. «Design Rationale». GitHub / WebAssembly / design, 01-10-2016.
  3. «Launch bug». GitHub / WebAssembly / design, 11-06-2015.
  4. Wagner, Luke. «A WebAssembly Milestone: Experimental Support in Multiple Browsers». Mozilla Hacks, 14-03-2016.
  5. Thompson, Seth. «Experimental support for WebAssembly in V8». V8 Blog, 15-03-2016.
  6. Zhu, Limin. «Previewing WebAssembly experiments in Microsoft Edge». Microsoft Edge dev blog, 15-03-2016.
  7. «WebAssembly». Can I use. [Consulta: 11 agost 2017].
  8. «WebAssembly: a binary format for the web». ②ality – JavaScript and more, 18-06-2015.
  9. «WebAssembly/design». GitHub. Arxivat de l'original el April 4, 2017. [Consulta: 28 December 2015].
  10. «WebAssembly/gc». Github.
  11. Bright, Peter. «The Web is getting its bytecode: WebAssembly». Ars Technica. Condé Nast, 18-06-2015.
  12. «Roadmap». WebAssembly, March 2017.
  13. «Text Format». WebAssembly/design. GitHub, 09-03-2017.

Enllaços externs[modifica]