āĻšāĻžāϏāϕ⧇āϞ⧇āϰ āϏāĻžāĻĨ⧇ FunC āϕ⧇ Functional āĻ āĻĒāϰāĻŋāĻŖāϤ āĻ•āϰāĻž: āϏ⧇āϰ⧋āϕ⧇āϞ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŸā§‡āϞāĻŋāĻ—ā§āϰāĻžāĻŽ āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āϜāĻŋāϤ⧇āϛ⧇

āφāĻĒāύāĻŋ āϏāĻŽā§āĻ­āĻŦāϤ āϝ⧇ āĻŸā§‡āϞāĻŋāĻ—ā§āϰāĻžāĻŽ āĻļ⧁āύ⧇āϛ⧇āύ āϟāύ āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āϚāĻžāϞ⧁ āĻ•āϰāϤ⧇ āϚāϞ⧇āϛ⧇. āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŸā§‡āϞāĻŋāĻ—ā§āϰāĻžāĻŽā§‡āϰ āĻ–āĻŦāϰāϟāĻŋ āĻšāϝāĻŧāϤ⧋ āφāĻĒāύāĻŋ āĻŽāĻŋāϏ āĻ•āϰ⧇āϛ⧇āύ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰ⧇āϛ⧇ āĻāχ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āϜāĻ¨ā§āϝāĨ¤

āϏ⧇āϰ⧋āϕ⧇āϞ āĻĻāϞ, āĻŦ⧃āĻšā§Ž āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ āϤ⧈āϰāĻŋāϤ⧇ āĻŦā§āϝāĻžāĻĒāĻ• āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻžāϰ āϏāĻžāĻĨ⧇, āĻāĻ•āĻĒāĻžāĻļ⧇ āĻĻāĻžāρāĻĄāĻŧāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύāĻŋāĨ¤ āφāĻŽāϰāĻž āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϝāĻŧ āĻĒāĻžāρāϚāϜāύ āĻ•āĻ°ā§āĻŽāϚāĻžāϰ⧀āϕ⧇ āĻ…āĻ°ā§āĻĒāĻŖ āĻ•āϰ⧇āĻ›āĻŋ, āĻāĻŦāĻ‚ āĻĻ⧁āχ āϏāĻĒā§āϤāĻžāĻš āĻĒāϰ⧇ āϤāĻžāϰāĻž (āχāύ) āĻŦāĻŋāύāϝāĻŧā§€ āĻāϞ⧋āĻŽā§‡āϞ⧋ āĻĄāĻžāĻ•āύāĻžāĻŽ āϏ⧇āĻ•ā§āϏāĻŋ āĻ—āĻŋāϰāĻ—āĻŋāϟāĻŋāϰ āĻ…āϧ⧀āύ⧇ āĻĒā§āϰāĻĨāĻŽ āĻ¸ā§āĻĨāĻžāύ āĻ…āϧāĻŋāĻ•āĻžāϰ āĻ•āϰ⧇āϛ⧇āĨ¤ āĻāχ āĻĒā§āϰāĻŦāĻ¨ā§āϧ⧇ āφāĻŽāĻŋ āĻ•āĻĨāĻž āĻŦāϞāĻŦ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϤāĻžāϰāĻž āĻāϟāĻž āĻ•āϰ⧇āϛ⧇āĨ¤ āφāĻŽāϰāĻž āφāĻļāĻž āĻ•āϰāĻŋ āϝ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĻāĻļ āĻŽāĻŋāύāĻŋāĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āφāĻĒāύāĻŋ āĻ…āĻ¨ā§āϤāϤ āĻāĻ•āϟāĻŋ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āĻ—āĻ˛ā§āĻĒ āĻĒāĻĄāĻŧāĻŦ⧇āύ āĻāĻŦāĻ‚ āϏāĻ°ā§āĻŦāĻžāϧāĻŋāĻ• āφāĻĒāύāĻŋ āĻāϤ⧇ āĻĻāϰāĻ•āĻžāϰ⧀ āĻ•āĻŋāϛ⧁ āĻĒāĻžāĻŦ⧇āύ āϝāĻž āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ•āĻžāĻœā§‡ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϤāĻŦ⧇ āĻāĻ•āϟ⧁ āĻĒā§āϰāϏāĻ™ā§āĻ— āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•āĨ¤

āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻāĻŦāĻ‚ āϤāĻžāϰ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀

āϏ⧁āϤāϰāĻžāĻ‚, āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāĻŖāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒā§āϰāϧāĻžāύ āĻ•āĻžāϜāϗ⧁āϞāĻŋ āĻ›āĻŋāϞ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋāϰ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ, āϏ⧇āχāϏāĻžāĻĨ⧇ TON āχāϕ⧋āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āωāĻ¨ā§āύāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāĨ¤ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϟāĻŋ 24 āϏ⧇āĻĒā§āĻŸā§‡āĻŽā§āĻŦāϰ āĻĨ⧇āϕ⧇ 15 āĻ…āĻ•ā§āĻŸā§‹āĻŦāϰ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϚāϞ⧇ āĻāĻŦāĻ‚ āĻĢāϞāĻžāĻĢāϞ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ 15 āύāϭ⧇āĻŽā§āĻŦāϰ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻŦ⧇āĻļ āĻĻā§€āĻ°ā§āϘ āϏāĻŽāϝāĻŧ āϧāϰ⧇, āĻāχ āϏāĻŽāϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻŸā§‡āϞāĻŋāĻ—ā§āϰāĻžāĻŽ āĻŸā§‡āϞāĻŋāĻ—ā§āϰāĻžāĻŽā§‡ āĻ­āĻŋāĻ“āφāχāĻĒāĻŋ āĻ•āϞ⧇āϰ āϗ⧁āĻŖāĻŽāĻžāύ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāĻŦāĻ‚ āĻŽā§‚āĻ˛ā§āϝāĻžāϝāĻŧāύ⧇āϰ āϜāĻ¨ā§āϝ C++-āĻ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋāϰ āύāĻ•āĻļāĻž āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϰ āĻĢāϞāĻžāĻĢāϞāϗ⧁āϞāĻŋ āϧāϰ⧇ āϰāĻžāĻ–āϤ⧇ āĻāĻŦāĻ‚ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

āφāϝāĻŧā§‹āϜāĻ•āĻĻ⧇āϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āϤāĻžāϞāĻŋāĻ•āĻž āĻĨ⧇āϕ⧇ āφāĻŽāϰāĻž āĻĻ⧁āϟāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž TON-āĻāϰ āϏāĻžāĻĨ⧇ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāĻž āϏāϰāĻžā§āϜāĻžāĻŽāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āχāĻžā§āϜāĻŋāύāĻŋāϝāĻŧāĻžāϰāĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ TON-āĻāϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ­āĻžāώāĻžāϝāĻŧ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ Haskell-āĻ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ⧀ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻ āφāĻ•āĻ¸ā§āĻŽāĻŋāĻ• āύāϝāĻŧāĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāĻžāĻā§‡ āĻ•āĻ°ā§āĻĒā§‹āϰ⧇āϟ āĻŦā§āϞāĻ— āφāĻŽāϰāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻ•āĻĨāĻž āĻŦāϞāĻŋ āϕ⧇āύ āφāĻŽāϰāĻž āĻŽāύ⧇ āĻ•āϰāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ⧀ āĻ­āĻžāώāĻžāϰ āϜāϟāĻŋāϞāϤāĻž āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ āĻ…āϤāĻŋāϰāĻžā§āϜāύ āĻāĻŦāĻ‚ āϕ⧇āύ āφāĻŽāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻ“āϰāĻŋāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āĻĄāϗ⧁āϞāĻŋāϰ āĻĨ⧇āϕ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻŋāĨ¤ āωāĻĒāĻžāϝāĻŧ āĻĻā§āĻŦāĻžāϰāĻž, āĻāϟāĻŋ āϧāĻžāϰāĻŖ āĻ•āϰ⧇ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āĻŽā§‚āϞ.

āϕ⧇āύ āφāĻŽāϰāĻž āĻāĻŽāύāĻ•āĻŋ āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ?

āϏāĻ‚āĻ•ā§āώ⧇āĻĒ⧇, āĻ•āĻžāϰāĻŖ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻŋāĻļ⧇āώ⧀āĻ•āϰāĻŖ āĻšāϞ āĻ…-āĻŽāĻžāύāĻ• āĻāĻŦāĻ‚ āϜāϟāĻŋāϞ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϝāĻžāϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻļ⧇āώ āĻĻāĻ•ā§āώāϤāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻāĻŦāĻ‚ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āφāχāϟāĻŋ āϏāĻŽā§āĻĒā§āϰāĻĻāĻžāϝāĻŧ⧇āϰ āĻ•āĻžāϛ⧇ āĻŦ⧈āĻœā§āĻžāĻžāύāĻŋāĻ• āĻŽā§‚āĻ˛ā§āϝ⧇āϰāĨ¤ āφāĻŽāϰāĻž āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟāϕ⧇ āĻĻ⧃āĻĸāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻāϰ āϜāύāĻĒā§āϰāĻŋāϝāĻŧāĻ•āϰāϪ⧇ āύāĻŋāϝ⧁āĻ•ā§āϤ āφāĻ›āĻŋ, āĻāĻŦāĻ‚ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āĻŦāĻŋāĻœā§āĻžāĻžāύ āĻāĻŦāĻ‚ āĻ—āĻŖāĻŋāϤ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āύ⧇āϤ⧃āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āϰāĻžāĻļāĻŋāϝāĻŧāĻžāύ āĻŦāĻŋāĻļā§āĻŦāĻŦāĻŋāĻĻā§āϝāĻžāϞāϝāĻŧāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻšāϝ⧋āĻ—āĻŋāϤāĻž āĻ•āϰāĻŋāĨ¤

āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϰ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āĻ•āĻžāϜ āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻŋāϝāĻŧ āĻŸā§‡āϞāĻŋāĻ—ā§āϰāĻžāĻŽ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āϜāĻĄāĻŧāĻŋāϤ āĻĨāĻžāĻ•āĻž āύāĻŋāĻœā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āĻĒā§āϰ⧇āϰāĻŖāĻž āĻ›āĻŋāϞ, āϤāĻŦ⧇ āĻĒ⧁āϰāĻ¸ā§āĻ•āĻžāϰ āϤāĻšāĻŦāĻŋāϞ āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻĒā§āϰāĻŖā§‹āĻĻāύāĻž āĻšāϝāĻŧ⧇ āωāϠ⧇āϛ⧇āĨ¤ 🙂

TON āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻ—āĻŦ⧇āώāĻŖāĻž

āφāĻŽāϰāĻž āĻŦā§āϞāĻ•āĻšā§‡āχāύ, āĻ•ā§ƒāĻ¤ā§āϰāĻŋāĻŽ āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻ¤ā§āϤāĻž āĻāĻŦāĻ‚ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚-āĻ āύāϤ⧁āύ āωāĻ¨ā§āύāϝāĻŧāύ āϘāύāĻŋāĻˇā§āĻ āĻ­āĻžāĻŦ⧇ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āϝ⧇ āϏāĻ•āϞ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŋ āϏ⧇āϗ⧁āϞāĻŋāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝ āĻĒā§āϰāĻ•āĻžāĻļ āĻŽāĻŋāϏ āύāĻž āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŋāĨ¤ āĻ…āϤāĻāĻŦ, āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻļ⧁āϰ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻŽāĻžāĻĻ⧇āϰ āĻĻāϞ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻāϰ āϧāĻžāϰāĻŖāĻžāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻ›āĻŋāϞ āϟāύ āϏāĻžāĻĻāĻž āĻ•āĻžāĻ—āϜ. āϝāĻžāχāĻšā§‹āĻ•, TON-āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇, āφāĻŽāϰāĻž āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāĻ—āϤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻāĻŦāĻ‚ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āĻĒā§āϰāĻ•ā§ƒāϤ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻ•āϰāĻŋāύāĻŋ, āϤāĻžāχ āĻĒā§āϰāĻĨāĻŽ āϧāĻžāĻĒāϟāĻŋ āĻŦ⧇āĻļ āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āĻ›āĻŋāϞ - āĻ…āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒ⧁āĻ™ā§āĻ–āĻžāύ⧁āĻĒ⧁āĻ™ā§āĻ– āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻāĻŦāĻ‚ āχāύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ.

āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻļ⧁āϰ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ, āϕ⧋āĻĄāϟāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϤāĻžāχ āϏāĻŽāϝāĻŧ āĻŦāĻžāρāϚāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ—āĻžāχāĻĄ āĻŦāĻž āϏāĻžāϰāĻžāĻ‚āĻļ āϞ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝ āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀. āĻĻ⧁āĻ°ā§āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, āĻāϟāĻŋ āϕ⧋āύ⧋ āĻĢāϞāĻžāĻĢāϞ āĻĻ⧇āϝāĻŧāύāĻŋ - āωāĻŦ⧁āĻ¨ā§āϟ⧁āϤ⧇ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āφāĻŽāϰāĻž āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āωāĻĒāĻ•āϰāĻŖ āϖ⧁āρāĻœā§‡ āĻĒāĻžāχāύāĻŋāĨ¤

āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āύāĻŋāĻœā§‡āχ āĻ­āĻžāϞ āĻ—āĻŦ⧇āώāĻŖāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•āĻŋāϛ⧁ āĻāϞāĻžāĻ•āĻžāϝāĻŧ āĻĒāĻĄāĻŧāĻž āĻ•āĻ āĻŋāύ āĻ›āĻŋāϞ. āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻĢāĻŋāϰ⧇ āϝ⧇āϤ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻŦāĻŋāĻŽā§‚āĻ°ā§āϤ āϧāĻžāϰāĻŖāĻžāϗ⧁āϞāĻŋāϰ āωāĻšā§āϚ-āĻ¸ā§āϤāϰ⧇āϰ āĻŦāĻ°ā§āĻŖāύāĻž āĻĨ⧇āϕ⧇ āύāĻŋāĻŽā§āύ-āĻ¸ā§āϤāϰ⧇āϰ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āĻŦāĻŋāĻŦāϰāϪ⧇ āĻ¸ā§āϝ⧁āχāϚ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāϕ⧇āĻļāύ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāϰāĻŖ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āύāĻž āĻĨāĻžāĻ•āϞ⧇ āĻāϟāĻŋ āϏāĻšāϜ āĻšāĻŦ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ āϕ⧀āĻ­āĻžāĻŦ⧇ āϤāĻžāϰ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻ¤ā§āĻŦ āĻ•āϰ⧇ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻžāϰ āĻšā§‡āϝāĻŧ⧇ TON āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ āĻŦāĻŋāĻ­ā§āϰāĻžāĻ¨ā§āϤ āĻ•āϰāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻŦ⧇āĻļāĻŋāĨ¤

āύāĻŋāĻ•ā§āϏ: āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ āϰāĻžāĻ–āĻž

āϏ⧇āϰ⧋āϕ⧇āϞ⧇ āφāĻŽāϰāĻž āĻŦāĻĄāĻŧ āĻ­āĻ•ā§āϤ āϜāϞ⧇āϰ āĻ­ā§‚āϤ. āφāĻŽāϰāĻž āĻāϟāĻŋ āĻĻāĻŋāϝāĻŧ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋ āύāĻŋāĻ•ā§āϏāĻ…āĻĒāϏ, āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āφāϛ⧇ āύāĻŋāĻ•ā§āϏāϏ. āĻāϰ āϜāĻ¨ā§āϝ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ, āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āĻŦāĻŋāĻ˛ā§āĻĄāϗ⧁āϞāĻŋ āĻĒ⧁āύāϰ⧁āĻ¤ā§āĻĒāĻžāĻĻāύāϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āϝ⧇ āϕ⧋āύāĻ“ āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇ āϝ⧇āĻ–āĻžāύ⧇ āύāĻŋāĻ•ā§āϏ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϤāĻžāχ āφāĻŽāϰāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĻ›āĻŋ 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 āĻāϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻžāĨ¤

āĻĢāĻžāύāϏāĻŋ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž āϝāĻž āĻ…āύ⧁āϰ⧂āĻĒ C āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝ āĻ­āĻžāώāĻžāϝāĻŧ āϏāĻ‚āĻ•āϞāĻŋāϤ āĻšāϝāĻŧ - āĻĢāĻŋāĻĢāϟ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰāĨ¤

āĻĒāĻžā§āϚāĻŽ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰ — TVM-āĻāϰ āϜāĻ¨ā§āϝ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻŸā§‡āĻŦāϞ āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒāĻžā§āϚāĻŽ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāĨ¤ āĻĒāĻžā§āϚāĻŽ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āύ⧇āχāĨ¤ āĻāχ āĻāĻŽāĻŦ⧇āĻĄā§‡āĻĄ āĻĄā§‹āĻŽā§‡āύ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ­āĻžāώāĻž (eDSL).

āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻ•āĻžāϜ āĻ•āϰ⧇

āĻ…āĻŦāĻļ⧇āώ⧇, āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻĻ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧ āĻāϏ⧇āϛ⧇āĨ¤

āĻ…ā§āϝāĻžāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻšā§āϝāĻžāύ⧇āϞ

āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻšā§āϝāĻžāύ⧇āϞ āĻšāϞ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āϝāĻž āĻĻ⧁āχāϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻŦā§āϞāĻ•āĻšā§‡āχāύ⧇āϰ āĻŦāĻžāχāϰ⧇ āĻ…āĻ°ā§āĻĨāĻĒā§āϰāĻĻāĻžāύ āĻĒāĻžāĻ āĻžāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ…āĻ°ā§āĻĨ āϏāĻžāĻļā§āϰāϝāĻŧ āĻ•āϰ⧇āύ āύāĻž (āϕ⧋āύ āĻ•āĻŽāĻŋāĻļāύ āύ⧇āχ), āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŽāϝāĻŧāĻ“ (āφāĻĒāύāĻžāϕ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻŦā§āϞāĻ• āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āύāĻž)āĨ¤ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āϝāϤāϟāĻž āϛ⧋āϟ āĻāĻŦāĻ‚ āϝāϤāĻŦāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϤāϤāϟāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻĒāĻ•ā§āώāϗ⧁āϞāĻŋāϕ⧇ āĻāϕ⧇ āĻ…āĻĒāϰāϕ⧇ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āύāĻž, āϝ⧇āĻšā§‡āϤ⧁ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āύāĻŋāĻˇā§āĻĒāĻ¤ā§āϤāĻŋāϰ āĻ¨ā§āϝāĻžāĻ¯ā§āϝāϤāĻž āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āφāĻŽāϰāĻž āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āϏāĻšāϜ āϏāĻŽāĻžāϧāĻžāύ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋāĨ¤ āĻĻ⧁āϟāĻŋ āĻĒāĻ•ā§āώ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰāĻŋāϤ āĻŦāĻžāĻ°ā§āϤāĻž āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āĻĒā§āϰāϤāĻŋāϟāĻŋāϤ⧇ āĻĻ⧁āϟāĻŋ āύāĻŽā§āĻŦāϰ āϰāϝāĻŧ⧇āĻ›ā§‡â€”āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ• āĻĒāĻ•ā§āώ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻĻāĻ¤ā§āϤ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒāϰāĻŋāĻŽāĻžāĻŖāĨ¤ āĻāχ āĻĻ⧁āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻž āĻŽāϤ āĻ•āĻžāϜ āϭ⧇āĻ•ā§āϟāϰ āϘāĻĄāĻŧāĻŋ āĻĒā§āϰāĻĨāĻžāĻ—āϤ āĻŦāĻŋāϤāϰāĻŖ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻāĻŦāĻ‚ āϞ⧇āύāĻĻ⧇āύ⧇āϰ āϜāĻ¨ā§āϝ "āφāϗ⧇ āϘāĻŸā§‡āĻ›āĻŋāϞ" āĻ…āĻ°ā§āĻĄāĻžāϰ āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤ āĻāχ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϚ⧁āĻ•ā§āϤāĻŋ āϝ⧇āϕ⧋āύ⧋ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻŦ⧇āĨ¤

āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇, āĻāχ āϧāĻžāϰāĻŖāĻžāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻžāχ āϝāĻĨ⧇āĻˇā§āϟ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āωāĻ­āϝāĻŧāχ āϛ⧇āĻĄāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇āĻ›āĻŋ āĻ•āĻžāϰāĻŖ āĻāχāĻ­āĻžāĻŦ⧇ āφāĻŽāϰāĻž āφāϰāĻ“ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āχāωāϜāĻžāϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āφāĻŽāϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϝāĻŧ āĻ…āĻ°ā§āĻĨāĻĒā§āϰāĻĻāĻžāύ⧇āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āĻāϟāĻŋ āĻ›āĻžāĻĄāĻŧāĻž, āϝāĻĻāĻŋ āϕ⧋āύāĻ“ āĻ•āĻžāϰāϪ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϟāĻŋ āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āϤāĻŦ⧇, āϝāĻĻāĻŋāĻ“ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻāĻŦāĻ‚ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āĻ—āĻŖāύāĻž āϏāĻ āĻŋāĻ• āĻšāĻŦ⧇, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻ•ā§āώāϤāĻŋāϟāĻŋ āϞāĻ•ā§āĻˇā§āϝ āύāĻžāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻŽāĻžāĻĻ⧇āϰ āϧāĻžāϰāĻŖāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āĻāχ āϧāϰāύ⧇āϰ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻāĻŦāĻ‚ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻ…āĻ°ā§āĻĨāĻĒā§āϰāĻĻāĻžāύ⧇āϰ āĻšā§āϝāĻžāύ⧇āϞ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋ āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āĻ­āĻžāĻŦ⧇, āφāĻŽāϰāĻž āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧁āϟāĻŋ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋ:

  1. āĻŦāĻŋāĻŦāϰāĻŖ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧂āĻĒ āĻĒāĻĻā§āϧāϤāĻŋ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻāĻ•āĻŽā§āĻ–ā§€ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĨ¤
  2. āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞ, āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāϤ āĻāĻ•āχ āϧāĻžāϰāĻŖāĻž āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻžāϧāĻžāϰāĻŖ āϏāĻ āĻŋāĻ•āϤāĻž āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦ āϏāĻŽāĻžāϧāĻžāύ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŽāϤ⧋ āĻ…āύ⧇āĻ• āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻŦāϰāĻŖ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āύāĻž āĻ•āϰ⧇āĨ¤

āĻāϟāĻž āĻ¸ā§āĻĒāĻˇā§āϟ āĻšāϝāĻŧ⧇ āϗ⧇āϞ āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞāϕ⧇ āĻŦāĻŋāĻļāĻĻāĻ­āĻžāĻŦ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āĻ…āĻ°ā§āĻĨāĻĒā§‚āĻ°ā§āĻŖ, āĻāϰ āϏāĻ āĻŋāĻ•āϤāĻžāϰ āĻĻāĻŋāϕ⧇ āĻŦāĻŋāĻļ⧇āώ āĻŽāύ⧋āϝ⧋āĻ— āĻĻ⧇āĻ“āϝāĻŧāĻžāĨ¤ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋāϰ āĻĒāϰ⧇, āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āĻāĻ–āύ āφāĻĒāύāĻŋāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ“āϰ āĻĻāĻŋāϕ⧇ āϤāĻžāĻ•āĻžāĻ“.

āφāĻŽāϰāĻž FunC-āϤ⧇ āϚ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰ⧇āĻ›āĻŋ, āĻāĻŦāĻ‚ āϏāĻ‚āĻ—āĻ āĻ•āĻĻ⧇āϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ…āύ⧁āϏāĻžāϰ⧇ āφāĻŽāϰāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāĻĢāĻŸā§‡ āφāĻŽāĻžāĻĻ⧇āϰ āϚ⧁āĻ•ā§āϤāĻŋāϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϞāĻžāχāύ āχāωāϟāĻŋāϞāĻŋāϟāĻŋ āϞāĻŋāϖ⧇āĻ›āĻŋāĨ¤ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ CLI-āĻāϰ āϜāĻ¨ā§āϝ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āĻ­āĻžāώāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰāϤāĻžāĻŽ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āĻĢāĻŋāϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĻ⧇āĻ–āϤ⧇ āφāĻ—ā§āϰāĻšā§€ āĻ›āĻŋāϞāĻžāĻŽ āϝ⧇ āĻāϟāĻŋ āĻ…āύ⧁āĻļā§€āϞāύ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

āϏāĻ¤ā§āϝāĻŋ āĻ•āĻĨāĻž āĻŦāϞāϤ⧇, āĻĢāĻŋāĻĢā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻŽāϰāĻž āωāĻ¨ā§āύāϤ āϏāϰāĻžā§āϜāĻžāĻŽ āĻāĻŦāĻ‚ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϏāĻš āϜāύāĻĒā§āϰāĻŋāϝāĻŧ āĻāĻŦāĻ‚ āϏāĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻ­āĻžāώāĻžāϗ⧁āϞāĻŋāϰ āĻĨ⧇āϕ⧇ āĻāχ āĻ­āĻžāώāĻžāϟāĻŋāϕ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāĻžāϰ āϕ⧋āύāĻ“ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻ•āĻžāϰāĻŖ āĻĻ⧇āĻ–āĻŋāύāĻŋāĨ¤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ•-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ­āĻžāώāĻžāϝāĻŧ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻŦ⧇āĻļ āĻ…āĻĒā§āϰ⧀āϤāĻŋāĻ•āϰ, āϝ⧇āĻšā§‡āϤ⧁ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āωāĻĒāϰ āϕ⧀ āφāϛ⧇ āϤāĻž āφāĻĒāύāĻžāϕ⧇ āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āφāĻĒāύāĻžāϰ āĻŽāĻžāĻĨāĻžāϝāĻŧ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āĻāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇ āύāĻžāĨ¤

āĻ…āϤāĻāĻŦ, āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāϤ⧇, āĻĢāĻŋāĻĢā§āĻŸā§‡āϰ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦ⧇āϰ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āĻ¨ā§āϝāĻžāĻ¯ā§āϝāϤāĻž āĻšāϞ āĻĢāĻŋāĻĢā§āϟ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰ⧇āϰ āĻšā§‹āĻ¸ā§āϟ āĻ­āĻžāώāĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāϰ āĻ­ā§‚āĻŽāĻŋāĻ•āĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāχ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āωāĻĻā§āĻ­āĻžāĻŦāύ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āϟāĻŋāĻ­āĻŋāĻāĻŽ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰāϕ⧇ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ­āĻžāώāĻžāϝāĻŧ āĻāĻŽā§āĻŦ⧇āĻĄ āĻ•āϰāĻž āĻ•āĻŋ āĻ­āĻžāϞ āĻšāĻŦ⧇ āύāĻž?

TVM Haskell eDSL

āĻāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻžāϰ āϏāĻŽāϝāĻŧāĨ¤ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻŽāĻžāĻ˛ā§āϟāĻŋ-āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ āĻ“āϝāĻŧāĻžāϞ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ FunC-āϤ⧇ āφāϰ⧇āĻ•āϟāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āϞ⧇āĻ–āĻž āϖ⧁āĻŦāχ āĻŦāĻŋāϰāĻ•ā§āϤāĻŋāĻ•āϰ āĻšāĻŦ⧇āĨ¤ āφāĻŽāϰāĻž āĻ•āĻŋāϛ⧁ āĻ¸ā§āĻŦāĻžāĻĻ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻšā§‡āϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ, āĻāĻŦāĻ‚ āĻāϟāĻŋ TVM-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻ­āĻžāώāĻž āĻ›āĻŋāϞāĨ¤

āĻĢāĻŋāĻĢā§āϟ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰ⧇āϰ āĻŽāϤ⧋, āφāĻŽāĻžāĻĻ⧇āϰ āύāϤ⧁āύ āĻ­āĻžāώāĻž āĻāĻŽā§āĻŦ⧇āĻĄ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āĻĢāĻŋāĻĢāĻŸā§‡āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻšāĻžāϏāϕ⧇āϞāϕ⧇ āĻšā§‹āĻ¸ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦ⧇āϛ⧇ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ, āϝāĻžāϰ āĻĢāϞ⧇ āφāĻŽāϰāĻž āĻāϰ āωāĻ¨ā§āύāϤ āϧāϰāύ⧇āϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϏ⧁āĻŦāĻŋāϧāĻž āύāĻŋāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āϝ⧇āĻ–āĻžāύ⧇ āĻāĻŽāύāĻ•āĻŋ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻ–āϰāϚ āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āϟāĻžāχāĻĒāĻŋāĻ‚, āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāϤ⧇, āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŧ āϏ⧁āĻŦāĻŋāϧāĻžāĨ¤

Haskell āĻ āĻāĻŽāĻŦ⧇āĻĄ āĻ•āϰāĻž TVM āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰ āĻĻ⧇āĻ–āϤ⧇ āϕ⧇āĻŽāύ āϤāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāϤ⧇, āφāĻŽāϰāĻž āĻāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āφāĻĻāĻ°ā§āĻļ āĻ“āϝāĻŧāĻžāϞ⧇āϟ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻāĻ–āĻžāύ⧇ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāϤ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŦāĻŋāώāϝāĻŧ āϰāϝāĻŧ⧇āϛ⧇:

  • āĻāχ āϚ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āύāĻŋāϝāĻŧ⧇ āĻ—āĻ āĻŋāϤ, āϤāĻŦ⧇ āφāĻĒāύāĻŋ āϝāϤ āϖ⧁āĻļāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ āĻšā§‹āĻ¸ā§āϟ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ (āϝ⧇āĻŽāύ āĻšāĻžāĻ¸ā§āϕ⧇āϞ) āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĢāĻžāĻ‚āĻļāύ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇āύ, āϤāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ eDSL āφāĻĒāύāĻžāϕ⧇ āĻāϟāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĻ⧇āϝāĻŧ āϝ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋ āϟāĻŋāĻ­āĻŋāĻāĻŽ-āĻ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āϰ⧁āϟāĻŋāύ āĻšāϝāĻŧ⧇ āωāĻ āϤ⧇ āϚāĻžāύ āύāĻžāĻ•āĻŋ āĻ•āϞ⧇āϰ āĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āϕ⧇āĻŦāϞ āχāύāϞāĻžāχāύ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤
  • āĻšāĻžāĻ¸ā§āϕ⧇āϞ⧇āϰ āĻŽāϤ⧋, āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϰ āϧāϰāύ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞ⧇āϰ āϏāĻŽāϝāĻŧ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āχāĻĄāĻŋāĻāϏāĻāϞ-āĻ, āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āχāύāĻĒ⧁āϟ āĻĒā§āϰāĻ•āĻžāϰāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āĻĒā§āϰāĻ•āĻžāϰ āϝāĻž āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻž āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĢāϞāĻžāĻĢāϞ⧇āϰ āĻĒā§āϰāĻ•āĻžāϰāϟāĻŋ āĻšāϞ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āĻĒā§āϰāĻ•āĻžāϰ āϝāĻž āĻ•āϞ⧇āϰ āĻĒāϰ⧇ āωāĻ¤ā§āĻĒāĻžāĻĻāĻŋāϤ āĻšāĻŦ⧇āĨ¤
  • āϕ⧋āĻĄā§‡ āĻŸā§€āĻ•āĻž āφāϛ⧇ stacktype, āĻ•āϞ āĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āĻĒā§āϰāĻ•āĻžāϰ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇āĨ¤ āφāϏāϞ āĻ“āϝāĻŧāĻžāϞ⧇āϟ āϚ⧁āĻ•ā§āϤāĻŋāϤ⧇ āĻāϗ⧁āϞāĻŋ āϕ⧇āĻŦāϞ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāĻžāĻĻ⧇āϰ eDSL-āĻ āĻāϗ⧁āϞāĻŋ āφāϏāϞ⧇ āϕ⧋āĻĄā§‡āϰ āĻ…āĻ‚āĻļ āĻāĻŦāĻ‚ āĻ•āĻŽā§āĻĒāĻžāχāϞ⧇āϰ āϏāĻŽāϝāĻŧ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧎ āĻāϗ⧁āϞāĻŋ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻŦāĻž āĻŦāĻŋāĻŦ⧃āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦ⧇āĻļāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻž āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰ⧇ āϝāĻĻāĻŋ āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āĻĒā§āϰāĻ•āĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧāĨ¤ āĻ…āĻŦāĻļā§āϝāχ, āĻāχ āϧāϰāύ⧇āϰ āĻŸā§€āĻ•āĻž āϰāĻžāύāϟāĻžāχāĻŽ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇ āύāĻž, āϝ⧇āĻšā§‡āϤ⧁ āϤāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϕ⧋āύ⧋ TVM āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āύāĻžāĨ¤
  • āĻāϟāĻŋ āĻāĻ–āύāĻ“ āĻĻ⧁āχ āϏāĻĒā§āϤāĻžāĻšā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āϞ⧇āĻ–āĻž āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ, āϤāĻžāχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻāĻ–āύāĻ“ āĻ…āύ⧇āĻ• āĻ•āĻžāϜ āĻ•āϰāĻž āĻŦāĻžāĻ•āĻŋ āφāϛ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āύ⧀āĻšā§‡āϰ āϕ⧋āĻĄā§‡ āφāĻĒāύāĻŋ āϝ⧇ āĻ•ā§āϞāĻžāϏāϗ⧁āϞāĻŋ āĻĻ⧇āĻ–āϛ⧇āύ āϤāĻžāϰ āϏāĻŽāĻ¸ā§āϤ āωāĻĻāĻžāĻšāϰāĻŖ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤāĨ¤

āφāĻŽāĻžāĻĻ⧇āϰ āχāĻĄāĻŋāĻāϏāĻāϞ-āĻ āĻāĻ•āϟāĻŋ āĻŽāĻžāĻ˛ā§āϟāĻŋāϏāĻŋāĻ— āĻ“āϝāĻŧāĻžāϞ⧇āĻŸā§‡āϰ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻāχāϰāĻ•āĻŽ āĻĻ⧇āĻ–āĻžāĻšā§āϛ⧇:

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 āϘāĻ¨ā§āϟāĻž (āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ, āĻŽāĻŋāϟāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§ƒāϤ āωāĻ¨ā§āύāϝāĻŧāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤāĻŋ āϏāĻš)āĨ¤ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāĻŽā§‚āϞāĻ• āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒāĻžāρāϚāϜāύ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀ āĻ…āĻ‚āĻļ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāϞ: CTO, āĻĻāϞ⧇āϰ āύ⧇āϤ⧃āĻ¤ā§āĻŦ, āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻŦāĻŋāĻļ⧇āώāĻœā§āĻž āĻāĻŦāĻ‚ Haskell āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āĨ¤

āφāĻŽāϰāĻž āϕ⧋āύ⧋ āĻ…āϏ⧁āĻŦāĻŋāϧāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϝāĻŧ āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāϪ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻŽā§āĻĒāĻĻ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋ, āϝ⧇āĻšā§‡āϤ⧁ āĻšā§āϝāĻžāĻ•āĻžāĻĨāύ⧇āϰ āĻšā§‡āϤāύāĻž, āϘāύāĻŋāĻˇā§āĻ  āĻĻāϞāĻŦāĻĻā§āϧ āĻ•āĻžāϜ, āĻāĻŦāĻ‚ āύāϤ⧁āύ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϰ āĻĻāĻŋāĻ•āϗ⧁āϞāĻŋāϤ⧇ āĻĻā§āϰ⧁āϤ āύāĻŋāĻœā§‡āϕ⧇ āύāĻŋāĻŽāĻœā§āϜāĻŋāϤ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϏāĻŦāϏāĻŽāϝāĻŧāχ āωāĻ¤ā§āϤ⧇āϜāύāĻžāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āϏ⧀āĻŽāĻŋāϤ āϏāĻŽā§āĻĒāĻĻ⧇āϰ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ āϏāĻ°ā§āĻŦāĻžāϧāĻŋāĻ• āĻĢāϞāĻžāĻĢāϞ āĻ…āĻ°ā§āϜāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āύāĻŋāĻĻā§āϰāĻžāĻšā§€āύ āϰāĻžāϤ āĻ…āĻŽā§‚āĻ˛ā§āϝ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻāĻŦāĻ‚ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āĻ¸ā§āĻŽā§ƒāϤāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āĻ•ā§āώāϤāĻŋāĻĒā§‚āϰāĻŖ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āĻāχ āϧāϰāύ⧇āϰ āĻ•āĻžāϜāϗ⧁āϞāĻŋāϤ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āϏāĻ°ā§āĻŦāĻĻāĻž āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻĒāϰ⧀āĻ•ā§āώāĻž, āϝ⧇āĻšā§‡āϤ⧁ āĻ­āĻžāϞāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ›āĻžāĻĄāĻŧāĻž āϏāĻ¤ā§āϝāĻŋāĻ•āĻžāϰ⧇āϰ āĻļāĻžāϞ⧀āύ āĻĢāϞāĻžāĻĢāϞ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻž āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āĻ•āĻ āĻŋāύāĨ¤

āĻ—āĻžāύ⧇āϰ āĻ•āĻĨāĻž āĻāĻ•āĻĒāĻžāĻļ⧇: TON āϟāĻŋāĻŽ āϝ⧇ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇ āϤāĻžāϤ⧇ āφāĻŽāϰāĻž āĻŽā§āĻ—ā§āϧ āĻšāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āϤāĻžāϰāĻž āĻāĻ•āϟāĻŋ āϜāϟāĻŋāϞ, āϏ⧁āĻ¨ā§āĻĻāϰ āĻāĻŦāĻ‚ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ TON āύāĻŋāĻœā§‡āϕ⧇ āĻ…āύ⧇āĻ• āϏāĻŽā§āĻ­āĻžāĻŦāύāĻžāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰ⧇āϛ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻāχ āĻŦāĻžāĻ¸ā§āϤ⧁āϤāĻ¨ā§āĻ¤ā§āϰ⧇āϰ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āϜāĻ¨ā§āϝ, āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻŦāĻ‚ āωāĻ¨ā§āύāϝāĻŧāύ āϏāϰāĻžā§āϜāĻžāĻŽāϗ⧁āϞāĻŋāϰ āωāĻ¨ā§āύāϤāĻŋāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āωāĻ­āϝāĻŧ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āχ āφāϰāĻ“ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻŽāϰāĻž āĻāĻ–āύ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻ…āĻ‚āĻļ āĻšāϤ⧇ āĻĒ⧇āϰ⧇ āĻ—āĻ°ā§āĻŦāĻŋāϤāĨ¤

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻĒāĻĄāĻŧāĻžāϰ āĻĒāϰ⧇āĻ“ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āϕ⧋āύ⧋ āĻĒā§āϰāĻļā§āύ āĻĨāĻžāϕ⧇ āĻŦāĻž āφāĻĒāύāĻžāϰ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ TON āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāĻĒāύāĻžāϰ āϧāĻžāϰāĻŖāĻž āĻĨāĻžāϕ⧇, āφāĻŽāĻžāĻĻ⧇āϰ āϞāĻŋāϖ⧁āύ — āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇ āϖ⧁āĻļāĻŋ āĻšāĻŦāĨ¤

āωāĻ¤ā§āϏ: www.habr.com

āĻāĻ•āϟāĻŋ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϜ⧁āĻĄāĻŧ⧁āύ