ΠŸΡ€Π΅Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° FunC във FunCtional с Haskell: Как Serokell спСчСли ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π½Π° Telegram

ВСроятно стС Ρ‡ΡƒΠ²Π°Π»ΠΈ Ρ‚ΠΎΠ·ΠΈ Telegram Π΅ Π½Π° ΠΏΡŠΡ‚ Π΄Π° пуснС Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ton. Но ΠΌΠΎΠΆΠ΅ Π±ΠΈ стС пропуснали Π½ΠΎΠ²ΠΈΠ½Π°Ρ‚Π°, Ρ‡Π΅ Π½Π΅ΠΎΡ‚Π΄Π°Π²Π½Π° Telegram обяви конкурс Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° Ρ‚Π°Π·ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

Π•ΠΊΠΈΠΏΡŠΡ‚ Π½Π° Serokell, с Π±ΠΎΠ³Π°Ρ‚ ΠΎΠΏΠΈΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° останС настрана. Π”Π΅Π»Π΅Π³ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΏΠ΅Ρ‚ΠΈΠΌΠ° слуТитСли Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π΄Π²Π΅ сСдмици ΠΏΠΎ-късно Ρ‚Π΅ Π·Π°Π΅Ρ…Π° ΠΏΡŠΡ€Π²ΠΎ място Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠ΄ (Π½Π΅)скромния случаСн псСвдоним Sexy Chameleon. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ говоря Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ са Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ. НадявамС сС, Ρ‡Π΅ Π² слСдващитС дСсСтина ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Ρ‰Π΅ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ½Π΅ интСрСсна история, Π° Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² нСя, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си.

Но Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΊΠΎ контСкст.

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ условия

И Ρ‚Π°ΠΊΠ°, основнитС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° участницитС бяха ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€Π°Π²Π΅Π½Π΅Ρ‚ΠΎ Π½Π° прСдлоТСния Π·Π° подобряванС Π½Π° СкосистСмата TON. ΠšΠΎΠ½ΠΊΡƒΡ€ΡΡŠΡ‚ сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΎΡ‚ 24 сСптСмври Π΄ΠΎ 15 ΠΎΠΊΡ‚ΠΎΠΌΠ²Ρ€ΠΈ, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ бяха обявСни Π΅Π΄Π²Π° Π½Π° 15 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ. Доста дълго Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Telegram успя Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΈ обяви Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ конкурси Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния Π² C++ Π·Π° тСстванС ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° качСството Π½Π° VoIP Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΈ Π² Telegram.

Π˜Π·Π±Ρ€Π°Ρ…ΠΌΠ΅ Π΄Π²Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΎΡ‚ списъка, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅. Π—Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ тях ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ инструмСнти, разпространявани с TON, Π° вторият бСшС Π²Π½Π΅Π΄Ρ€Π΅Π½ Π½Π° Π½ΠΎΠ² Π΅Π·ΠΈΠΊ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ спСциално Π·Π° TON ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ Π² Haskell.

Π˜Π·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π΅ Π΅ случаСн. Π’ Π½Π°ΡˆΠ°Ρ‚Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π±Π»ΠΎΠ³ ЧСсто Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π°Ρ‰ΠΎ смятамС, Ρ‡Π΅ слоТността Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ ΠΏΡ€Π΅ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ цяло Π³ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΌΠ΅ ΠΏΡ€Π΅Π΄ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈΡ‚Π΅. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Ρ‚ΠΎΠΉ ΡΡŠΡ‰ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π½Π° Ρ‚Π°Π·ΠΈ статия.

Π—Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° участвамС?

Накратко, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° спСциализация са нСстандартни ΠΈ слоТни ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ изискват спСциални умСния ΠΈ чСсто ΠΈΠΌΠ°Ρ‚ Π½Π°ΡƒΡ‡Π½Π° стойност Π·Π° ИВ общността. НиС силно подкрСпямС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ с Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ популяризиранС, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° си ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡ΠΈΠΌ с Π²ΠΎΠ΄Π΅Ρ‰ΠΈ руски унивСрситСти Π² областта Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΈΡ‚Π΅ Π½Π°ΡƒΠΊΠΈ ΠΈ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°Ρ‚Π°.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ участиСто Π² нашия любим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Telegram сами ΠΏΠΎ сСбС си бяха ΠΎΡ‚Π»ΠΈΡ‡Π½Π° мотивация, Π½ΠΎ наградният Ρ„ΠΎΠ½Π΄ сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π° Π² Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ стимул. πŸ™‚

TON изслСдванС Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½

НиС слСдим Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½, изкуствСния ΠΈΠ½Ρ‚Π΅Π»Π΅ΠΊΡ‚ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΡ‚ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ Π΄Π° Π½Π΅ пропуснСм Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΠΌΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ във всяка ΠΎΡ‚ областитС, Π² ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°, Π½Π°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ Π²Π΅Ρ‡Π΅ бСшС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ с ΠΈΠ΄Π΅ΠΈ ΠΎΡ‚ TON бяла хартия. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° с TON, Π½ΠΈΠ΅ Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ тСхничСската докумСнтация ΠΈ дСйствитСлния ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° бСшС съвсСм ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° - Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ΠΎ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация Π½Π° уСбсайт ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

По Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°, ΠΊΠΎΠ΄ΡŠΡ‚ Π²Π΅Ρ‡Π΅ бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½, Ρ‚Π°ΠΊΠ° Ρ‡Π΅, Π·Π° Π΄Π° спСстим Π²Ρ€Π΅ΠΌΠ΅, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΠΌ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡŽΠΌΠ΅, написано ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π—Π° съТалСниС, Ρ‚ΠΎΠ²Π° Π½Π΅ Π΄Π°Π΄Π΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ - освСн инструкции Π·Π° сглобяванС Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ubuntu, Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ.

Π‘Π°ΠΌΠ°Ρ‚Π° докумСнтация бСшС Π΄ΠΎΠ±Ρ€Π΅ ΠΏΡ€ΠΎΡƒΡ‡Π΅Π½Π°, Π½ΠΎ бСшС Ρ‚Ρ€ΡƒΠ΄Π½Π° Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π² някои области. Доста чСсто Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ към ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π΄Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅ ΠΎΡ‚ описания Π½Π° високо Π½ΠΈΠ²ΠΎ Π½Π° абстрактни ΠΈΠ΄Π΅ΠΈ към подробности Π·Π° изпълнСниС Π½Π° ниско Π½ΠΈΠ²ΠΎ.

Π‘ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-лСсно, Π°ΠΊΠΎ спСцификацията ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡΡ‚Π° Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅Π΄Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина прСдставя своя стСк Π΅ ΠΏΠΎ-вСроятно Π΄Π° разсСС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, ΡΡŠΠ·Π΄Π°Π²Π°Ρ‰ΠΈ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TON, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π½Π΅.

Nix: сглобяванС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ Serokell смС Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π΅Π½ΠΎΠ²Π΅ Π½ΠΈΡ‰ΠΎ. НиС ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с Π½Π΅Π³ΠΎ ΠΈ Π³ΠΈ внСдрявамС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° NixOps, ΠΈ инсталиран Π½Π° всички наши ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ОБ Nix. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π° всички наши ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ са Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ работят Π½Π° всяка ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма, Π½Π° която ΠΌΠΎΠΆΠ΅ Π΄Π° сС инсталира Nix.

Π’Π°ΠΊΠ° Ρ‡Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ със ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Nix наслагванС с ΠΈΠ·Ρ€Π°Π· Π·Π° асСмблиранС Π½Π° TON. Π‘ Π½Π΅Π³ΠΎΠ²Π° ΠΏΠΎΠΌΠΎΡ‰ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° TON Π΅ възмоТно Π½Π°ΠΉ-просто:

$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && make

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° инсталиратС Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ зависимости. Nix магичСски Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ всичко вмСсто вас, нСзависимо Π΄Π°Π»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ NixOS, Ubuntu ΠΈΠ»ΠΈ macOS.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π·Π° TON

ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° TON Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина TON (TVM). TVM Π΅ ΠΏΠΎ-слоТСн ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ интСрСсна функционалност, с която Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΡ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ към Π΄Π°Π½Π½ΠΈ.

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΌΡ‡Π΅Ρ‚Π°Ρ‚Π° ΠΎΡ‚ TON ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…Π° Ρ‚Ρ€ΠΈ Π½ΠΎΠ²ΠΈ Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅:

ΠΏΠ΅Ρ‚Π° Π΅ унивСрсалСн стСков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ наподобява Π½Π°ΠΏΡ€Π΅Π΄. НСговата супСр способност Π΅ способността Π΄Π° взаимодСйства с TVM.

FunC Π΅ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° C ΠΈ Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π½Π° Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ - Fift Assembler.

ΠŸΠ΅Ρ‚ΠΈ асСмблСр β€” Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Fift Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π²ΠΎΠΈΡ‡Π΅Π½ изпълним ΠΊΠΎΠ΄ Π·Π° TVM. Fifth Assembler няма ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€. Π’ΠΎΠ²Π° Π’Π³Ρ€Π°Π΄Π΅Π½ спСцифичСн Π·Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π΅Π·ΠΈΠΊ (eDSL).

ΠΠ°ΡˆΠ°Ρ‚Π° конкурСнция Ρ€Π°Π±ΠΎΡ‚ΠΈ

Най-накрая Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ усилия.

АсинхронСн ΠΊΠ°Π½Π°Π» Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅

ΠšΠ°Π½Π°Π»ΡŠΡ‚ Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅ Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π° Π΄Π²Π°ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ плащания извън Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° спСстяватС Π½Π΅ само ΠΏΠ°Ρ€ΠΈ (няма комисионна), Π½ΠΎ ΠΈ Π²Ρ€Π΅ΠΌΠ΅ (Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Ρ‡Π°ΠΊΠ°Ρ‚Π΅ слСдващия Π±Π»ΠΎΠΊ Π΄Π° бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½). ΠŸΠ»Π°Ρ‰Π°Π½ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅, ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° чСсто, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’ Ρ‚ΠΎΠ·ΠΈ случай странитС Π½Π΅ трябва Π΄Π° сС довСряват Π΅Π΄Π½Π° Π½Π° Π΄Ρ€ΡƒΠ³Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ чСстността Π½Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎΡ‚ΠΎ споразумСниС Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° ΠΎΡ‚ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

НамСрихмС доста просто Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π”Π²Π΅ страни ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° обмСнят подписани ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, всяко ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²Π΅ числа β€” ΠΏΡŠΠ»Π½Π°Ρ‚Π° сума, ΠΏΠ»Π°Ρ‚Π΅Π½Π° ΠΎΡ‚ всяка страна. Π’Π΅Π·ΠΈ Π΄Π²Π΅ числа работят ΠΊΠ°Ρ‚ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅Π½ часовник Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ систСми ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ Ρ€Π΅Π΄Π° β€žΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎ сС ΠΏΡ€Π΅Π΄ΠΈβ€œ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Използвайки Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ всСки възмоТСн ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅Π΄ΠΈΠ½ Π½ΠΎΠΌΠ΅Ρ€ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ идСя, Π½ΠΎ Π½ΠΈΠ΅ оставихмС ΠΈ Π΄Π²Π°Ρ‚Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π΅Π½ потрСбитСлски интСрфСйс. ОсвСн Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ сумата Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ във всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π‘Π΅Π· Π½Π΅Π³ΠΎ, Π°ΠΊΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС Π·Π°Π³ΡƒΠ±ΠΈ ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, Ρ‚ΠΎΠ³Π°Π²Π°, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ всички суми ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎΡ‚ΠΎ изчислСниС Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ, потрСбитСлят ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π·Π°Π³ΡƒΠ±Π°Ρ‚Π°.

Π—Π° Π΄Π° тСствамС Π½Π°ΡˆΠ°Ρ‚Π° идСя, ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ‚Π°ΠΊΡŠΠ² прост ΠΈ ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅Π½ ΠΊΠ°Π½Π°Π». Π˜Π·Π½Π΅Π½Π°Π΄Π²Π°Ρ‰ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅ само Π΄Π²Π΅:

  1. описаниС ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, само Π·Π° случая Π½Π° СднопосочСн ΠΊΠ°Π½Π°Π».
  2. Π£Ρ€ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ описва ΡΡŠΡ‰Π°Ρ‚Π° идСя ΠΊΠ°Ρ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π°, Π½ΠΎ Π±Π΅Π· Π΄Π° обяснява ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΈ подробности, ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ‰Π° корСктност ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ.

Π‘Ρ‚Π°Π½Π° ясно, Ρ‡Π΅ ΠΈΠΌΠ° смисъл Π΄Π° опишСм ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ нашия ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΡŠΡ€Π½Π΅ΠΌ спСциално Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° корСктност. Π‘Π»Π΅Π΄ няколко ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ спСцификацията бСшС Π³ΠΎΡ‚ΠΎΠ²Π° ΠΈ сСга ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ Π²ΠΈΠ΅. ПоглСдни я.

Π˜Π·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° във FunC ΠΈ написахмС ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Ρ€Π΅Π΄ Π·Π° взаимодСйствиС с нашия Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ изцяло във Fift, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π½ΠΎ ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅. ΠœΠΎΠΆΠ΅Ρ…ΠΌΠ΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ всСки Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ Π·Π° нашия CLI, Π½ΠΎ Π½ΠΈ бСшС интСрСсно Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Fit, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ сС прСдставя Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

ЧСстно ΠΊΠ°Π·Π°Π½ΠΎ, слСд ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ…ΠΌΠ΅ с Fift, Π½Π΅ видяхмС ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Ρ‚Π΅ΠΌ Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ ΠΏΡ€Π΅Π΄ популярнитС ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ инструмСнти ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π·ΠΈΠΊ, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° стСк, Π΅ доста нСприятно, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ трябва постоянно Π΄Π° Π΄ΡŠΡ€ΠΆΠΈΡ‚Π΅ Π² Π³Π»Π°Π²Π°Ρ‚Π° си ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π² стСка, Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ ΠΏΠΎΠΌΠ°Π³Π° с Ρ‚ΠΎΠ²Π°.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΏΠΎ нашС ΠΌΠ½Π΅Π½ΠΈΠ΅, СдинствСното ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΈΠ΅ Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Fift Π΅ ролята ΠΌΡƒ Π½Π° хост Π΅Π·ΠΈΠΊ Π·Π° Fift Assembler. Но Π½Π΅ Π±ΠΈ Π»ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π²Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ TVM асСмблСра Π² някой ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ Π΅Π·ΠΈΠΊ, вмСсто Π΄Π° измислятС Π½ΠΎΠ² Π·Π° Ρ‚Π°Π·ΠΈ ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ СдинствСна Ρ†Π΅Π»?

TVM Haskell eDSL

Π‘Π΅Π³Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° нашия Π²Ρ‚ΠΎΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» с мноТСство подписи, Π½ΠΎ писанСто Π½Π° Π΄Ρ€ΡƒΠ³ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ във FunC Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ‚Π²ΡŠΡ€Π΄Π΅ скучно. Π˜ΡΠΊΠ°Ρ…ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ вкус ΠΈ Ρ‚ΠΎΠ²Π° бСшС Π½Π°ΡˆΠΈΡΡ‚ собствСн Π΅Π·ΠΈΠΊ Π·Π° асСмблиранС Π·Π° TVM.

Подобно Π½Π° Fift Assembler, Π½Π°ΡˆΠΈΡΡ‚ Π½ΠΎΠ² Π΅Π·ΠΈΠΊ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½, Π½ΠΎ Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ Haskell ΠΊΠ°Ρ‚ΠΎ хост вмСсто Fift, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ позволява Π΄Π° сС възползвамС напълно ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½Π° систСма ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ†Π΅Π½Π°Ρ‚Π° Π΄ΠΎΡ€ΠΈ Π½Π° ΠΌΠ°Π»ΠΊΠ° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΌΠ½ΠΎΠ³ΠΎ висока, статичното въвСТданС спорСд нас Π΅ голямо прСдимство.

Π—Π° Π΄Π° дСмонстрирамС ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° TVM Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ€ΡŠΡ‚, Π²Π³Ρ€Π°Π΄Π΅Π½ Π² Haskell, Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ стандартСн ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ. Π•Ρ‚ΠΎ няколко Π½Π΅Ρ‰Π°, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

  • Π’ΠΎΠ·ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΅Π΄Π½Π° функция, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΎΠ²Π° функция Π½Π° хост Π΅Π·ΠΈΠΊΠ° (Ρ‚.Π΅. Haskell), Π½Π°ΡˆΠΈΡΡ‚ eDSL Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ искатС тя Π΄Π° станС ΠΎΡ‚Π΄Π΅Π»Π½Π° Ρ€ΡƒΡ‚ΠΈΠ½Π° Π² TVM ΠΈΠ»ΠΈ просто Π΄Π° бъдС Π²Π³Ρ€Π°Π΄Π΅Π½Π° Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅.
  • Подобно Π½Π° Haskell, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΈΠΌΠ°Ρ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС провСряват ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅. Π’ нашия eDSL Ρ‚ΠΈΠΏΡŠΡ‚ Π²Ρ…ΠΎΠ΄ Π½Π° функция Π΅ Ρ‚ΠΈΠΏΡŠΡ‚ стСк, ΠΊΠΎΠΉΡ‚ΠΎ функцията ΠΎΡ‡Π°ΠΊΠ²Π°, Π° Ρ‚ΠΈΠΏΡŠΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π΅ Ρ‚ΠΈΠΏΡŠΡ‚ стСк, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ слСд ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ.
  • ΠšΠΎΠ΄ΡŠΡ‚ ΠΈΠΌΠ° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ stacktype, описващ очаквания Ρ‚ΠΈΠΏ стСк Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅. Π’ оригиналния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π·Π° ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ»Π° Ρ‚ΠΎΠ²Π° бяха само ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ, Π½ΠΎ Π² нашия eDSL Ρ‚Π΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ са част ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΈ сС провСряват ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° слуТат ΠΊΠ°Ρ‚ΠΎ докумСнтация ΠΈΠ»ΠΈ изявлСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π°ΠΊΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚ΠΈΠΏΡŠΡ‚ стСк сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚Π°ΠΊΠΈΠ²Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Π²Π°Ρ‚ влияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° тях Π½Π΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° TVM ΠΊΠΎΠ΄.
  • Π’ΠΎΠ²Π° всС ΠΎΡ‰Π΅ Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, написан Π·Π° Π΄Π²Π΅ сСдмици, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠΌΠ° ΠΎΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° Π²ΡŠΡ€ΡˆΠ΅Π½Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НапримСр, всички СкзСмпляри Π½Π° класовСтС, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ Π² ΠΊΠΎΠ΄Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, трябва Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° внСдряванСто Π½Π° multisig ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» Π½Π° нашия eDSL:

main :: IO ()
main = putText $ pretty $ declProgram procedures methods
  where
    procedures =
      [ ("recv_external", decl recvExternal)
      , ("recv_internal", decl recvInternal)
      ]
    methods =
      [ ("seqno", declMethod getSeqno)
      ]

data Storage = Storage
  { sCnt :: Word32
  , sPubKey :: PublicKey
  }

instance DecodeSlice Storage where
  type DecodeSliceFields Storage = [PublicKey, Word32]
  decodeFromSliceImpl = do
    decodeFromSliceImpl @Word32
    decodeFromSliceImpl @PublicKey

instance EncodeBuilder Storage where
  encodeToBuilder = do
    encodeToBuilder @Word32
    encodeToBuilder @PublicKey

data WalletError
  = SeqNoMismatch
  | SignatureMismatch
  deriving (Eq, Ord, Show, Generic)

instance Exception WalletError

instance Enum WalletError where
  toEnum 33 = SeqNoMismatch
  toEnum 34 = SignatureMismatch
  toEnum _ = error "Uknown MultiSigError id"

  fromEnum SeqNoMismatch = 33
  fromEnum SignatureMismatch = 34

recvInternal :: '[Slice] :-> '[]
recvInternal = drop

recvExternal :: '[Slice] :-> '[]
recvExternal = do
  decodeFromSlice @Signature
  dup
  preloadFromSlice @Word32
  stacktype @[Word32, Slice, Signature]
  -- cnt cs sign

  pushRoot
  decodeFromCell @Storage
  stacktype @[PublicKey, Word32, Word32, Slice, Signature]
  -- pk cnt' cnt cs sign

  xcpu @1 @2
  stacktype @[Word32, Word32, PublicKey, Word32, Slice, Signature]
  -- cnt cnt' pk cnt cs sign

  equalInt >> throwIfNot SeqNoMismatch

  push @2
  sliceHash
  stacktype @[Hash Slice, PublicKey, Word32, Slice, Signature]
  -- hash pk cnt cs sign

  xc2pu @0 @4 @4
  stacktype @[PublicKey, Signature, Hash Slice, Word32, Slice, PublicKey]
  -- pubk sign hash cnt cs pubk

  chkSignU
  stacktype @[Bool, Word32, Slice, PublicKey]
  -- ? cnt cs pubk

  throwIfNot SignatureMismatch
  accept

  swap
  decodeFromSlice @Word32
  nip

  dup
  srefs @Word8

  pushInt 0
  if IsEq
  then ignore
  else do
    decodeFromSlice @Word8
    decodeFromSlice @(Cell MessageObject)
    stacktype @[Slice, Cell MessageObject, Word8, Word32, PublicKey]
    xchg @2
    sendRawMsg
    stacktype @[Slice, Word32, PublicKey]

  endS
  inc

  encodeToCell @Storage
  popRoot

getSeqno :: '[] :-> '[Word32]
getSeqno = do
  pushRoot
  cToS
  preloadFromSlice @Word32

ΠŸΡŠΠ»Π½ΠΈΡΡ‚ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° нашия eDSL ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π·Π° ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» с мноТСство подписи ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π½Π° Ρ‚ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. И ΠΎΡ‰Π΅ Ρ€Π°Π·ΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ, Π½Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ»Π΅Π³Π° Π“Π΅ΠΎΡ€Π³ΠΈΠΉ Агапов.

Изводи Π·Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ TON

ΠžΠ±Ρ‰ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½ΠΈ ΠΎΡ‚Π½Π΅ 380 часа (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ с докумСнтация, срСщи ΠΈ Ρ€Π΅Π°Π»Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅). ΠŸΠ΅Ρ‚ΠΈΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π²Π·Π΅Ρ…Π° участиС Π² ΡΡŠΡΡ‚Π΅Π·Π°Ρ‚Π΅Π»Π½ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: тСхничСски Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€, Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π» Π½Π° Π΅ΠΊΠΈΠΏΠ°, спСциалисти ΠΏΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° софтуСр Haskell.

НамСрихмС рСсурси Π·Π° участиС Π² ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π±Π΅Π· затруднСния, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΄ΡƒΡ…ΡŠΡ‚ Π½Π° Ρ…Π°ΠΊΠ°Ρ‚ΠΎΠ½Π°, тясната Ρ€Π°Π±ΠΎΡ‚Π° Π² Π΅ΠΊΠΈΠΏ ΠΈ нСобходимостта Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС ΠΏΠΎΡ‚ΠΎΠΏΠΈΠΌ Π² аспСкти Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²ΠΈΠ½Π°Π³ΠΈ са Π²ΡŠΠ»Π½ΡƒΠ²Π°Ρ‰ΠΈ. Няколко бСзсънни Π½ΠΎΡ‰ΠΈ Π·Π° постиганС Π½Π° максимални Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π² условия Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ рСсурси сС компСнсират с Π±Π΅Π·Ρ†Π΅Π½Π΅Π½ ΠΎΠΏΠΈΡ‚ ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈ спомСни. Π’ допълнСниС, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π΄ΠΎΠ±ΡŠΡ€ тСст Π·Π° процСситС Π½Π° компанията, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС постигнат наистина ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π±Π΅Π· Π΄ΠΎΠ±Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Ρ‰ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ взаимодСйствиС.

ВСкстовСтС настрана: бяхмС Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈ ΠΎΡ‚ количСството Ρ€Π°Π±ΠΎΡ‚Π°, ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° ΠΎΡ‚ Π΅ΠΊΠΈΠΏΠ° Π½Π° TON. Π’Π΅ успяха Π΄Π° изградят слоТна, красива ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° систСма. TON сС Π΄ΠΎΠΊΠ°Π·Π° ΠΊΠ°Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° с голям ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π». Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ΅ Ρ‚Π°Π·ΠΈ СкосистСма, трябва Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΉ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° подобряванС Π½Π° инструмСнтитС Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π“ΠΎΡ€Π΄ΠΈ смС, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ смС част ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ процСс.

Ако слСд ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π·ΠΈ статия, всС ΠΎΡ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ TON Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ си, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½ΠΈ β€” Ρ‰Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌΠ΅ Π΄Π° сподСлим нашия ΠΎΠΏΠΈΡ‚.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€