ΠΠΎΠ½ΡΠΎΡΡΠΈΡΠΌ W3C ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° ΡΠ΅ΡΠ½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ WebAssembly 2.0 ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡ Ρ Π½Π΅Π³ΠΎ API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΠΈΡΠΎΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠΈ ΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ. WebAssembly ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ Π±ΡΠ°ΡΠ·ΡΡΠ° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡΠΈ. Π§ΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° JIT Π·Π° WebAssembly ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, Π±Π»ΠΈΠ·ΠΊΠ° Π΄ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΈΡ ΠΊΠΎΠ΄.
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° WebAssembly ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π²ΡΠΊ, ΡΠ°Π±ΠΎΡΠ° Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΈ 3D, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ³ΡΠΈ, ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠ΅Π· ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡΠ° Π½Π° ΠΊΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΈ Π΅Π·ΠΈΡΠΈ ΠΊΠ°ΡΠΎ C/C++.
Π‘ΡΠ΅Π΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ΅Π»ΠΈ Π½Π° WebAssembly Π΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡ, ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΡΡ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ. ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΡΠΊ WebAssembly ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π°ΡΡΡΡΠ°Π²Π° ΠΊΠ°ΡΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΈ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° Π΄ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠΈΡΠ΅.
W3C ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° ΡΡΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° WebAssembly 2.0:
- WebAssembly Core β ΠΎΠΏΠΈΡΠ²Π° Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ WebAssembly. Π‘Π²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Ρ WebAssembly ΡΠ΅ΡΡΡΡΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ Β«.wasmΒ», ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Β«.classΒ» Π² Java ΠΈ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΡΠ°ΡΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ ΠΊΠΎΠ΄ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
- WebAssembly JavaScript Interface β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ JavaScript. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ WebAssembly. ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° WebAssembly ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π° JavaScript ΠΈ Π²ΡΡΠΊΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° JavaScript ΠΊΠΎΠ΄Π°.
- WebAssembly Web API β ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Promise Π·Π° Π·Π°ΡΠ²ΠΊΠ° ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Β«.wasmΒ». Π€ΠΎΡΠΌΠ°ΡΡΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° WebAssembly Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° Π±ΡΡΠ·ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π±Π΅Π· Π΄Π° ΡΠ΅ ΡΠ°ΠΊΠ° ΠΏΡΠ»Π½ΠΎΡΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΡΠ·ΠΈΠ²ΡΠΈΠ²ΠΎΡΡΡΠ° Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°.
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² WebAssembly 2.0, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΡΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ°:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π²Π΅ΠΊΡΠΎΡΠ½ΠΈΡ ΡΠΈΠΏ v128 ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Ρ Π½Π΅Π³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΡΡ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΡΠ»ΠΎΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ (SIMD, single instruction multiple data).
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π²Π½ΠΎΡ ΠΈ ΠΈΠ·Π½ΠΎΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΈ (mutable) Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΈ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π·Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ΅ΠΊ Π² C++.
- ΠΠΎΠ²ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏ float Π² int, ΠΊΠΎΠΈΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠ΅Π»ΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°, Π²ΡΡΡΠ°Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ (Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° SIMD).
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° Π·Π½Π°ΠΊΠ° Π½Π° ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π° (ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΠ»ΠΎΡΠΎ ΡΡΡ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π·Π½Π°ΠΊΠ° ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°).
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΎ ΠΈ ΡΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΠΈ (Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ).
- ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° JavaScript ΡΡΠ½ΠΊΡΠΈΠΈ BigInt64Array ΠΈ BigUint64Array Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ JavaScript ΡΠΈΠΏ BigInt ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° 64-Π±ΠΈΡΠΎΠ²ΠΈ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π° Π² WebAssembly.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ (funcref ΠΈ externref) ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (select, ref.null, ref.func ΠΈ ref.is_null).
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ memory.copy, memory.fill, memory.init ΠΈ data.drop Π·Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ (table.set, table.get, table.size, table.grow). ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅, ΠΈΠΌΠΏΠΎΡΡ ΠΈ Π΅ΠΊΡΠΏΠΎΡΡ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π±Π»ΠΈΡΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ». Π€ΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅/ΠΏΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ (table.copy, table.init ΠΈ elem.drop).
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
