Web montage
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 17. marts 2022; checks kræver
5 redigeringer .
WebAssembly (forkortet wasm ) er et programmeringssprog på lavt niveau til den virtuelle stabelmaskine, designet som et bærbart kompileringsmål for sprog på højt niveau som C , C++ , C# , Rust , Go . En virtuel stakmaskine, der udfører instruktioner i det binære wasm-format, kan køres både i et browsermiljø og i et servermiljø. Wasm-kode er et bærbart abstrakt syntakstræ , som giver både hurtigere parsing og mere effektiv udførelse sammenlignet med JavaScript .
Projektet startede den 17. juni 2015 [4] , den 15. marts 2016 blev arbejdet med Angry Bots-spillet fra sættet af samples til Unity i Chromium - browseren demonstreret [5] . I første omgang var projektet baseret på asm.js [6] og PNaCl [7] . I marts 2017 nåede udviklerfællesskabet til enighed om et binært format, en API til JavaScript og en referencefortolker. I slutningen af maj 2017 annoncerede Chromium-projektteamet planer om at afskrive PNaCl til fordel for WebAssembly [8] .
Fra 2021 omfatter WebAssembly-teamet udviklere fra Mozilla , Google , Microsoft og Apple , der repræsenterer de fire mest almindelige browsere på markedet - henholdsvis Firefox , Chrome , Microsoft Edge og Safari [7] .
Præsentation
Følgende tabel viser tre forskellige repræsentationer af den samme kildekode, som den blev oversat til wasm:
C kildekode
|
"lineær samling bytekode"
|
binær kode WASM
|
int factorial ( int n ) {
hvis ( n == 0 )
retur 1 ;
andet
returnere n * faktoriel ( n -1 );
}
|
get_local 0
i64.eqz
hvis i64
i64.const 1
andet
get_local 0
get_local 0
i64.const 1
i64.sub
ring 0
i64.mul
ende
|
2000
halvtreds
047e
42 01
05
2000
2000
42 01
7d
1000
7e
0b
|
Compileren bruger internt en s-ekspressionsrepræsentation , som indeholder mere information end "lineær assembly-bytekode". For eksempel:
( modul
( type $FUNCSIG$dd ( func ( param f64 ) ( resultat f64 )))
( import "global.Math" "exp" ( func $exp ( param f64 ) ( resultat f64 )))
( hukommelse 256 256 )
( eksport "memory" ( memory 0 ))
( func $doubleExp ( param $0 f64 ) ( resultat f64 )
( f64.mul
( call $exp
( get_local $0 )
)
( f64.const 2 )
)
(
eksport "doubleExp " ( func $doubleExp )) )
Support
Kompilering til WebAssembly er understøttet for mange sprog, implementering er på forskellige stadier [9] :
- C og C ++ - gennem Emscripten og Binaryen værktøjssættet, kompilering til asm.js og wasm leveres, bruger LLVM .
- C# - via Blazor og Uno Platform - baseret på mono .
- Rust -eksperimentel støtte til kompilering til wasm er blevet understøttet siden version 1.14 [10] .
- Elixir og Erlang - gennem Lumen-kompileren, designet specielt til WebAssembly [11] .
- Go -eksperimentel support til kompilering til wasm er blevet understøttet siden version 1.11 [12] .
- TypeScript - via AssemblyScript .
- D - LDC siden version 1.11 understøtter kompilering og sammenkædning af D-kode direkte til WebAssembly [13] .
- Lazarus - understøtter samling i WebAssembly [14]
Browser support
WebAssembly-implementering har været i alle større browsere (undtagen Internet Explorer) siden slutningen af 2017 [15] :
Fra juli 2021 understøtter 94 % af de installerede browsere WebAssembly [20] . For ældre browsere er der en asm.js polyfill [ 7] .
Noter
- ↑ 2.0.0 . (ubestemt)
- ↑ http://webassembly.org/roadmap/
- ↑ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
- ↑ Arbejder på fremtiden for kompilering-til-web-applikationer . Mike Holmans blog (17. juni 2015). Hentet 7. juni 2017. Arkiveret fra originalen 2. juni 2017.
- ↑ Wagner, Luke A WebAssembly Milepæl: Eksperimentel støtte i flere browsere . Mozilla Hacks (14. marts 2016). Hentet 6. juni 2017. Arkiveret fra originalen 11. august 2017. (ubestemt)
- ↑ WebAssembly: et binært format til nettet . ②ality - JavaScript og mere (18. juni 2015). Hentet 2. februar 2016. Arkiveret fra originalen 5. februar 2016.
- ↑ 1 2 3 Bright, Peter Internettet får sin bytekode: WebAssembly . Ars Technica . Conde Nast (18. juni 2015). Hentet 20. november 2015. Arkiveret fra originalen 21. november 2015. (ubestemt)
- ↑ Farvel PNaCl, Hej WebAssembly! (engelsk) (30. maj 2017). Hentet 10. juni 2017. Arkiveret fra originalen 30. maj 2017.
- ↑ Fantastiske WebAssembly-sprog . Hentet 18. oktober 2019. Arkiveret fra originalen 12. november 2019. (ubestemt)
- ↑ Annoncering af Rust 1.14 ( 22. december 2016). Hentet 7. juni 2017. Arkiveret fra originalen 5. maj 2017.
- ↑ En alternativ BEAM-implementering, designet til WebAssembly: lumen/lumen . - 2019-12-06. Arkiveret fra originalen den 27. december 2019.
- ↑ Go 1.11 Release Notes - Go-programmeringssproget . tip.golang.org. Hentet 16. juli 2018. Arkiveret fra originalen 14. august 2018. (ubestemt)
- ↑ Generering af WebAssembly med LDC . Hentet 13. november 2018. Arkiveret fra originalen 14. november 2018. (ubestemt)
- ↑ WebAssembly - Gratis Pascal-wiki . wiki.freepascal.org. Hentet 15. maj 2020. Arkiveret fra originalen 11. oktober 2021. (ubestemt)
- ↑ WebAssembly-understøttelse leveres nu i alle større browsere . Mozilla-bloggen (13. november 2017). Hentet 31. oktober 2019. Arkiveret fra originalen 31. oktober 2019.
- ↑ WebAssembly - Chrome Platform Status . Hentet 7. juni 2017. Arkiveret fra originalen 17. februar 2017. (ubestemt)
- ↑ Firefox 52: Introducing Web Assembly, CSS Grid and the Grid Inspector ( 7. marts 2017). Hentet 7. juni 2017. Arkiveret fra originalen 27. maj 2017.
- ↑ Nye WebKit-funktioner i Safari 11 ( 22. september 2017). Hentet 30. september 2017. Arkiveret fra originalen 30. september 2017.
- ↑ Introduktion af nye JavaScript-optimeringer, WebAssembly, SharedArrayBuffer og Atomics i EdgeHTML 16 ( 31. oktober 2017). Hentet 14. november 2017. Arkiveret fra originalen 15. november 2017.
- ↑ WebAssembly . Kan jeg bruge . Hentet 22. marts 2020. Arkiveret fra originalen 13. november 2021. (ubestemt)
Links