рд╣рд╛рд╕реНрдХреЗрд▓рдХреЛ рд╕рд╛рде FunC рд▓рд╛рдИ FunCtional рдорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрджреИ: рдХрд╕рд░реА рд╕реЗрд░реЛрдХреЗрд▓рд▓реЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреНрд▓рдХрдЪреЗрди рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЬрд┐рддреНрдпреЛ

рддрдкрд╛рдИрдВрд▓реЗ рд╕рд╛рдпрдж рддреНрдпреЛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рд╕реБрдиреНрдиреБ рднрдПрдХреЛ рдЫ рдЯрди рдмреНрд▓рдХрдЪреЗрди рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╕реБрд░реБ рдЧрд░реНрди рд▓рд╛рдЧрд┐рд░рд╣реЗрдХреЛ рдЫред рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордХреЛ рдзреЗрд░реИ рдЕрдШрд┐рдХреЛ рд╕рдорд╛рдЪрд╛рд░ рдпрд╛рдж рдЧрд░реНрдиреБрднрдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдШреЛрд╖рдгрд╛ рдЧрд░реЗ рдпрд╕ рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╡рд╛ рдмрдвреА рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ред

рд╕реЗрд░реЛрдХреЗрд▓ рдЯреЛрд▓реА, рдареВрд▓рд╛ рдмреНрд▓рдХрдЪреЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреЗ рдмреГрд╣рддреН рдЕрдиреБрднрд╡рдХреЛ рд╕рд╛рде, рдЕрд▓рдЧ рд░рд╣рди рд╕рдХреЗрдиред рд╣рд╛рдореАрд▓реЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдорд╛ рдкрд╛рдБрдЪ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдЧрд░реНрдпреМрдВ, рд░ рджреБрдИ рд╣рдкреНрддрд╛ рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ (рдЗрди) рдорд╛рдореВрд▓реА рдЕрдирд┐рдпрдорд┐рдд рдЙрдкрдирд╛рдо рд╕реЗрдХреНрд╕реА рдЧрд┐рд░рдЧрд┐рдЯ рдЕрдиреНрддрд░реНрдЧрдд рдкрд╣рд┐рд▓реЛ рд╕реНрдерд╛рди рд▓рд┐рдПред рдпрд╕ рд▓реЗрдЦрдорд╛ рдо рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдХрд╕рд░реА рдЧрд░реЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБред рд╣рд╛рдореА рдЖрд╢рд╛ рдЧрд░реНрдЫреМрдВ рдХрд┐ рдЕрд░реНрдХреЛ рджрд╕ рдорд┐рдиреЗрдЯрдорд╛ рддрдкрд╛рдИрд▓реЗ рдХрдореНрддрд┐рдорд╛ рдПрдЙрдЯрд╛ рд░реЛрдЪрдХ рдХрдерд╛ рдкрдвреНрдиреБрд╣реБрдиреЗрдЫ, рд░ рддрдкрд╛рдИрд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдордорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рдХреЗрд╣рд┐ рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫред

рддрд░ рдереЛрд░реИ рд╕рдиреНрджрд░реНрднрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реМрдВред

рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рд░ рдпрд╕рдХреЛ рд╕рд░реНрддрд╣рд░реВ

рддреНрдпрд╕реЛрднрдП, рд╕рд╣рднрд╛рдЧреАрд╣рд░реВрдХреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╣рд░реВ рдПрдХ рд╡рд╛ рдмрдвреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╕рд╛рдереИ TON рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдкреНрд░рд╕реНрддрд╛рд╡рд╣рд░реВ рдмрдирд╛рдЙрдиреБ рдерд┐рдпреЛред рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реЗрдкреНрдЯреЗрдореНрдмрд░ 24 рджреЗрдЦрд┐ рдЕрдХреНрдЯреЛрдмрд░ 15 рд╕рдореНрдо рдЪрд▓реЗрдХреЛ рдерд┐рдпреЛ рд░ рдирддрд┐рдЬрд╛ рдиреЛрднреЗрдореНрдмрд░ 15 рдорд╛ рдорд╛рддреНрд░ рдШреЛрд╖рдгрд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрджреЗрдЦрд┐, рдпрд╕ рд╕рдордпрдорд╛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдорд▓реЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордорд╛ VoIP рдХрд▓рд╣рд░реВрдХреЛ рдЧреБрдгрд╕реНрддрд░ рдкрд░реАрдХреНрд╖рдг рд░ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ C++ рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдбрд┐рдЬрд╛рдЗрди рд░ рд╡рд┐рдХрд╛рд╕рдорд╛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рдХреЛ рдирддрд┐рдЬрд╛рд╣рд░реВ рд░рд╛рдЦреНрди рд░ рдШреЛрд╖рдгрд╛ рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдпреЛред

рд╣рд╛рдореАрд▓реЗ рдЖрдпреЛрдЬрдХрд╣рд░реВрд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реЗрдХреЛ рд╕реВрдЪреАрдмрд╛рдЯ рджреБрдИрд╡рдЯрд╛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрд╣рд░реВ рдЪрдпрди рдЧрд░реЗрдХрд╛ рдЫреМрдВред рддреА рдордзреНрдпреЗ рдПрдЙрдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ TON рдорд╛рд░реНрдлрдд рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНтАНрдпреМрдВ, рд░ рджреЛрд╕реНрд░реЛрд▓рд╛рдИ рд╣рд╛рдореНрд░рд╛ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реВрд▓реЗ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА TON рдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд╛рд╕ рдЧрд░реЗрдХреЛ рд░ Haskell рдорд╛ рдирд┐рд░реНрдорд┐рдд рдирдпрд╛рдБ рднрд╛рд╖рд╛рдорд╛ рд▓рд╛рдЧреВ рдЧрд░рд┐рдпреЛред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдХреЛ рдЫрдиреЛрдЯ рдЖрдХрд╕реНрдорд┐рдХ рд╣реЛрдЗрдиред рд╣рд╛рдореНрд░реЛ рдорд╛ рдХрд░реНрдкреЛрд░реЗрдЯ рдмреНрд▓рдЧ рд╣рд╛рдореА рдкреНрд░рд╛рдп: рд╣рд╛рдореА рдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рд╣рд░реВрдХреЛ рдЬрдЯрд┐рд▓рддрд╛ рдПрдХ рдареВрд▓реЛ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рд╣реЛ рд░ рдХрд┐рди рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджрд┐рдиреНрдЫреМрдВ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдЫреМрдВред рдЦреИрд░, рдпрд╕рдорд╛ рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫ рдпрд╕ рд▓реЗрдЦ рдХреЛ рдореВрд▓.

рд╣рд╛рдореАрд▓реЗ рдХрд┐рди рднрд╛рдЧ рд▓рд┐рдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ?

рдЫреЛрдЯрдХрд░реАрдорд╛, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореНрд░реЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЧреИрд░-рдорд╛рдирдХ рд░ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд╣реБрдиреН рдЬрд╕рд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рд╕реАрдкрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ рд░ рдкреНрд░рд╛рдпрдГ IT рд╕рдореБрджрд╛рдпрдХреЛ рд▓рд╛рдЧрд┐ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдореВрд▓реНрдпрдХреЛ рд╣реБрдиреНрдЫред рд╣рд╛рдореА рдЦреБрд▓реНрд▓рд╛ рд╕реНрд░реЛрдд рд╡рд┐рдХрд╛рд╕рд▓рд╛рдИ рджреГрдврддрд╛рдкреВрд░реНрд╡рдХ рд╕рдорд░реНрдерди рдЧрд░реНрдЫреМрдВ рд░ рдпрд╕рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛рдорд╛ рд╕рдВрд▓рдЧреНрди рдЫреМрдВ, рд░ рдХрдореНрдкреНрдпреБрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рд░ рдЧрдгрд┐рддрдХреЛ рдХреНрд╖реЗрддреНрд░рдорд╛ рдЕрдЧреНрд░рдгреА рд░реВрд╕реА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдпрд╣рд░реВрд╕рдБрдЧ рдкрдирд┐ рд╕рд╣рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред

рд╣рд╛рдореНрд░реЛ рдкреНрд░рд┐рдп рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рд░ рд╕рдВрд▓рдЧреНрдирддрд╛рдХреЛ рд░реЛрдЪрдХ рдХрд╛рд░реНрдпрд╣рд░реВ рдЖрдлреИрдВрдорд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░реЗрд░рдгрд╛ рдерд┐рдП, рддрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рдХреЛрд╖ рдердк рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рднрдпреЛред ЁЯЩВ

TON blockchain рдЕрдиреБрд╕рдиреНрдзрд╛рди

рд╣рд╛рдореА рдмреНрд▓рдХрдЪреЗрди, рдЖрд░реНрдЯрд┐рдлрд┐рд╕рд┐рдпрд▓ рдЗрдиреНрдЯреЗрд▓рд┐рдЬреЗрдиреНрд╕ рд░ рдореЗрд╕рд┐рди рд▓рд░реНрдирд┐рдЩрдорд╛ рднрдПрдХрд╛ рдирдпрд╛рдБ рд╡рд┐рдХрд╛рд╕рд╣рд░реВ рдирдЬрд┐рдХрдмрд╛рдЯ рдЕрдиреБрдЧрдорди рдЧрд░реНрдЫреМрдВ рд░ рд╣рд╛рдореАрд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░рдорд╛ рдПрдЙрдЯрд╛ рдкрдирд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░рд┐рд▓реАрдЬ рдирдЫреБрдЯрд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВред рддрд╕рд░реНрде, рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реБрд░реБ рд╣реБрдБрджрд╛рд╕рдореНрдо, рд╣рд╛рдореНрд░реЛ рдЯреЛрд▓реАрдХрд╛ рд╡рд┐рдЪрд╛рд░рд╣рд░реВрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрд░рд┐рдЪрд┐рдд рдерд┐рдпреЛ TON рд╕реЗрддреЛ рдХрд╛рдЧрдЬред рдпрджреНрдпрдкрд┐, TON рд╕рдБрдЧ рдХрд╛рдо рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рд░ рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд░реЛрдд рдХреЛрдбрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реЗрдиреМрдВ, рддреНрдпрд╕реИрд▓реЗ рдкрд╣рд┐рд▓реЛ рдЪрд░рдг рдПрдХрджрдо рд╕реНрдкрд╖реНрдЯ рдерд┐рдпреЛ - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддреГрдд рдЕрдзреНрдпрдпрдиред рд╕рд╛рдЗрдЯ рд░ рднрд┐рддреНрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдгреНрдбрд╛рд░рд╣рд░реВ.

рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реБрд░реБ рд╣реБрдБрджрд╛рд╕рдореНрдо, рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рднрдЗрд╕рдХреЗрдХреЛ рдерд┐рдпреЛ, рддреНрдпрд╕реИрд▓реЗ рд╕рдордп рдмрдЪрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд▓реЗрдЦрд┐рдПрдХреЛ рдЧрд╛рдЗрдб рд╡рд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЦреЛрдЬреНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреЛред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдпрд╕рд▓реЗ рдХреБрдиреИ рдирддрд┐рдЬрд╛ рджрд┐рди рд╕рдХреЗрди - Ubuntu рдорд╛ рдкреНрд▓реЗрдЯрдлрд░реНрдо рдЬрдореНрдорд╛ рдЧрд░реНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдмрд╛рд╣реЗрдХ, рд╣рд╛рдореАрд▓реЗ рдХреБрдиреИ рдЕрдиреНрдп рд╕рд╛рдордЧреНрд░реА рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдиреМрдВред

рдХрд╛рдЧрдЬрд╛рдд рдЖрдлреИрдорд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдЕрдиреБрд╕рдиреНрдзрд╛рди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддрд░ рдХреЗрд╣реА рдХреНрд╖реЗрддреНрд░рдорд╛ рдкрдвреНрди рдЧрд╛рд╣реНрд░реЛ рдерд┐рдпреЛред рдкреНрд░рд╛рдпрдГ рд╣рд╛рдореАрд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдиреНрджреБрд╣рд░реВрдорд╛ рдлрд░реНрдХрдиреБ рдкрд░реНрдереНрдпреЛ рд░ рдЕрдореВрд░реНрдд рд╡рд┐рдЪрд╛рд░рд╣рд░реВрдХреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдмрд╛рдЯ рдирд┐рдореНрди-рд╕реНрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрдкрд░реНрдереНрдпреЛред

рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдирд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд╕рдорд╛рд╡реЗрд╢ рдирдЧрд░реЗрдХреЛ рднрдП рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреЗ рдерд┐рдпреЛред рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд▓реЗ рдХрд╕рд░реА рдпрд╕рдХреЛ рд╕реНрдЯреНрдпрд╛рдХрд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реАрд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрдиреБ рднрдиреНрджрд╛ TON рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реБрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдмрдвреА рд╣реБрдиреНрдЫред

рдирд┐рдХреНрд╕: рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдБрдЧреИ рд░рд╛рдЦреНрджреИ

Serokell рдорд╛ рд╣рд╛рдореА рдареВрд▓рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реМрдВ рдирд┐рдХреНрд╕ред рд╣рд╛рдореА рдпрд╕рдХреЛ рд╕рд╛рде рд╣рд╛рдореНрд░рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдЫреМрдВ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддреИрдирд╛рдд рдЧрд░реНрдЫреМрдВ NixOps, рд░ рд╣рд╛рдореНрд░рд╛ рд╕рдмреИ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рд╕реНрдерд╛рдкрд┐рдд рдирд┐рдХреНрд╕ рдУрдПрд╕ред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рдореНрд░рд╛ рд╕рдмреИ рдирд┐рд░реНрдорд╛рдгрд╣рд░реВ рдкреБрди: рдЙрддреНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЫрдиреН рд░ рдХреБрдиреИ рдкрдирд┐ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ рдЬрд╕рдорд╛ 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

рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рддрдкрд╛рдИрдВ NixOS, Ubuntu, рд╡рд╛ macOS рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ, Nix рд▓реЗ рдЬрд╛рджреБрдИ рд░реВрдкрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫред

TON рдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ

TON рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЛрдб TON рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди (TVM) рдорд╛ рдЪрд▓реНрдЫред TVM рдзреЗрд░реИ рдЕрдиреНрдп рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рднрдиреНрджрд╛ рдмрдвреА рдЬрдЯрд┐рд▓ рдЫ, рд░ рдзреЗрд░реИ рд░реЛрдЪрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫред рдирд┐рд░рдиреНрддрд░рддрд╛ ╨╕ рдбрд╛рдЯрд╛ рд▓рд┐рдЩреНрдХрд╣рд░реВ.

рдпрд╕рдмрд╛рд╣реЗрдХ, TON рдХрд╛ рдХреЗрдЯрд╛рд╣рд░реВрд▓реЗ рддреАрди рдирдпрд╛рдБ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗ:

рдкрд╛рдБрдЪ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реНрдЯреНрдпрд╛рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд╣реЛ рдЬреБрди рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдЫ рдЕрдЧрд╛рдбрд┐ред рдЙрдирдХреЛ рд╕реБрдкрд░ рдХреНрд╖рдорддрд╛ TVM рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╣реЛред

FunC рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд╣реЛ рдЬреБрди рд╕рдорд╛рди рдЫ C рд░ рдЕрд░реНрдХреЛ рднрд╛рд╖рд╛рдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫ - рдлрд┐рдлреНрдЯ рдПрд╕реЗрдореНрдмрд▓рд░ред

рдкрд╛рдБрдЪреМрдВ рдПрд╕реЗрдореНрдмрд▓рд░ - TVM рдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рдЗрдирд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп рдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рдБрдЪ рдкреБрд╕реНрддрдХрд╛рд▓рдпред рдкрд╛рдБрдЪреМрдВ рдПрд╕реЗрдореНрдмрд▓рд░рд╕рдБрдЧ рдХрдореНрдкрд╛рдЗрд▓рд░ рдЫреИрдиред рдпреЛ рдЗрдореНрдмреЗрдбреЗрдб рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ (eDSL).

рд╣рд╛рдореНрд░реЛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫ

рдЕрдиреНрддрдорд╛, рд╣рд╛рдореНрд░реЛ рдкреНрд░рдпрд╛рд╕рдХреЛ рдирддрд┐рдЬрд╛ рд╣реЗрд░реНрдиреЗ рд╕рдордп рд╣реЛред

рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рднреБрдХреНрддрд╛рдиреА рдЪреНрдпрд╛рдирд▓

рднреБрдХреНрддрд╛рдиреА рдЪреНрдпрд╛рдирд▓ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛ рд╣реЛ рдЬрд╕рд▓реЗ рджреБрдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдмреНрд▓рдХрдЪреЗрди рдмрд╛рд╣рд┐рд░ рднреБрдХреНрддрд╛рдиреА рдкрдард╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдкреИрд╕рд╛ рдорд╛рддреНрд░ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ (рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдХрдореАрд╢рди рдЫреИрди), рддрд░ рд╕рдордп рдкрдирд┐ (рддрдкрд╛рдИрдВрд▓реЗ рдЕрд░реНрдХреЛ рдмреНрд▓рдХ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдкрд░реНрдЦрдиреБ рдкрд░реНрджреИрди)ред рднреБрдХреНрддрд╛рдиреА рд╡рд╛рдВрдЫрд┐рдд рд░реВрдкрдорд╛ рд╕рд╛рдиреЛ рд╣реБрди рд╕рдХреНрдЫ рд░ рдЬрддрд┐ рдкрдЯрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкрдХреНрд╖рд╣рд░реВрд▓реЗ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрджреИрди, рдХрд┐рдирдХрд┐ рдЕрдиреНрддрд┐рдо рд╕рдореНрдЭреМрддрд╛рдХреЛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрджреНрд╡рд╛рд░рд╛ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЧрд░рд┐рдПрдХреЛ рдЫред

рд╣рд╛рдореАрд▓реЗ рд╕рдорд╕реНрдпрд╛рдХреЛ рдПрдХрджрдо рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рднреЗрдЯреНрдЯрд╛рдпреМрдВред рджреБрдИ рдкрдХреНрд╖рд╣рд░реВрд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЖрджрд╛рдирдкреНрд░рджрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫрдиреН, рдкреНрд░рддреНрдпреЗрдХрдорд╛ рджреБрдИрд╡рдЯрд╛ рдирдореНрдмрд░рд╣рд░реВ рдЫрдиреНтАФрдкреНрд░рддреНрдпреЗрдХ рдкрдХреНрд╖рд▓реЗ рддрд┐рд░реЗрдХреЛ рдкреВрд░рд╛ рд░рдХрдоред рдпреА рджреБрдИ рдирдореНрдмрд░рд╣рд░реВ рдЬрд╕реНрддреИ рдХрд╛рдо рдЧрд░реНрдЫрдиреН рднреЗрдХреНрдЯрд░ рдШрдбреА рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ рд░ рд▓реЗрдирджреЗрдирдорд╛ "рдкрд╣рд┐рд▓реЗ рднрдПрдХреЛ" рдЕрд░реНрдбрд░ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рдбреЗрдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╕рдореНрдЭреМрддрд╛ рдХреБрдиреИ рдкрдирд┐ рд╕рдореНрднрд╛рд╡рд┐рдд рд╡рд┐рд╡рд╛рдж рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпреЛ рд╡рд┐рдЪрд╛рд░ рд▓рд╛рдЧреВ рдЧрд░реНрди рдПрдХ рдирдореНрдмрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЫ, рддрд░ рд╣рд╛рдореАрд▓реЗ рджреБрдмреИ рдЫреЛрдбреНрдпреМрдВ рдХрд┐рдирднрдиреЗ рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рд╣рд╛рдореАрд▓реЗ рдЕрдЭ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдмрдирд╛рдЙрди рд╕рдХреНрдЫреМрдВред рдердк рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдиреНрджреЗрд╢рдорд╛ рднреБрдХреНрддрд╛рдиреА рд░рдХрдо рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рдпреЛ рдмрд┐рдирд╛, рдпрджрд┐ рд╕рдиреНрджреЗрд╢ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ рд╣рд░рд╛рдПрдХреЛ рдЫ рднрдиреЗ, рдпрджреНрдпрдкрд┐, рд╕рдмреИ рд░рдХрдо рд░ рдЕрдиреНрддрд┐рдо рдЧрдгрдирд╛ рд╕рд╣реА рд╣реБрдиреЗрдЫ, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рд╣рд╛рдирд┐ рдпрд╛рдж рдирдЧрд░реНрди рд╕рдХреНрдЫред

рд╣рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рдпрд╕реНрддреЛ рд╕рд░рд▓ рд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рднреБрдХреНрддрд╛рдиреА рдЪреНрдпрд╛рдирд▓ рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЦреЛрдЬреНрдпреМрдВред рдЕрдЪрдореНрдордХреЛ рдХреБрд░рд╛, рд╣рд╛рдореАрд▓реЗ рдХреЗрд╡рд▓ рджреБрдИ рднреЗрдЯреНрдЯрд╛рдпреМрдВ:

  1. рд╡рд┐рд╡рд░рдг рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдХреЗрд╡рд▓ рдПрдХ рджрд┐рд╢рд╛рд╣реАрди рдЪреНрдпрд╛рдирд▓ рдХреЛ рдорд╛рдорд▓рд╛ рдХреЛ рд▓рд╛рдЧреАред
  2. рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЬрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдЬрд╕реНрддреИ рд╡рд┐рдЪрд╛рд░рд▓рд╛рдИ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫ, рддрд░ рд╕рд╛рдорд╛рдиреНрдп рд╢реБрджреНрдзрддрд╛ рд░ рджреНрд╡рдиреНрджреНрд╡ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЬрд╕реНрддрд╛ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдгрд╣рд░реВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирдЧрд░реАред

рдпреЛ рд╕реНрдкрд╖реНрдЯ рднрдпреЛ рдХрд┐ рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдкреНрд░реЛрдЯреЛрдХрд▓рд▓рд╛рдИ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрди рдЕрд░реНрдердкреВрд░реНрдг рдЫ, рдпрд╕рдХреЛ рд╢реБрджреНрдзрддрд╛рдорд╛ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдБрджреИред рдзреЗрд░реИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрдЫрд┐, рдирд┐рд░реНрджрд┐рд╖реНрдЯреАрдХрд░рдг рддрдпрд╛рд░ рдерд┐рдпреЛ, рд░ рдЕрдм рддрдкрд╛рдИрдВ рдкрдирд┐ рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЙрд╕рд▓рд╛рдИ рд╣реЗрд░.

рд╣рд╛рдореАрд▓реЗ FunC рдорд╛ рд╕рдореНрдЭреМрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНтАНрдпреМрдВ, рд░ рдЖрдпреЛрдЬрдХрд╣рд░реВрд▓реЗ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реЗ рдЕрдиреБрд╕рд╛рд░ рд╣рд╛рдореАрд▓реЗ Fift рдорд╛ рд╣рд╛рдореНрд░реЛ рд╕рдореНрдЭреМрддрд╛рд╕рдБрдЧ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдЖрджреЗрд╢ рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓реЗрдЦреНрдпреМрдВред рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ CLI рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдЕрдиреНрдп рднрд╛рд╖рд╛ рд░реЛрдЬреНрди рд╕рдХреНрдереНрдпреМрдВ, рддрд░ рд╣рд╛рдореАрд▓реЗ Fit рдХреЛ рдЕрднреНрдпрд╛рд╕рдорд╛ рдХрд╕рд░реА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдереНрдпреМрдВред

рдЗрдорд╛рдирджрд╛рд░реАрдкреВрд░реНрд╡рдХ рднрдиреНрдиреБрдкрд░реНрджрд╛, рдлрд┐рдлреНрдЯрд╕рдБрдЧ рдХрд╛рдо рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рд╡рд┐рдХрд╕рд┐рдд рдЙрдкрдХрд░рдгрд╣рд░реВ рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рд╕рд╛рде рд▓реЛрдХрдкреНрд░рд┐рдп рд░ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рднрд╛рд╖рд╛рд╣рд░реВрдорд╛ рдпреЛ рднрд╛рд╖рд╛рд▓рд╛рдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджрд┐рдиреЗ рдХреБрдиреИ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд╛рд░рдгрд╣рд░реВ рджреЗрдЦреЗрдиреМрдВред рд╕реНрдЯреНрдпрд╛рдХ-рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖рд╛рдорд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рдПрдХрджрдо рдЕрдкреНрд░рд┐рдп рдЫ, рдХрд┐рдирдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рдХреЗ рдЫ рднрдиреЗрд░ рдирд┐рд░рдиреНрддрд░ рдЖрдлреНрдиреЛ рдЯрд╛рдЙрдХреЛрдорд╛ рд░рд╛рдЦреНрдиреБрдкрд░реНрдЫ, рд░ рдХрдореНрдкрд╛рдЗрд▓рд░рд▓реЗ рдпрд╕рдорд╛ рдорджреНрджрдд рдЧрд░реНрджреИрдиред

рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рдлрд┐рдлреНрдЯрдХреЛ рдЕрд╕реНрддрд┐рддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдФрдЪрд┐рддреНрдп рднрдиреЗрдХреЛ рдлрд┐рдлреНрдЯ рдПрд╕реЗрдореНрдмрд▓рд░рдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛрд╕реНрдЯ рднрд╛рд╖рд╛рдХреЛ рд░реВрдкрдорд╛ рдпрд╕рдХреЛ рднреВрдорд┐рдХрд╛ рд╣реЛред рддрд░ рдпреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рдХреЗрд╣рд┐ рдЕрд╡рд╕реНрдерд┐рдд рднрд╛рд╖рд╛рдорд╛ TVM рдПрд╕реЗрдореНрдмрд▓рд░рд▓рд╛рдИ рдЗрдореНрдмреЗрдб рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдБрджреИрди?

TVM Haskell eDSL

рдЕрдм рдпреЛ рд╣рд╛рдореНрд░реЛ рджреЛрд╕реНрд░реЛ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛред рд╣рд╛рдореАрд▓реЗ рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗрдЯ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ, рддрд░ FunC рдорд╛ рдЕрд░реНрдХреЛ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛ рд▓реЗрдЦреНрдиреБ рдзреЗрд░реИ рдмреЛрд░рд┐рдВрдЧ рд╣реБрдиреЗрдЫред рд╣рд╛рдореА рдХреЗрд╣рд┐ рд╕реНрд╡рд╛рдж рдердкреНрди рдЪрд╛рд╣рдиреНрдереНрдпреМрдВ, рд░ рддреНрдпреЛ TVM рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рднрд╛рд╖рд╛ рдерд┐рдпреЛред

рдлрд┐рдлреНрдЯ рдПрд╕реЗрдореНрдмрд▓рд░ рдЬрд╕реНрддреИ, рд╣рд╛рдореНрд░реЛ рдирдпрд╛рдБ рднрд╛рд╖рд╛ рдЗрдореНрдмреЗрдбреЗрдб рдЫ, рддрд░ рд╣рд╛рдореАрд▓реЗ рдлрд┐рдлреНрдЯрдХреЛ рд╕рдЯреНрдЯрд╛ рд╣рд╛рд╕реНрдХреЗрд▓рд▓рд╛рдИ рд╣реЛрд╕реНрдЯрдХреЛ рд░реВрдкрдорд╛ рд░реЛрдЬреНрдпреМрдВ, рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╕рдХреЛ рдЙрдиреНрдирдд рдкреНрд░рдХрд╛рд░рдХреЛ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдкреВрд░реНрдг рдлрд╛рдЗрджрд╛ рд▓рд┐рди рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИред рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛, рдЬрд╣рд╛рдБ рд╕рд╛рдиреЛ рддреНрд░реБрдЯрд┐рдХреЛ рд▓рд╛рдЧрдд рдкрдирд┐ рдзреЗрд░реИ рдЙрдЪреНрдЪ рд╣реБрди рд╕рдХреНрдЫ, рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдЩ, рд╣рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рдареВрд▓реЛ рдлрд╛рдЗрджрд╛ рд╣реЛред

TVM рдПрд╕реЗрдореНрдмрд▓рд░ рд╣рд╕реНрдХреЗрд▓рдорд╛ рдЗрдореНрдмреЗрдб рдЧрд░рд┐рдПрдХреЛ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рднрдиреЗрд░ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рдпрд╕рдорд╛ рдПрдХ рдорд╛рдирдХ рд╡рд╛рд▓реЗрдЯ рд▓рд╛рдЧреВ рдЧрд░реНрдпреМрдВред рдпрд╣рд╛рдБ рдзреНрдпрд╛рди рджрд┐рди рдХреЗрд╣рд┐ рдЪреАрдЬрд╣рд░реВ рдЫрдиреН:

  • рдпреЛ рд╕рдореНрдЭреМрддрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рддрд░ рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рдордирдкрд░реНрдиреЗ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЬрдм рддрдкрд╛рдЗрдБ рд╣реЛрд╕реНрдЯ рднрд╛рд╖рд╛ (рдЬрд╕реНрддреИ Haskell) рдорд╛ рдирдпрд╛рдБ рдкреНрд░рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд╣рд╛рдореНрд░реЛ eDSL рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ TVM рдорд╛ рдЫреБрдЯреНрдЯреИ рджрд┐рдирдЪрд░реНрдпрд╛ рдмрдиреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рд╡рд╛ рдХрд▓рдХреЛ рдмрд┐рдиреНрджреБрдорд╛ рдорд╛рддреНрд░ рдЗрдирд▓рд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреА рдЫрдиреЛрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
  • Haskell рдЬрд╕реНрддреИ, рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдЫрдиреН рдЬреБрди рдХрдореНрдкрд╛рдЗрд▓ рд╕рдордпрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдиреНрдЫред рд╣рд╛рдореНрд░реЛ eDSL рдорд╛, рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реЗрдХреЛ рд╕реНрдЯреНрдпрд╛рдХрдХреЛ рдкреНрд░рдХрд╛рд░ рд╣реЛ, рд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рдХрд▓ рдкрдЫрд┐ рдЙрддреНрдкрд╛рджрди рд╣реБрдиреЗ рд╕реНрдЯреНрдпрд╛рдХрдХреЛ рдкреНрд░рдХрд╛рд░ рд╣реЛред
  • рдХреЛрдбрдорд╛ рдПрдиреЛрдЯреЗрд╢рдирд╣рд░реВ рдЫрдиреН stacktype, рдХрд▓ рдкреЛрдЗрдиреНрдЯрдорд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдЯреНрдпрд╛рдХ рдкреНрд░рдХрд╛рд░рдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрджреИред рдореВрд▓ рд╡рд╛рд▓реЗрдЯ рд╕рдореНрдЭреМрддрд╛рдорд╛ рдпреА рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ рдерд┐рдП, рддрд░ рд╣рд╛рдореНрд░реЛ eDSL рдорд╛ рддрд┐рдиреАрд╣рд░реВ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЛрдбрдХреЛ рдЕрдВрд╢ рд╣реБрдиреН рд░ рдХрдореНрдкрд╛рдЗрд▓ рд╕рдордпрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдиреНрдЫред рддрд┐рдиреАрд╣рд░реВ рдХрд╛рдЧрдЬрд╛рдд рд╡рд╛ рдХрдердирд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╕реЗрд╡рд╛ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН рдЬрд╕рд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓рд╛рдИ рд╕рдорд╕реНрдпрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдорджреНрджрдд рдЧрд░реНрджрдЫ рдпрджрд┐ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫ рд░ рд╕реНрдЯреНрдпрд╛рдХ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рддреНрдпрд╕реНрддрд╛ рдПрдиреЛрдЯреЗрд╕рдирд╣рд░реВрд▓реЗ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рджрд░реНрд╢рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрди, рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ TVM рдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред
  • рдпреЛ рдЕрдЭреИ рджреБрдИ рд╣рдкреНрддрд╛рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдзреЗрд░реИ рдХрд╛рдо рдЧрд░реНрди рдмрд╛рдБрдХреА рдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рддрд▓рдХреЛ рдХреЛрдбрдорд╛ рджреЗрдЦреНрдиреБрд╣реБрдиреЗ рдХрдХреНрд╖рд╛рд╣рд░реВрдХрд╛ рд╕рдмреИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреБрдкрд░реНрдЫред

рдпреЛ рд╣рд╛рдореНрд░реЛ 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 рд░ рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗрдЯ рд╕рдореНрдЭреМрддрд╛рдХреЛ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ рдпреЛ рднрдгреНрдбрд╛рд░ред рд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрддрдорд╛ рдмрддрд╛рдП рдмрд┐рд▓реНрдЯ-рдЗрди рднрд╛рд╖рд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛, рд╣рд╛рдореНрд░рд╛ рд╕рд╣рдХрд░реНрдореА Georgy Agapovред

рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд░ TON рдмрд╛рд░реЗ рдирд┐рд╖реНрдХрд░реНрд╖

рдХреБрд▓рдорд╛, рд╣рд╛рдореНрд░реЛ рдХрд╛рдорд▓реЗ 380 рдШрдгреНрдЯрд╛ рд▓рд┐рдпреЛ (рдХрд╛рдЧрдЬрд╛рддреАрдХрд░рдг, рдмреИрдардХ рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд╛рд╕рдХреЛ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд)ред рдкрд╛рдБрдЪ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрднрд╛рдЧ рд▓рд┐рдП: CTO, рдЯреЛрд▓реА рдиреЗрддреГрддреНрд╡, рдмреНрд▓рдХрдЪреЗрди рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрд╣рд░реВ рд░ Haskell рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВред

рд╣реНрдпрд╛рдХрд╛рдердирдХреЛ рднрд╛рд╡рдирд╛, рдирдЬрд┐рдХрдХреЛ рдЯреЛрд▓реА рдХрд╛рд░реНрдп, рд░ рдирдпрд╛рдБ рдкреНрд░рд╡рд┐рдзрд┐рдХрд╛ рдкрдХреНрд╖рд╣рд░реВрдорд╛ рдЪрд╛рдБрдбреИ рдЖрдлреВрд▓рд╛рдИ рдбреБрдмрд╛рдЙрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рд▓реЗ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓реЗ рдХрдард┐рдирд╛рдЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдорд╛ рднрд╛рдЧ рд▓рд┐рди рд╕реНрд░реЛрддрд╣рд░реВ рднреЗрдЯреНрдЯрд╛рдпреМрдВред рд╕реАрдорд┐рдд рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЕрдзрд┐рдХрддрдо рдирддрд┐рдЬрд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдзреЗрд░реИ рдирд┐рджреНрд░рд╛ рдирд▓рд╛рдЧреЗрдХрд╛ рд░рд╛рддрд╣рд░реВ рдЕрдореВрд▓реНрдп рдЕрдиреБрднрд╡ рд░ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдореНрдЭрдирд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдЧрд░рд┐рдиреНрдЫред рдердк рд░реВрдкрдорд╛, рддреНрдпрд╕реНрддрд╛ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреБ рд╕рдзреИрдВ рдХрдореНрдкрдиреАрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд░рд╛рдореНрд░реЛ рдкрд░реАрдХреНрд╖рдг рд╣реЛ, рдХрд┐рдирдХрд┐ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдЖрдиреНрддрд░рд┐рдХ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдмрд┐рдирд╛ рд╕рд╛рдБрдЪреНрдЪреИ рд╕рднреНрдп рдирддрд┐рдЬрд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреНрдЫред

рдЧреАрддрд╣рд░реВ рдмрд╛рд╣реЗрдХ: рд╣рд╛рдореА TON рдЯреЛрд▓реА рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдХрд╛рдордХреЛ рдорд╛рддреНрд░рд╛рдмрд╛рдЯ рдкреНрд░рднрд╛рд╡рд┐рдд рднрдпреМрдВред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдПрдХ рдЬрдЯрд┐рд▓, рд╕реБрдиреНрджрд░, рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг, рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реЗред TON рд▓реЗ рдЖрдлреВрд▓рд╛рдИ рдареВрд▓реЛ рдХреНрд╖рдорддрд╛ рднрдПрдХреЛ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╕рд╛рдмрд┐рдд рдЧрд░реЗрдХреЛ рдЫред рдпрджреНрдпрдкрд┐, рдпрд╕ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордХреЛ рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐, рдмреНрд▓рдХрдЪреЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рд░ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдгрд╣рд░реВ рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреЗ рд╕рдиреНрджрд░реНрднрдорд╛ рдзреЗрд░реИ рдзреЗрд░реИ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╣рд╛рдореА рдЕрдм рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реБрди рдкрд╛рдЙрдБрджрд╛ рдЧрд░реНрд╡ рдЧрд░реНрдЫреМрдВред

рдпрджрд┐ рдпреЛ рд▓реЗрдЦ рдкрдврд┐рд╕рдХреЗрдкрдЫрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ рдЕрдЭреИ рдкрдирд┐ рдХреБрдиреИ рдкреНрд░рд╢реНрдирд╣рд░реВ рдЫрдиреН рд╡рд╛ рддрдкрд╛рдИрдВрдХрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди TON рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рдЫрдиреН рднрдиреЗ, рд╣рд╛рдореАрд▓рд╛рдИ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН - рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдЦреБрд╕реА рд╣реБрдиреЗрдЫреМрдВред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди