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 .
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
- ↑ 2.0.0 . (nedefinit)
- ↑ http://webassembly.org/roadmap/
- ↑ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
- ↑ 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.
- ↑ 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. (nedefinit)
- ↑ 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.
- ↑ 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. (nedefinit)
- ↑ La revedere PNaCl, Bună WebAssembly! (engleză) (30 mai 2017). Preluat la 10 iunie 2017. Arhivat din original la 30 mai 2017.
- ↑ Awesome WebAssembly Languages . Preluat la 18 octombrie 2019. Arhivat din original la 12 noiembrie 2019. (nedefinit)
- ↑ Anuntarea Rust 1.14 ( 22 decembrie 2016). Preluat la 7 iunie 2017. Arhivat din original la 5 mai 2017.
- ↑ O implementare alternativă BEAM, concepută pentru WebAssembly: lumen/lumen . — 06-12-2019. Arhivat din original pe 27 decembrie 2019.
- ↑ 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. (nedefinit)
- ↑ Generarea WebAssembly cu LDC . Consultat la 13 noiembrie 2018. Arhivat din original la 14 noiembrie 2018. (nedefinit)
- ↑ WebAssembly - Wiki Pascal gratuit . wiki.freepascal.org. Preluat la 15 mai 2020. Arhivat din original la 11 octombrie 2021. (nedefinit)
- ↑ 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.
- ↑ WebAssembly - Stare platformă Chrome . Preluat la 7 iunie 2017. Arhivat din original pe 17 februarie 2017. (nedefinit)
- ↑ 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.
- ↑ Noi funcții WebKit în Safari 11 ( 22 septembrie 2017). Consultat la 30 septembrie 2017. Arhivat din original la 30 septembrie 2017.
- ↑ 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.
- ↑ WebAssembly . Pot folosi . Preluat la 22 martie 2020. Arhivat din original la 13 noiembrie 2021. (nedefinit)
Link -uri