W3C predstavený Nedávno prostredníctvom príspevku návrh novej špecifikácie ktorý štandardizuje kód prípravy WebAssembly 2.0 a súvisiace API umožniť vytváranie vysokovýkonných aplikácií, ktoré sú prenosné medzi prehliadačmi a hardvérovými platformami.
Pre tých, ktorí sú vo WebAssembly noví, by ste to mali vedieť toto poskytuje generický middleware, nízka úroveň a nezávislý od prehliadača, aby ste mohli spúšťať skompilované aplikácie z rôznych programovacích jazykov. Použitím JIT pre WebAssembly môžete dosiahnuť úroveň výkonu blízku natívnemu kódu.
O WebAssembly
WebAssembly možno použiť na vykonávanie vysokovýkonných úloh v prehliadači, ako je kódovanie videa, spracovanie zvuku, 3D a grafická manipulácia, vývoj hier, kryptografické operácie a matematické výpočty, spustením kódu napísaného v kompilovaných jazykoch, ako je C/C++.
Medzi hlavné úlohy WebAssembly patrí zabezpečenie prenosnosti, predvídateľnosti správania a identity spúšťania kódu na rôznych platformách. Nedávno sa WebAssembly presadilo aj ako univerzálna platforma pre bezpečné spúšťanie kódu na akejkoľvek infraštruktúre, operačnom systéme a zariadení, nielen v prehliadačoch.
O koncepte WebAssembly 2.0
Na strane zmien, ktoré boli vykonané od WebAssembly, sú hotové návrhy pre WebAssembly 2.0 SIMD s pevnou šírkou, operácie s veľkokapacitnou pamäťou, typy referencií, podpora JavaScript BigInt pre WebAssembly i64, podpora viacerých návratových hodnôt a import/export meniteľných globálne premenné.
Konferencia W3C zverejnila tri návrhy špecifikácií WebAssembly 2.0:
- Jadro webovej zostavy: opisuje nízkoúrovňový virtuálny stroj na spustenie prechodného kódu WebAssembly. Zdroje súvisiace s WebAssembly prichádzajú vo formáte „.wasm“, podobne ako súbory Java „.class“, ktoré obsahujú statické údaje a segmenty kódu na prácu s týmito údajmi.
- Rozhranie JavaScriptu WebAssembly: poskytuje API pre integráciu s JavaScriptom. Umožňuje získať hodnoty a odovzdať parametre funkciám WebAssembly. Vykonávanie WebAssembly sa riadi bezpečnostným modelom JavaScript a všetka interakcia s hostiteľom sa vykonáva podobným spôsobom ako pri spúšťaní kódu JavaScript.
- WebAssembly Web API: definuje API založené na mechanizme Promise na vyžiadanie a spustenie zdrojov ".wasm". Formát prostriedkov WebAssembly je optimalizovaný na spustenie vykonávania bez čakania na úplné stiahnutie súboru, čo zlepšuje odozvu webových aplikácií.
Rozdiely medzi WebAssembly a WebAssembly 2.0
Tiež je potrebné poznamenať, že v WebAssembly 2.0 je niekoľko dôležitých zmien v porovnaní s prvou verziou štandardu:
- podpora vektorového typu v128 a súvisiace vektorové inštrukcie, ktoré vám umožňujú vykonávať operácie s viacerými číselnými hodnotami paralelne (SIMD, jedna inštrukcia, viaceré dáta).
- Schopnosť importovať a exportovať meniteľné globálne premenné, ktorý umožňuje globálnu väzbu pre hodnoty ako ukazovatele zásobníka v C++.
- Nové pokyny na konverziu float na int, ktorý namiesto toho, aby vyvolal výnimku pri pretečení výsledkov, vráti minimálnu alebo maximálnu možnú hodnotu (požadované pre SIMD).
- Pokyny na rozšírenie znamienka celých čísel (zvýšte bitovú hĺbku čísla so zachovaním znamienka a hodnoty).
- Podpora pre vrátenie viacerých hodnôt blokmi a funkciami (rovnako ako odovzdávanie viacerých parametrov funkciám).
- Implementujte funkcie JavaScript BigInt64Array a BigUint64Array na konverziu medzi typom JavaScript BigInt a reprezentáciou WebAssembly 64-bitových celých čísel.
- Podpora pre referenčné typy (funcref a externref) a ich pridružené príkazy (select, ref.null, ref.func a ref.is_null).
- inštrukcie memory.copy, memory.fill, memory.init a data.drop na kopírovanie údajov medzi oblasťami pamäte a vymazanie oblastí pamäte.
- Pokyny na priamy prístup a úpravu tabuliek (table.set, table.get, table.size, table.grow).
- Schopnosť vytvárať, importovať a exportovať viacero tabuliek v jednom module. Funkcie na kopírovanie/vypĺňanie tabuliek v dávkovom režime (table.copy, table.init a elem.drop).
Nakoniec, ak máte záujem dozvedieť sa o tom viac, môžete sa obrátiť na podrobnosti Na nasledujúcom odkaze.