WebAssembly

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
WebAssembly
limbaj de programare
WebAssembly Logo.svg
Data de origine 2015
Ultima versiune 1.1 (9 decembrie 2019)
Utilizare dezvoltare web
Paradigme programare imperativă , programare structurată și programare orientată spre stivă
Extensii comune wast și wasm
Influențată de asm.js și Google Native Client
Implementare referință
Licență Licență Apache
Site-ul web webassembly.org/

WebAssembly ( Wasm , WA ) este un standard web care definește un format binar și un format text corespunzător pentru scrierea codului executabil în paginile web. Acesta își propune să permită executarea codului la aproape aceeași viteză pe care o execută codul mașinii native. A fost conceput ca o integrare JavaScript pentru a accelera performanța părților critice ale aplicațiilor web și ulterior pentru a permite dezvoltarea web în alte limbi în afară de JavaScript. Este dezvoltat de World Wide Web Consortium (W3C) cu ingineri din Mozilla , Microsoft , Google și Apple .

Acesta rulează într-un sandbox din browserul web după o fază formală de verificare. Programele pot fi compilate din limbaje de nivel înalt în module Wasm și încărcate ca biblioteci din applet-uri JavaScript.

Proiecta

Codul WebAssembly este conceput pentru a rula pe un computer portabil structurat, abstract, conceput pentru a fi mai rapid de analizat decât JavaScript și mai rapid de executat și pentru a permite o reprezentare foarte compactă a codului.

Istorie

Tehnologiile precursor specifice furnizorului au fost Google Native Client (NaCl) și asm.js. Implementarea inițială a suportului WebAssembly în browsere sa bazat pe setul de caracteristici asm.js. A fost anunțat pentru prima dată pe 17 iunie 2015, iar pe 15 martie 2016, Unity ’s Angry Bots a fost demonstrat că rulează în Firefox , Chromium , Google Chrome și Microsoft Edge . În martie 2017, proiectarea produsului minim viabil a fost declarată finalizată și faza de previzualizare încheiată. La sfârșitul lunii septembrie 2017, asistența a fost lansată în Safari 11 . Începând din martie 2019, site-ul Pot să folosesc note că 81,41% din browsere acceptă la nivel global WebAssembly (și indirect, prin polyfill , sunt acceptate alte browsere). [1] În februarie 2018, Grupul de lucru WebAssembly a publicat trei proiecte de lucru pentru Specificațiile de bază, interfața JavaScript și API-ul web .

A sustine

Mozilla a declarat suport „în toate browserele majore”, de exemplu, a fost activat și în mod implicit în Edge 16. Pentru compatibilitate inversă, Wasm poate fi compilat în asm.js printr-un applet JavaScript (așa-numitul polyfill ) și poate rula pe browsere incompatibile în Pe aici.

Emscripten poate compila în Wasm folosind LLVM în backend.

Obiectivul său inițial este de a sprijini compilarea din C și C ++ , cu toate acestea, suportul pentru alte limbi, cum ar fi Rust , apare și el. După lansarea produsului minim viabil (MVP), există suport pentru colectarea gunoiului care ar face WebAssembly o țintă de construcție pentru limbaje de programare precum Java și C # .

Reprezentare

În martie 2017, WebAssembly Community Group a ajuns la un consens cu privire la formatul binar inițial (MVP), API-ul JavaScript și interpretul de referință. Acesta definește un format binar de WebAssembly, care nu este conceput pentru a fi utilizat de oameni, precum și un format de bytecod liniar care poate fi citit de om, care seamănă cu limbajele de asamblare tradiționale.

Următorul tabel reprezintă trei vizualizări diferite ale aceluiași cod sursă introdus (stânga), convertit într-o reprezentare intermediară Wasm (centru) și, în cele din urmă, în format binar Wasm:

Cod sursă în limbajul C. Bytecode de asamblare liniară
( Reprezentare intermediară )
Codificare binară Wasm (octeți hexazecimali)
 int factorial ( int n ) {
  if ( n == 0 )
    retur 1 ;
  altceva
    returnează n * factorial ( n -1 );
}
 get_local 0
i64.eqz
if (rezultat i64)
    i64.const 1
altceva
    get_local 0
    get_local 0
    i64.const 1
    i64.sub
    sunați la 0
    i64.mul
Sfârșit
 20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B

Formatul de text WebAssembly poate fi scris și într-un format compact folosind expresii s . Acest format este pur un zahăr sintactic și nu are diferențe de comportament cu formatul liniar. Un exemplu este prezentat mai jos:

 ( modul
  ( import "math" "exp" ( func $ exp ( param f64 ) ( rezultat f64 )))
  ( func ( export "doubleExp" ) ( param $ 0 f64 ) ( rezultat f64 )
    ( f64.mul
      ( apelați $ exp
        ( get_local $ 0 ))
      ( f64.const 2 ))))

Notă

Alte proiecte

linkuri externe