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 .
web montage
Sprog klasse udtryksorienteret
Dukkede op i 2015 [2]
Udvikler
Filtypenavn _ .wasteller [3].wasm
Frigøre 2.0.0 [1]  ( 1. juni 2022 )
Type system statisk
Blev påvirket Asm.js og Native Client
Licens Apache-licens 2.0
Internet side webassembly.org
 Mediefiler på Wikimedia Commons

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

  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. ↑ Arbejder på fremtiden for kompilering-til-web-applikationer  . Mike Holmans blog (17. juni 2015). Hentet 7. juni 2017. Arkiveret fra originalen 2. juni 2017.
  5. 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.
  6. WebAssembly: et binært format til  nettet . ②ality - JavaScript og mere (18. juni 2015). Hentet 2. februar 2016. Arkiveret fra originalen 5. februar 2016.
  7. 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.
  8. Farvel PNaCl, Hej WebAssembly!  (engelsk) (30. maj 2017). Hentet 10. juni 2017. Arkiveret fra originalen 30. maj 2017.
  9. Fantastiske WebAssembly-sprog . Hentet 18. oktober 2019. Arkiveret fra originalen 12. november 2019.
  10. Annoncering af Rust 1.14  ( 22. december 2016). Hentet 7. juni 2017. Arkiveret fra originalen 5. maj 2017.
  11. En alternativ BEAM-implementering, designet til WebAssembly: lumen/lumen . - 2019-12-06. Arkiveret fra originalen den 27. december 2019.
  12. Go 1.11 Release Notes - Go-programmeringssproget . tip.golang.org. Hentet 16. juli 2018. Arkiveret fra originalen 14. august 2018.
  13. Generering af WebAssembly med LDC . Hentet 13. november 2018. Arkiveret fra originalen 14. november 2018.
  14. WebAssembly - Gratis Pascal-wiki . wiki.freepascal.org. Hentet 15. maj 2020. Arkiveret fra originalen 11. oktober 2021.
  15. ↑ 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.
  16. WebAssembly - Chrome Platform Status . Hentet 7. juni 2017. Arkiveret fra originalen 17. februar 2017.
  17. Firefox 52: Introducing Web Assembly, CSS Grid and the Grid Inspector  ( 7. marts 2017). Hentet 7. juni 2017. Arkiveret fra originalen 27. maj 2017.
  18. Nye WebKit-funktioner i Safari 11  ( 22. september 2017). Hentet 30. september 2017. Arkiveret fra originalen 30. september 2017.
  19. 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.
  20. WebAssembly . Kan jeg bruge . Hentet 22. marts 2020. Arkiveret fra originalen 13. november 2021.

Links