Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ C # Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Π° Π½Π° wasm, ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠΉ JS. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡ JS Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΈ Π½Π°ΠΏΠΈΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Java, C # ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ C ++ Ρ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ: Β«ΠΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ²Π½ΡΠΉΒ» , Β«Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°Β». ΠΈΠ»ΠΈ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΠ΅ Π±Π΅Π· ΠΏΠΎΠΌΠΎΡΠΈ JavaScript.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΡΠΎ Π²ΠΈΠ΄Π΅ΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΏΡΡΠ°ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ.
WebAsm Π±ΡΠ» Π²Π²Π΅Π΄Π΅Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊ JS, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ·ΡΠΊ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
Π Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ.
Π― Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ C #, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ wasm Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²Π·ΡΡΡ Π½Π° ΡΠ΅Π±Ρ javascript.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ, Π²Ρ Π±Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ, ΡΡΠΎ javascript Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ wasm, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Β«+, -, *, /Β» ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ , ΠΈΠ·-Π·Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ· JavaScript. Π² WebAssembly ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. # 1120
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ javascript ΠΈ Π΅Π³ΠΎ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΎΠΉ, ΠΈΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ Ρ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Β« Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ³ΠΎ AST Β» ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π½ΡΡΠ° Π½Π° Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
PS:
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ C # ΠΈΠ»ΠΈ Java, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½ΡΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Β«ΠΏΡΠΎΡΡΡΡ
Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈΒ» ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Β«ΡΠ»Π°Π±ΡΠΉ ΡΠΈΠΏΒ» ΠΈ Π»ΡΠ±ΡΡ
Π΄ΡΡΠ³ΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
@Becavalier ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π΄Π°, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ wasm ΠΈΠ· JS-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ, Π½ΠΎ ΡΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Javascript Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ .. ΠΊΠ°ΠΊ Π·Π°ΠΏΡΠΎΡ / ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ DOM, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ CSS, ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΎΠ»ΡΡΠ° _etc .._ ΠΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° wasm ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅. ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π²ΠΎΠ΄ΠΈΡΡΡ JS-ΠΌΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»ΡΡΠ°Π΅ # 1120 Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Javascript Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ wasm, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ.
ΠΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Angular2 / 4, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Typescript, Android Π² Kotlin ΠΈΠ»ΠΈ iOS Π² Swift, ΠΊΠΎΠ³Π΄Π° Π·Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΡΡΠΎΠΈΡ Π³ΡΠΎΠΌΠΊΠΎΠ΅ ΠΈΠΌΡ, Π²Π΅ΡΡ ΠΌΠΈΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ½ΡΡΡ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.
ΠΡΠ°ΠΊ, ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ JS Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ΄Π²ΠΈΠ½ΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠ»Π°Π½ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ΄Π°Π»Π΅Π½ Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π·Π° ΡΡΠ΅Ρ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΡΡΠΎΠ² API ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. Webassembly ΠΎΡΠΊΡΡΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Javascript Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π½Π°Ρ JS-ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ V8 ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΡΠ±ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ³Π½ΡΡΡ ΡΠ΅ΡΠ΅Π· JS-ΠΊΠΎΠ΄.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄Π»Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π·Π°ΠΌΠ΅Π½ΡΡ ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ TypeScript, CoffeeScript ΠΈ Ρ. Π.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Javascript, Π΄Π΅ΡΠΆΠΈΡΠ΅ ΠΏΠ°Π»ΡΡΡ ΡΠΊΡΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ . ΠΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ΄Π²ΠΈΠ³ΠΎΠ² Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ Π³ΠΎΠ΄Ρ.
PS: Ρ Π»ΡΠ±Π»Ρ Javascript ΠΈ C-Lang
Webassembly ΠΎΡΠΊΡΡΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Javascript Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
ΠΠ°, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ WebAssembly.
ΠΠΎΡ ΡΠΈΡΠ°ΡΠ° ΠΈΠ· FAQ ΠΏΠΎ
Π₯ΠΎΡΡ WebAssembly ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠΎΠ² Π΄Π»Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°, JavaScript ΠΈΠΌΠ΅Π΅Ρ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡ ΠΈ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ (ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅) Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ JavaScript ΠΈ WebAssembly Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ :
- Π¦Π΅Π»ΡΠ΅, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° C ++, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ JavaScript Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π²Π΅ΡΠ΅ΠΉ.
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² JavaScript Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ , ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΈΠ»ΠΈ Π±Π΅Π· WebAssembly.
ΠΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ C #, F #, C ++, OCaml, Elm, PureScript, Haskell, Java, Python, Ruby, Perl ΠΈ Ρ. Π. Π JavaScript.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ .NET Π² JavaScript , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ OCaml Π² JavaScript , Π° GWT ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΆΠ΅ 11 Π»Π΅Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
ΠΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ Π½ΠΎΠ²ΠΎΡΡΡ.
JavaScript ΡΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΠ΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ. WebAssembly ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ, Π²ΠΎΡ ΠΈ Π²ΡΠ΅.
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π½Π°Ρ JS-ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ V8 ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΡΠ±ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ³Π½ΡΡΡ ΡΠ΅ΡΠ΅Π· JS-ΠΊΠΎΠ΄.
ΠΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ JavaScript Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ·-Π·Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π½Π° JIT-Π΄Π²ΠΈΠΆΠΊΠΈ (ΠΈ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Ρ JavaScript), ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. WebAssembly Π΄Π°Π΅Ρ Π²Π°ΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ.
ΠΡΠ°ΠΊ, ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ JS Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ΄Π²ΠΈΠ½ΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠ»Π°Π½ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ΄Π°Π»Π΅Π½ Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π·Π° ΡΡΠ΅Ρ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΡΡΠΎΠ² API ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
ΠΠ΅Ρ, Π»ΡΠ΄ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JavaScript.
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ Π΄Π»Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΠ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠΎΠ² Π½Π° Π²ΡΠ±ΠΎΡ: Python, Perl, Ruby, PHP, Haskell, JavaScript (Node.js), OCaml, C ++, Java ΠΈ Ρ. Π.
ΠΡΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ JavaScript. JavaScript Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π½Π΅ΡΡΡ.
ΠΠ°ΠΆΠ΅ Π² ( ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎΠΌ) Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΌΠΈΡΠ΅, Π³Π΄Π΅ JavaScript Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π»ΡΠ΄ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ JavaScript Π² WebAssembly.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄Π»Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π·Π°ΠΌΠ΅Π½ΡΡ ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ TypeScript, CoffeeScript ΠΈ Ρ. Π.
ΠΡΠΎ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, Ρ Π»ΡΠ΄Π΅ΠΉ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΅ΡΡΡ Π²Π΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TypeScript ΠΈ JavaScript.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π±ΡΠ΄ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ TypeScript, ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, Π½ΠΎ TypeScript Π²ΡΡΠ΄ Π»ΠΈ ΠΈΡΡΠ΅Π·Π½Π΅Ρ.
Π― Π³ΠΎΠ²ΠΎΡΡ ΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ TypeScript (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Haxe ), Π½ΠΎ ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ»ΠΈ TypeScript.
4 ΡΠ΅Π½ΡΡΠ±ΡΡ 2017 Π³ΠΎΠ΄Π° Π² 03:42 Pauan [email protected] Π½Π°ΠΏΠΈΡΠ°Π»:
>
JavaScript ΡΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΠ΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ. WebAssembly ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ
Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ, Π²ΠΎΡ ΠΈ Π²ΡΠ΅.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠ΅ ΠΎΠ΄Π½Π° ΡΠ΅Π»Ρ Wasm - Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ JavaScript ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄ΡΡ. ΠΠ»Ρ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, Ρ
Π²ΠΎΡΡΠΎΠ²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π½Π°
Π΄ΠΎΡΠΎΠΆΠ½Π°Ρ ΠΊΠ°ΡΡΠ°.
@ rossberg-chromium ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π²Ρ ΠΏΡΠ°Π²Ρ, Ρ Π·Π°Π±ΡΠ» ΡΡΡ Π΄Π΅ΡΠ°Π»Ρ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΠ΅.
@Pauan Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ. Π₯ΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π²Π°ΡΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π²Π΅ΡΠ½Ρ ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ», Ρ Π½Π΅ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠΎΠ³Π»Π°ΡΠ΅Π½.
C # Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅ΡΠ°ΡΡΠΈΠΌ ΠΈ ΡΠ±ΠΈΠΉΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡΠΊΠ°Π·Π° ΠΎΡ Javascript Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Ρ.Π΅. Ρ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ C # Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Javascript. Π£ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, Π΅ΡΡΡ ΡΠ°Π½Ρ Π·Π°Π³Π»ΡΡΠΈΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΈΠ΅ Javascript, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ.
ΠΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ C #, F #, C ++, OCaml, Elm, PureScript, Haskell, Java, Python, Ruby, Perl ΠΈ Ρ. Π. Π JavaScript.
ΠΠ°, Javascript Π±ΡΠ» Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅. ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ WASM / Webasm ΠΌΠΎΠΉ ΠΌΠΎΡΠΈΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² Javascript ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² wasm ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»ΠΎΠΉ ΠΌΠ°ΡΠΊΠΈ API ΠΈΠ»ΠΈ ΠΌΠΎΡΡΡ Π² Javascript, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Javascript Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Webapp, Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΡΠΈΡΡΡΠΉ Webapp, Π° Π½Π΅ ASP.net, ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° JSP-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ.
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² JavaScript Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ WebAssembly ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ.
ΠΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ C #, F #, C ++, OCaml, Elm, PureScript, Haskell, Java, Python, Ruby, Perl ΠΈ Ρ. Π. Π JavaScript.
Π₯ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² JavaScript, ΡΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Webasm ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π° ΡΡΠΎ? Π ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΏΠΎΠ»Π½ΡΠΌ C Π² Webasm, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ?
ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΈΠ»ΠΈ ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Ρ ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΡΡΠ°ΡΡ ΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ (ΠΏΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ), Π² Π»ΡΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° JavaScript, ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Ρ Π²ΠΈΠ΄Π΅Π», ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Β«Π·Π°ΠΌΠ΅Π½ΡΒ» JavaScript Β»(Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ CoffeeScript, TypeScript ΠΈ Ρ. Π., ΠΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² JS).
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΅ΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½ΠΎΠ²ΡΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Ruby -> Webasm ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ JavaScript?
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JavaScript ΠΈ Ruby (Ρ Opal) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° (ΠΊΠ°ΠΊ ΡΠΎ, ΡΡΠΎ Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΡΠΊΠ°Π·Π°Π»ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅):
Π JavaScript Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ +
ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΈΡΠ»Π° Π² ΡΡΡΠΎΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
5 + " example" === "5 example"
Π Ruby Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, Π° ΡΡΠΎ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ:
5 + " example"
#TypeError: String can't be coerced into Integer
Π’Π°ΠΊ ΡΡΠΎ Ρ Opal Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ»ΡΡ ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ².
function $rb_plus(lhs, rhs) {
return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs + rhs : lhs['$+'](rhs);
}
String.prototype['$+'] = function (r){var t=this,n=arguments.length;return 1!==n&&e.ac(n,1,this,"+"),r=ke.get("Opal").$coerce_to(r,ke.get("String"),"to_str"),t+r.$to_s()}
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
# Ruby: if a || b
if ((($a = ((($b = a) !== false && $b !== nil && $b != null) ? $b : b)) !== nil && $a != null && (!$a.$$is_boolean || $a == true))) {
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ JIT ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ, Π½ΠΎ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π±Π»ΠΈΠ·ΠΊΠΈ (Π½Π΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ» ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΡ, Π½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ / ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠ΄Π΅Π»Π°Π», Π²Π΅ΡΡΠΈΡ Ruby Π±ΡΠ»Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅), ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ°ΠΌ ΠΆΠΈΠ·Π½Ρ ΡΡΠΆΠ΅Π»Π΅Π΅?
Π Π΄Π°ΠΆΠ΅ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ (Ρ ΠΎΡΡ Webasm ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠ°ΠΊ ΡΡΠΎ, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π½Π°ΡΠ°Π»ΠΎ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Webasm, Π° Π½Π΅ Π½Π° JS):
1 / 2 == 0.5 # Should be 0, Ruby has integer division
str = "Hello"
str << " World" # Opal: String#<< not supported. Mutable String methods are not supported in Opal.
puts str # "Hello World"
@nirus
Π― ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ C # Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Javascript.
ΠΠ°, ΠΈ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΡΡΡΠΎ (Ρ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ ΡΠ·ΡΠΊΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ»Π°Π½ΠΈΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»Ρ WebAssembly), Π½ΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π²Ρ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π΄Π°ΠΆΠ΅ Π±Π΅Π· WebAssembly.
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² wasm ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»ΠΎΠΉ ΠΌΠ°ΡΠΊΠΈ API ΠΈΠ»ΠΈ ΠΌΠΎΡΡΡ Π² Javascript, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Javascript Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Webapp, Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΡΠΈΡΡΡΠΉ Webapp, Π° Π½Π΅ ASP.net, ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° JSP-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΆΠ΄Π°ΡΡ WebAssembly, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠ°ΡΡ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ : asm.js ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ.
@wnewbery
Π₯ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² JavaScript, ΡΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Webasm ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π° ΡΡΠΎ? Π ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΏΠΎΠ»Π½ΡΠΌ C Π² Webasm, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ?
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, Π½ΠΎ Π²ΡΡΠ΄ Π»ΠΈ ΡΠ»ΡΡΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ ΠΊΠΎΠ΅-ΡΡΠΎ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ: asm.js ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° JavaScript, ΠΈ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΠΎΡΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΡΠΎΠ»Π΅.
ΠΡΠ°ΠΊ, ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²Π·ΡΡΡ ΡΠ·ΡΠΊ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° Π² asm.js, ΠΈ Π·Π°ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ·ΡΠΊ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΠΎΡΡΠΈ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΡΠΎΠ»Π΅. ΠΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ (ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΡ).
Π Ρ JS API (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, DOM) ΡΠ»ΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ.
ΠΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ PyPy.js, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ PyPy Π² asm.js.
ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ CPython (Π΄Π°, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ! ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ PyPy, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ JavaScript ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ CPython Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΡΠΎΠ»Π΅!)
ΠΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠΉ (5 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ Π² ΡΠΆΠ°ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, 15 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ Π² ΡΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅).
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ruby + ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° + ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² asm.js, ΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ, Π½ΠΎ Ρ ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π»ΡΠ΄ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ Opal.
WebAssembly - ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ²ΠΎΠ»ΡΡΠΈΡ asm.js. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ Ρ WebAssembly, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΈ Ρ asm.js.
ΠΡΠ°ΠΊ, Π΄Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ ΡΠ·ΡΠΊ + Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ + ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ + ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° Π² WebAssembly, ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ.
ΠΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΡΠ΅ ΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, ΡΡΠΎ ΠΈ Ρ asm.js: ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°, ΠΈ ΡΡΡΠ΄Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ JS API.
ΠΠ΅ΠΆΠ΄Ρ WebAssembly ΠΈ asm.js Π΅ΡΡΡ ΡΠ΅ΠΌΡ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ:
WebAssembly Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ (Π½Π° 5%) Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ asm.js Π² ΡΠ΅Π»ΠΎΠΌ.
WebAssembly Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ (~ 400%) Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ asm.js, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ 64-Π±ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°.
WebAssembly ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅. ΠΡΠΎ Π½Π΅ ΡΠ»ΡΡΡΠ°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π±ΡΡΡΡΠ΅Π΅ Ρ WebAssembly.
Π Π°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° WebAssembly ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ°ΠΉΠ»Π° asm.js (ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° 10-20% ΠΌΠ΅Π½ΡΡΠ΅).
WebAssembly ΠΌΠΎΠΆΠ΅Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΡΡΡΠ°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ Π² asm.js (ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Ρ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΡΡ ΠΈ Ρ. Π.).
WebAssembly ΠΌΠΎΠΆΠ΅Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ±ΠΎΡΡΠΈΠΊΡ ΠΌΡΡΠΎΡΠ° JavaScript (ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ° Π² WebAssembly, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΌΠ΅Π½ΡΡΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²).
WebAssembly Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JS API , (ΠΊΠ°ΠΊ Π² DOM).
ΠΠΎ Π΄Π°ΠΆΠ΅ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ VM + Π²Π°ΡΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ° Π² WebAssembly, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ + ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ + ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ° Π² asm.js Π΄Π»Ρ Π²Π°Ρ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ°, ΠΎΠ½Π°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ° Π΄Π°ΠΆΠ΅ Ρ WebAssembly.
Π Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ VM + Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ + ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ° Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ Π΄Π»Ρ Π²Π°Ρ, Π²Ρ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ asm.js (ΠΈ Π·Π°ΡΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ WebAssembly ΠΏΠΎΠ·ΠΆΠ΅).
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΅ΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½ΠΎΠ²ΡΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Ruby -> Webasm ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ JavaScript?
Π¦Π΅Π»Ρ WebAssembly - Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΎΠ½ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΡΠΎΠ»Π΅.
ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΠ΅ Ruby Π² WebAssembly, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ Ruby Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΡΠΎΠ»Π΅.
Ruby - Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ ΡΠ·ΡΠΊ. ΠΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ WebAssembly.
1 / 2 == 0.5 # Should be 0, Ruby has integer division
ΠΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π² Opal, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ, ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ $rb_divide
.
str << " World" # Opal: String#<< not supported. Mutable String methods are not supported in Opal.
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ, Π΅ΡΠ»ΠΈ Opal ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Ρ JavaScript (ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ).
@Pauan
Π Π±ΡΠ΄ΡΡΠ΅ΠΌ WebAssembly ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΡΡΡΠ°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ Π² asm.js (ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Ρ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΡΡ ΠΈ Ρ. Π.).
ΠΠΎΡΠΎΠΊ - ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². ΠΠ΅Π· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π½Π° C ++, C #, java, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ, Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡΡΡ Π² webapp, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ Π΄ΡΡΠ³ΠΎΠΉ Ρ ΠΎΡΠΎΡΠ΅ΠΉ Π²Π΅ΡΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ SIMD ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° _Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ (?) _). ΠΠΎΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ asm.js Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡ, Π½ΠΈ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΈ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠ°ΠΊ Ρ ΠΎΡΠΎΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, "ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ " Π½Π° asm.js Π΄Π°Π²Π½ΡΠΌ-Π΄Π°Π²Π½ΠΎ.
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ, ΡΡΠΎ javascript Π½Π΅ ΠΈΡΡΠ΅Π·Π½Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π·Π°ΠΏΡΡΠΊ javascript ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ, ΠΊΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ Π²Π΅Π±-ΡΠ°ΠΉΡΡ Ρ javascript, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π² wasm Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΠΏΡΠΈΡΠΎΡΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
@unmellow , ΡΡΠΎΠ±Ρ ΡΠ½ΠΎΠ²Π° ΡΠ°Π·Π²Π΅Π½ΡΠ°ΡΡ ΡΡΠΎΡ ΠΌΠΈΡ: ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ JS Π² Wasm Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π· Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ JS-Π΄Π²ΠΈΠΆΠΊΠΈ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΡΡΠΈΠΉ ΡΠ·ΡΠΊ.
Π΄Π°, ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ Π·Π°Π±ΡΠ», Ρ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅
edit: ΡΡΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡΡ, Ρ
ΠΎΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΈ Π΄Π²ΠΈΠΆΠΊΠΈ javascript Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ
Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ javascript sense Π»ΡΠ΄ΠΈ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² wasm Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
ΠΠ½Π΅ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠΊΡΠΏΠ°ΡΡ Π±ΠΈΠ»Π΅Ρ Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π΄Π°Π²Π½ΠΎΡΡΠΈ, Π½ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΡΠ°Π΄Ρ.
Π― Π²ΠΈΠΆΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΈΠ΄Π΅Π΅ Π·Π°ΠΌΠ΅Π½Ρ Javascript Π½Π° WASM, Π½ΠΎ ΠΎΠ΄Π½ΠΎ Π΄Π΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ WASM - ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠ΄ΠΈ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Javascript - ΡΡΠΎ Π½Π΅ ΡΠΎΡ ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ΠΈ Ρ ΠΎΡΡΡ (ΠΈΠ»ΠΈ Ρ ΠΎΡΡΡ). Π― ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΏΡΠΎΡΡΠΎΠΉ Javascript - ΡΡΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π»ΡΠ΄ΡΠΌ. ΠΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π»ΡΠ΄Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΡΠ·ΡΠΊΠΎΠ². ΠΡΠΎΡΡΠΎ Π»ΡΠ΄ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΠΈΡΡ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ (?) Π Π΅ΡΠ΅Π½ΠΈΡ.
ΠΠΎ ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Π° Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΠΎΡΠΎΠ½Ρ, ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ - ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠ°Π½ΡΠΏΠΈΠ»Π΅ΡΡ, Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ Π½Π° Javascript, Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π½Π° Π½ΠΈΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ).
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΠ»ΠΈΠΉ. Π’ΡΠ°Π½ΡΠΏΠΈΠ»Π΅ΡΡ - ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, Π° Π±Π°Π½Π΄Π»Π΅ΡΡ - ΡΡΠΎ Π»ΠΈΠ½ΠΊΠ΅ΡΡ. Π£ Π²ΡΠ΅Ρ Π½Π°Ρ Π²Π΅ΠΊΠ°ΠΌΠΈ Π±ΡΠ»ΠΈ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. ΠΠΎΠ΄ΡΠ»ΠΈ, Π²ΡΡΡΡΡ ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π°, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ / Π»Π΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΡΠΈΠ²Π°ΠΌΠΈ ΠΈ Ρ. Π. ΠΠΈΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π΅Ρ, Π½ΠΎ Π»ΡΠ΄ΡΠΌ Π½ΡΠΆΠ½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°, ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π΅-Π²Π΅Π±-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
ΠΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ WASM Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π·Π° ΠΎΠ΄ΠΈΠ½ Π΄Π΅Π½Ρ. Π£ Javascript ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ Π½Π΅Ρ. Π― ΠΏΠΎΡΡΠ°ΡΡ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Javascript Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΡΠ΄Π°-ΡΠΎ ΡΠΉΠ΄Π΅Ρ, Π½ΠΎ ΡΡΠΎ ΡΠ²Π½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅.
Javascript Π΄Π²ΠΈΠΆΠ΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΡΡΠΈΡΠ°Ρ ΡΠΆΠ°ΡΠ½ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡ Π·Π°ΠΌΠ΅Π½Ρ WASM. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ Π²Π²ΠΎΠ΄ΠΈΠ»ΠΈ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅. Π― Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ... Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΉΠΌΠ΅Ρ Π΅Π³ΠΎ ΠΌΠ΅ΡΡΠΎ, Π½ΠΎ ΡΡΠ°Π½Π΅Ρ ΠΏΡΡΠΌΡΠΌ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ½Π΅ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΡΡ Π½ΠΎΠ²ΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ JS ΠΈ Π΅Π³ΠΎ "ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ²", ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ.
@spencerudnick ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΈΡΠ°Π»Π° ΡΠ±ΠΎΡΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ C?
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ°, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ WebAssembly.
ΠΠΎΡ ΡΠΈΡΠ°ΡΠ° ΠΈΠ· FAQ ΠΏΠΎ
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² JavaScript Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ , ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΈΠ»ΠΈ Π±Π΅Π· WebAssembly.
ΠΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ C #, F #, C ++, OCaml, Elm, PureScript, Haskell, Java, Python, Ruby, Perl ΠΈ Ρ. Π. Π JavaScript.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ .NET Π² JavaScript , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ OCaml Π² JavaScript , Π° GWT ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΆΠ΅ 11 Π»Π΅Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
ΠΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ Π½ΠΎΠ²ΠΎΡΡΡ.
JavaScript ΡΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΠ΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ. WebAssembly ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ, Π²ΠΎΡ ΠΈ Π²ΡΠ΅.
ΠΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ JavaScript Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ·-Π·Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π½Π° JIT-Π΄Π²ΠΈΠΆΠΊΠΈ (ΠΈ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Ρ JavaScript), ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. WebAssembly Π΄Π°Π΅Ρ Π²Π°ΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ.
ΠΠ΅Ρ, Π»ΡΠ΄ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JavaScript.
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ Π΄Π»Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΠ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠΎΠ² Π½Π° Π²ΡΠ±ΠΎΡ: Python, Perl, Ruby, PHP, Haskell, JavaScript (Node.js), OCaml, C ++, Java ΠΈ Ρ. Π.
ΠΡΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ JavaScript. JavaScript Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π½Π΅ΡΡΡ.
ΠΠ°ΠΆΠ΅ Π² ( ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎΠΌ) Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΌΠΈΡΠ΅, Π³Π΄Π΅ JavaScript Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π»ΡΠ΄ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ JavaScript Π² WebAssembly.
ΠΡΠΎ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, Ρ Π»ΡΠ΄Π΅ΠΉ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΅ΡΡΡ Π²Π΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TypeScript ΠΈ JavaScript.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π±ΡΠ΄ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ TypeScript, ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, Π½ΠΎ TypeScript Π²ΡΡΠ΄ Π»ΠΈ ΠΈΡΡΠ΅Π·Π½Π΅Ρ.
Π― Π³ΠΎΠ²ΠΎΡΡ ΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ TypeScript (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Haxe ), Π½ΠΎ ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ»ΠΈ TypeScript.