web összeállítás | |
---|---|
Nyelvóra | kifejezés-orientált |
Megjelent | 2015 [2] |
Fejlesztő | |
Fájlkiterjesztés _ | .wastvagy [3].wasm |
Kiadás | 2.0.0 [1] ( 2022. június 1. ) |
Típusrendszer | statikus |
Befolyásolt | Asm.js és Native Client |
Engedély | Apache licenc 2.0 |
Weboldal | webassembly.org |
Médiafájlok a Wikimedia Commons oldalon |
A WebAssembly (rövidítve wasm ) egy alacsony szintű programozási nyelv a verem virtuális gépekhez, amelyet hordozható fordítási célként terveztek olyan magas szintű nyelvekhez, mint a C , C++ , C# , Rust , Go . A Wasm bináris formátumú utasításokat végrehajtó verem virtuális gép böngésző- és szerverkörnyezetben is futtatható. A Wasm kód egy hordozható absztrakt szintaktikai fa , amely a JavaScripthez képest gyorsabb elemzést és hatékonyabb végrehajtást biztosít .
A projekt 2015. június 17-én indult [4] , 2016. március 15-én mutatták be az Angry Bots játék működését a Unity mintakészletéből a Chromium böngészőben [5] . A projekt kezdetben asm.js [6] és PNaCl [7] alapú . 2017 márciusában a fejlesztői közösség megállapodásra jutott egy bináris formátumról, egy API for JavaScript-ről és egy referencia értelmezőről. 2017. május végén a Chromium projektcsapat bejelentette a PNaCl megszüntetését a WebAssembly javára [8] .
2021-től a WebAssembly csapatába a Mozilla , a Google , a Microsoft és az Apple fejlesztői tartoznak , amelyek a piac négy legelterjedtebb böngészőjét képviselik – a Firefoxot , a Chrome -ot , a Microsoft Edge - t és a Safarit [7] .
Az alábbi táblázat ugyanazon forráskód három különböző ábrázolását mutatja be, ahogyan azt wasm-re fordították:
C forráskód | "lineáris összeállítás bájtkód" | bináris kód WASM |
int faktoriális ( int n ) { ha ( n == 0 ) visszatérés 1 ; más return n * faktoriális ( n -1 ); } | get_local 0 i64.eqz ha i64 i64.const 1 más get_local 0 get_local 0 i64.const 1 i64.sub hívja a 0-t i64.mul vége | 2000 ötven 047e 42 01 05 2000 2000 42 01 7d 1000 7e 0b |
A fordító belsőleg egy s-kifejezés reprezentációt használ , amely több információt tartalmaz, mint a "lineáris összeállítás bájtkód". Például:
( module ( type $FUNCSIG$dd ( func ( param f64 ) ( eredmény f64 ))) ( import "global.Math" "exp" ( func $exp ( param f64 ) ( eredmény f64 ))) ( memória 256 256 ) ( export "memory" ( memória 0 )) ( func $doubleExp ( param $0 f64 ) ( eredmény f64 ) ( f64.mul ( call $exp ( get_local $0 ) ) ( f64.const 2 ) ) ) ( export "doubleExp" ( func $doubleExp )) )A WebAssembly-be való fordítást számos nyelv támogatja, a megvalósítás különböző szakaszokban van [9] :
A WebAssembly megvalósítása 2017 vége óta minden nagyobb böngészőben megtalálható (az Internet Explorer kivételével) [15] :
2021 júliusában a telepített böngészők 94%-a támogatja a WebAssembly-t [20] . A régebbi böngészőkhöz létezik egy asm.js polifill [7] .