Asamblare web

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 17 martie 2022; verificările necesită 5 modificări .
asamblare web
Clasa de limba orientat spre expresie
Aparut in 2015 [2]
Dezvoltator
Extensie de fișier .wastsau [3].wasm
Eliberare 2.0.0 [1]  ( 1 iunie 2022 )
Tip sistem static
A fost influențat Asm.js și Native Client
Licență Licență Apache 2.0
Site-ul web webassembly.org
 Fișiere media la Wikimedia Commons

WebAssembly (prescurtat ca wasm ) este un limbaj de programare de nivel scăzut pentru mașina virtuală stivă, conceput ca o țintă de compilare portabilă pentru limbaje de nivel înalt precum C , C++ , C# , Rust , Go . O mașină virtuală stivă care execută instrucțiuni în format binar wasm poate fi rulată atât într-un mediu de browser, cât și într-un mediu de server. Codul Wasm este un arbore de sintaxă abstractă portabil , care oferă atât o analiză mai rapidă, cât și o execuție mai eficientă în comparație cu JavaScript .

Proiectul a început pe 17 iunie 2015 [4] , pe 15 martie 2016 a fost demonstrată munca jocului Angry Bots din setul de mostre pentru Unity în browserul Chromium [5] . Inițial, proiectul s-a bazat pe asm.js [6] și PNaCl [7] . În martie 2017, comunitatea de dezvoltatori a ajuns la un acord privind un format binar, un API pentru JavaScript și un interpret de referință. La sfârșitul lunii mai 2017, echipa de proiect Chromium a anunțat planuri de a deprecia PNaCl în favoarea WebAssembly [8] .

Începând cu 2021, echipa WebAssembly include dezvoltatori de la Mozilla , Google , Microsoft și Apple , reprezentând cele mai comune patru browsere de pe piață - Firefox , Chrome , Microsoft Edge și respectiv Safari [7] .

Prezentare

Următorul tabel prezintă trei reprezentări diferite ale aceluiași cod sursă așa cum a fost tradus în wasm:

Cod sursă C "cod octet al ansamblului liniar" cod binar WASM
int factorial ( int n ) { dacă ( n == 0 ) întoarcere 1 ; altfel return n * factorial ( n -1 ); } get_local 0 i64.eqz dacă i64 i64.const 1 altfel get_local 0 get_local 0 i64.const 1 i64.sub sunați la 0 i64.mul Sfârşit 2000 cincizeci 047e 42 01 05 2000 2000 42 01 7d 1000 7e 0b

Compilatorul folosește în interior o reprezentare s-expression , care conține mai multe informații decât „bytecode de asamblare liniară”. De exemplu:

( modul ( tip $FUNCSIG$dd ( func ( param f64 ) ( rezultat f64 ))) ( import "global.Math" "exp" ( func $exp ( param f64 ) ( rezultat f64 ))) ( memorie 256 256 ) ( export "memorie" ( memorie 0 )) ( func $doubleExp ( param $0 f64 ) ( rezultat f64 ) ( f64.mul ( apel $exp ( get_local $0 ) ) ( f64.const 2 ) ) ) ( export "doubleExp" ( func $doubleExp )) )

Suport

Compilarea la WebAssembly este acceptată pentru multe limbi, implementarea se află în diferite etape [9] :

  • C și C ++  - prin setul de instrumente Emscripten și Binaryen, este furnizată compilarea la asm.js și wasm, utilizează LLVM .
  • C#  - prin Blazor și Platforma Uno - bazat pe mono .
  • Rust  - suport experimental pentru compilarea în wasm a fost suportat începând cu versiunea 1.14 [10] .
  • Elixir și Erlang  - prin compilatorul Lumen, conceput special pentru WebAssembly [11] .
  • Suportul Go  -experimental pentru compilarea în wasm a fost acceptat începând cu versiunea 1.11 [12] .
  • TypeScript  - prin AssemblyScript .
  • D  - LDC din versiunea 1.11 acceptă compilarea și legarea codului D direct în WebAssembly [13] .
  • Lazarus  - acceptă asamblarea în WebAssembly [14]

Suport browser

Implementarea WebAssembly a fost în toate browserele majore (cu excepția Internet Explorer) de la sfârșitul anului 2017 [15] :

În iulie 2021, 94% dintre browserele instalate acceptă WebAssembly [20] . Pentru browserele vechi, există un polyfill asm.js [7] .

Note

  1. 2.0.0 .
  2. http://webassembly.org/roadmap/
  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
  4. ↑ Lucrând la viitorul aplicațiilor de compilare pe web  . Blogul lui Mike Holman (17 iunie 2015). Consultat la 7 iunie 2017. Arhivat din original pe 2 iunie 2017.
  5. Wagner, Luke A WebAssembly Milestone: Experimental Support in Multiple Browsers . Mozilla Hacks (14 martie 2016). Preluat la 6 iunie 2017. Arhivat din original la 11 august 2017.
  6. WebAssembly: un format binar pentru  web . ②alitate - JavaScript și multe altele (18 iunie 2015). Consultat la 2 februarie 2016. Arhivat din original pe 5 februarie 2016.
  7. 1 2 3 Bright, Peter Web-ul primește codul de octeți: WebAssembly . Ars Technica . Conde Nast (18 iunie 2015). Consultat la 20 noiembrie 2015. Arhivat din original pe 21 noiembrie 2015.
  8. La revedere PNaCl, Bună WebAssembly!  (engleză) (30 mai 2017). Preluat la 10 iunie 2017. Arhivat din original la 30 mai 2017.
  9. Awesome WebAssembly Languages ​​. Preluat la 18 octombrie 2019. Arhivat din original la 12 noiembrie 2019.
  10. Anuntarea Rust 1.14  ( 22 decembrie 2016). Preluat la 7 iunie 2017. Arhivat din original la 5 mai 2017.
  11. O implementare alternativă BEAM, concepută pentru WebAssembly: lumen/lumen . — 06-12-2019. Arhivat din original pe 27 decembrie 2019.
  12. Note de lansare Go 1.11 - Limbajul de programare Go . tip.golang.org. Preluat la 16 iulie 2018. Arhivat din original la 14 august 2018.
  13. Generarea WebAssembly cu LDC . Consultat la 13 noiembrie 2018. Arhivat din original la 14 noiembrie 2018.
  14. WebAssembly - Wiki Pascal gratuit . wiki.freepascal.org. Preluat la 15 mai 2020. Arhivat din original la 11 octombrie 2021.
  15. ↑ Suportul WebAssembly se livrează acum în toate browserele majore  . Blogul Mozilla (13 noiembrie 2017). Preluat la 31 octombrie 2019. Arhivat din original la 31 octombrie 2019.
  16. WebAssembly - Stare platformă Chrome . Preluat la 7 iunie 2017. Arhivat din original pe 17 februarie 2017.
  17. Firefox 52: Introducing Web Assembly, CSS Grid and the Grid Inspector  ( 7 martie 2017). Preluat la 7 iunie 2017. Arhivat din original la 27 mai 2017.
  18. Noi funcții WebKit în Safari 11  ( 22 septembrie 2017). Consultat la 30 septembrie 2017. Arhivat din original la 30 septembrie 2017.
  19. Prezentarea noilor optimizări JavaScript, WebAssembly, SharedArrayBuffer și Atomics în EdgeHTML 16  ( 31 octombrie 2017). Consultat la 14 noiembrie 2017. Arhivat din original pe 15 noiembrie 2017.
  20. WebAssembly . Pot folosi . Preluat la 22 martie 2020. Arhivat din original la 13 noiembrie 2021.

Link -uri