Design: Webasm ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Javascript Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅?

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 17 Π°Π²Π³. 2017  Β·  15ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: WebAssembly/design

Π‘Ρ€Π΅Π΄Π° выполнСния C # Π±Ρ‹Π»Π° пСрСнСсСна Π½Π° wasm, ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ JS. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ появлСния срСд выполнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ замСнят JS Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… ΠΈ Π½Π°ΠΏΠΈΡˆΡƒΡ‚ клиСнтскиС Π²Π΅Π±-прилоТСния Π½Π° Java, C # ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ C ++ с заявлСниСм, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ говорится: «Код Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС, Ρ‡Π΅ΠΌ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉΒ» , Β«Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ быстрСС, Ρ‡Π΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина». ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅ Π±Π΅Π· ΠΏΠΎΠΌΠΎΡ‰ΠΈ JavaScript.

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, посмотритС это Π²ΠΈΠ΄Π΅ΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

WebAsm Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π² качСствС дополнСния ΠΊ JS, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ язык ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса.

Π’ блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π΅Π±-страницы Π±ΡƒΠ΄ΡƒΡ‚ доставлСны с сСрвСра, скомпилированного ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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.

ВсС 15 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― нСдостаточно Π·Π½Π°ΠΊΠΎΠΌ с 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 Π΅ΡΡ‚ΡŒ сСмь Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ:

  1. WebAssembly Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ (Π½Π° 5%) быстрСС, Ρ‡Π΅ΠΌ asm.js Π² Ρ†Π΅Π»ΠΎΠΌ.

  2. WebAssembly Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (~ 400%) быстрСС, Ρ‡Π΅ΠΌ asm.js, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа.

  3. WebAssembly ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС. Π­Ρ‚ΠΎ Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ врСмя Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ быстрСС с WebAssembly.

  4. Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° WebAssembly мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° asm.js (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 10-20% мСньшС).

  5. WebAssembly ΠΌΠΎΠΆΠ΅Ρ‚ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² asm.js (ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ‚. Π”.).

  6. WebAssembly ΠΌΠΎΠΆΠ΅Ρ‚ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ сборщику мусора JavaScript (Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборщик мусора вашСго языка Π² WebAssembly, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ мСньшиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²).

  7. 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?

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ