WebAssembly
WebAssembly limbaj de programare | |
---|---|
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
- Wikimedia Commons conține imagini sau alte fișiere pe WebAssembly
linkuri externe
- ( RO ) Site oficial , pe webassembly.org .
- Depozit sursă WebAssembly , la github.com .
- Depozit sursă WebAssembly , la github.com .
- W3C Community Group , la w3.org .
- GOTO 2017 • WebAssembly: Ce și ce urmează? • Ben Titzer și Andreas Rossberg - YouTube , pe youtube.com .
- WebAssembly | MDN , la developer.mozilla.org . - cu informații despre compatibilitate și specificațiile browserului (API WebAssembly JavaScript)