{"id":296990,"date":"2020-01-11T15:00:12","date_gmt":"2020-01-11T15:00:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=296990"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=296990","title":{"rendered":"ChaiScript \u2014 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f C++"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/483540\/\">\u041a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 C++, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 Lua. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0434\u0440\u0443\u0433\u043e\u043c, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0438 \u043b\u0435\u0433\u043a\u043e\u043c \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u044f\u0437\u044b\u043a\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c ChaiScript. <br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zh\/vl\/py\/zhvlpyg_87wuf7gg0alk-s7qeyo.png\" alt=\"image\"><br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h4>\n<p>  \u0421\u0430\u043c \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 ChaiScript \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0435\u043b <a href=\"https:\/\/youtu.be\/uzF4u9KgUWI\" rel=\"nofollow\">\u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432<\/a> Jason&#8217;\u0430 Turner&#8217;a, \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u044f\u0437\u044b\u043a\u0430. \u041c\u0435\u043d\u044f \u044d\u0442\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u043e, \u0438 \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u044f \u0440\u0435\u0448\u0438\u043b \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c ChaiScript? \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u0435\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u043b (\u043e \u043c\u043e\u0435\u043c \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443 \u0441\u0442\u0430\u0442\u044c\u0438), \u043e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u044d\u0442\u043e \u043d\u0438 \u0437\u0432\u0443\u0447\u0430\u043b\u043e, \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u043d\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0431\u044b \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0441\u044f \u044d\u0442\u043e\u0442 \u044f\u0437\u044b\u043a, \u0438 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e \u043d\u0435\u043c. \u0423 \u044f\u0437\u044b\u043a\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/ChaiScript\/ChaiScript\/blob\/develop\/cheatsheet.md\" rel=\"nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> \u0438 <a href=\"http:\/\/chaiscript.com\/\" rel=\"nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442<\/a>, \u043d\u043e \u0438\u0437 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0435\u0435 \u0447\u0438\u0442\u0430\u0442\u044c, \u0434\u0430 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043d\u043e\u0433\u0438\u043c (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u0435\u043d\u044f) \u0431\u043b\u0438\u0436\u0435.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435 \u044f\u0437\u044b\u043a\u0430 \u0438 \u0432\u0441\u0435\u0445 \u0435\u0433\u043e \u0444\u0438\u0447\u0430\u0445, \u043f\u043e\u0442\u043e\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 C++, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0432\u0430\u0441 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u0438\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c:  <\/p>\n<ul>\n<li><a href=\"#syntax\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 ChaiScript<\/a><\/li>\n<li><a href=\"#cppchai\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0432 C++<\/a><\/li>\n<li><a href=\"#myexp\">\u041b\u0438\u0447\u043d\u044b\u0439 \u043e\u043f\u044b\u0442<\/a><\/li>\n<\/ul>\n<p>  <a name=\"syntax\"><\/a>  <\/p>\n<h2>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0437\u044b\u043a\u0430<\/h2>\n<p>  \u042f\u0437\u044b\u043a ChaiScript \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 C++ \u0438 JS \u0441\u0432\u043e\u0438\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043d, \u043a\u0430\u043a \u0438 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438-\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 JavaScript, \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u0443\u044e \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e (\u043d\u0438\u043a\u0430\u043a\u0438\u0445 <code>1 + \"2\"<\/code>). \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430, \u044f\u0437\u044b\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e, \u0431\u0435\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434. \u0418\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 (\u043f\u0440\u0438\u0447\u0435\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u0443\u044e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043b\u043e\u0432\u0438\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0442\u0430\u043a \u0438 \u0432 C++), \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u041d\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d \u043a \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043a\u0443-\u0441-\u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0442\u0438\u043b\u0435 python, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439.<\/p>\n<h4>\u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b<\/h4>\n<p>  ChaiScript \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0445\u0440\u0430\u043d\u0438\u0442 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a int, \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a double, \u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e std::string. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c. \u0412 \u044f\u0437\u044b\u043a\u0435 \u0434\u0430\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u044b \u0443 \u0447\u0438\u0441\u0435\u043b, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f:  <\/p>\n<pre><code class=\"javascript\">\/*  \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 chaiscript \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0432 js \u0442\u0438\u043f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e var \/ auto `;` \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e  *\/ var myInt = 1 \/\/ int var myLongLong = 1ll \/\/ long long int var myFloating = 3.3 \/\/ double var myBoolean = false \/\/ bool var myString = \"hello world!\\n\" \/\/ std::string <\/code><\/pre>\n<p>  \u041c\u0435\u043d\u044f\u0442\u044c \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 `=` \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b \u0440\u0438\u0441\u043a\u0443\u0435\u0442\u0435 \u043b\u0438\u0431\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435), \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0442\u044c \u0436\u0435\u0440\u0442\u0432\u043e\u0439 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a:   <\/p>\n<pre><code class=\"javascript\">var integer = 3 integer = 5.433 print(integer) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 5 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f double \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0432 int! integer = true \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 - \u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 `=` \u0434\u043b\u044f (int, bool) <\/code><\/pre>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043d\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0432 \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 undefined \u0434\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 \u0435\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/h4>\n<p>  \u0412 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0434\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u2014 Vector \u0438 Map. \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u0445\u043e\u0436\u0435 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u0432 C++ (std::vector \u0438 std::map \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e), \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439. \u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c Vector \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e int&#8217;\u043e\u0432, \u0430 \u0432\u043e\u0442 Map \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043b\u044e\u0447\u043e\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u0443. \u0412\u0438\u0434\u0438\u043c\u043e \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0432\u0448\u0438\u0441\u044c python, \u0430\u0432\u0442\u043e\u0440\u044b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043a\u043e\u0434\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430:  <\/p>\n<pre><code class=\"javascript\">var v = [ 1, 2, 3u, 4ll, \"16\", `+` ] \/\/ \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 var m = [ \"key1\" : 1, \"key2\":  \"Bob\" ]; \/\/ \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438  var M = Map() \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c var V = Vector() \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432  \/\/ \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0441\u0442\u0438\u043b\u0435 C++ \u0432\u0435\u043a\u0442\u043e\u0440\u0430: v.push_back(123)  \/\/ \u0435\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 v.push_back_ref(m); \/\/ m - \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442  \/\/ \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043b\u0435\u0433\u043a\u043e m[\"key\"] = 3  \/\/ \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 (reference assignment): m[\"key\"] := m \/\/ \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442  <\/code><\/pre>\n<p>  \u041e\u0431\u0430 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u0441\u0432\u043e\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0432 C++, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0432\u0435\u0434\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b Range \u0438 Const_Range. \u041a \u0441\u043b\u043e\u0432\u0443, \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0447\u0435\u0440\u0435\u0437 =, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e.<\/p>\n<h4>\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/h4>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0438 \u0446\u0438\u043a\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"javascript\">var a = 5 var b = -1 \/\/ \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 if-else if (a &gt; b) {     print(\"a &gt; b\") } else if (a == b){     print(\"a == b\") } else {     print(\"a &lt; b\") }  \/\/ switch - \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 if-\u043e\u0432 \/\/ \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \/\/ \u0411\u0435\u0437 break \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437, \u043a\u0430\u043a \u0438 \u0432 C++ var str = \"hello\" switch(str) {     case(\"hi\") { print(\"hi!\"); break; }     case(\"hello\") { print(\"hello!\" break; }     case(\"bye\") { print(\"bye-bye!\") break; }     default { print(\"what have you said?\") } }  var x = true \/\/ \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u0442\u0435\u043b\u0435 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 while (x) {   print(\"x was true\")   x = false; }  \/\/ \u0446\u0438\u043a\u043b \u0432 \u0441\u0442\u0438\u043b\u0435 C. \u041f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u043e\u0441\u043b\u0435 \u0438\u0434\u0435\u0442 \u0431\u0443\u043b\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043b\u044e\u0431\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0435\u0441\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e for (var i = 0; i &lt; 10; ++i) \/\/ \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435-\u0438\u043d\u043a\u0435\u0440\u0435\u043c\u0435\u043d\u0442, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 {   print(i); \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c 0 ... 9 \u0432 10 \u0441\u0442\u0440\u043e\u043a }  \/\/ ranged-for loop for(element : [1, 2, 3, 4, 5]) {     puts(element) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434 12345 }  \/\/ \u0434\u043b\u044f \u0433\u0443\u0440\u043c\u0430\u043d\u043e\u0432: \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0438\u0437 C++17 if-init statements: if(var x = get_value(); x &lt; 10) {     print(x) \/\/ x \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 if } <\/code><\/pre>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u043b\u044e\u0434\u0438, \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0441 C++, \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438. \u042d\u0442\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0434\u044c ChaiScript \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u0438\u0439 \u0434\u043b\u044f \u00ab\u0441\u0438\u0448\u043d\u0438\u043a\u043e\u0432\u00bb \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u044f\u0437\u044b\u043a, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0410\u0432\u0442\u043e\u0440\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u0434\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432\u0430 \u0434\u043b\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u2014 <code>var<\/code> \u0438 <code>auto<\/code>, \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0443\u0436 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u043f\u043b\u044e\u0441\u044b \u0441 auto.<\/p>\n<h4>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0412 ChaiScript \u0435\u0441\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442. \u041a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0434\u043d\u0435\u0435 (\u043d\u043e \u043d\u0435 \u0440\u0430\u043d\u044c\u0448\u0435!). \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439\/\u0446\u0438\u043a\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0438\u0437\u0432\u043d\u0435, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>global<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>var<\/code>. \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u043c, \u0447\u0442\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445: \u0432\u0438\u0434\u043d\u044b \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445: \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b (\u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0435 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u043e\u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c)  <\/p>\n<pre><code class=\"javascript\">\/\/ \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 chaiscript def foo(x) {     global G = 2     print(x) }  foo(0) \/\/ \u0432\u044b\u0437\u043e\u0432 foo(x), G = 2 print(G)  \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 2 global G = 3 \/\/ \u0442\u0435\u043f\u0435\u0440\u044c G = 3, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 global - \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430! <\/code><\/pre>\n<p>  \u041a \u0441\u043b\u043e\u0432\u0443, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e \u043b\u0438 \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>is_var_undef<\/code>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0439 true, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f undefined.<\/p>\n<h4>\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a<\/h4>\n<p>  \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043c\u0435\u0442\u043e\u0434 <code>to_string()<\/code>, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 <code>${object}<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0445 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0439 \u0441\u0442\u0440\u043e\u043a \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u044f\u0442\u043d\u0435\u0439:  <\/p>\n<pre><code class=\"javascript\">var x = 3 var y = 4  \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 sum of 3 + 4 = 7 print(\"sum of ${x} + ${y} = ${x + y}\")  <\/code><\/pre>\n<p>  Vector, Map, MapPair \u0438 \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. Vector \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>[o1, o2, ...]<\/code>, Map \u043a\u0430\u043a <code>[&lt;key1, val1&gt;, &lt;key2, val2&gt;, ...]<\/code>, \u0430 MapPair: <code>&lt;key, val&gt;<\/code>.<\/p>\n<h4>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0445 \u043d\u044e\u0430\u043d\u0441\u044b<\/h4>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 ChaiScript \u2014 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u0430\u043a \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043d\u0438\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0442\u043e \u0447\u0435\u0433\u043e \u0442\u0430\u043a \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438-\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u0430\u043c!), \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439, \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c C++, \u0438\u043d\u0430\u0447\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"javascript\">def adder(int x, int y) {     return x + y }  def adder(bool x, bool y) {    return x || y }  adder(1, 2) \/\/ \u043e\u043a, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 3 adder(1.22, -3.7) \/\/ \u043e\u043a, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 1 + (-3) = 2 adder(true, true) \/\/ \u043e\u043a, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 true  adder(true, 3) \/\/ \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 adder(bool, int) <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0432 \u044f\u0437\u044b\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430 (call guard). \u0415\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 return-statement&#8217;\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435, \u0442\u043e \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c:  <\/p>\n<pre><code class=\"javascript\">def div(x, y) : y != 0 { x \/ y } \/\/ \u0435\u0441\u043b\u0438 `y` \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e - \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f `x` \u043d\u0430 `y`  print(div(2, 0.5)) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 4.0 print(div(2, 0)) \/\/ \u043e\u0448\u0438\u0431\u043a\u0430, `y` \u0440\u0430\u0432\u0435\u043d 0! <\/code><\/pre>\n<h4>\u041a\u043b\u0430\u0441\u0441\u044b \u0438 Dynamic_Object<\/h4>\n<p>  ChaiScript \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u0447\u0430\u0442\u043a\u0438 \u041e\u041e\u041f, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u043c \u043f\u043b\u044e\u0441\u043e\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u0412 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0439 \u0442\u0438\u043f \u2014 Dynamic_Object. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0432\u0441\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e Dynamic_Object \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u043b\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0438\u043c:  <\/p>\n<pre><code class=\"javascript\">var obj = Dynamic_Object(); obj.x = 3; obj.f = fun(arg) { print(this.x + arg); } \/\/ \u0442\u0435\u043f\u0435\u0440\u044c obj \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 f (\u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a `x` obj.f(-3); \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 0 <\/code><\/pre>\n<p>  \u041a\u043b\u0430\u0441\u0441\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0418\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044f, \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b. \u0418\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u2014 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>set_explicit(object, value)<\/code> \u043c\u043e\u0436\u043d\u043e \u00ab\u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb \u043f\u043e\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435):  <\/p>\n<pre><code class=\"javascript\">class Widget {     var id; \/\/ \u0430\u0442\u0440\u0438\u0431\u0443\u0442 id     def Widget() { this.id= 0 } \/\/ \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432     def Widget(id) { this.id = id } \/\/ \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441 1 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432     def get_id() { id } \/\/ \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 } var w = Widget(10) print(w.get_id()) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 10 (w.id) print(w.get_id) \/\/ \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 10, \u0441\u043a\u043e\u0431\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 set_explicit(w, true) \/\/ \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 w.x = 3 \/\/ \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u0430\u043a \u043a\u0430\u043a \u0443 Widget \u043d\u0435\u0442 \u043f\u043e\u043b\u044f x <\/code><\/pre>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441:  <\/p>\n<pre><code class=\"javascript\">def set_id(Widget w, id) { w.id = id }  w.set_id(9) \/\/ w.id = 9 set_id(w, 9) \/\/ \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, w.id = 9 <\/code><\/pre>\n<p>  \u041a\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 C#, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u044d\u0442\u043e \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u0430\u043b\u0435\u043a \u043e\u0442 \u0438\u0441\u0442\u0438\u043d\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u044f\u0437\u044b\u043a\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 int&#8217;\u0430. \u0422\u0430\u043a\u0436\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0445\u0438\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432: \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043a\u0440\u0443\u0436\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0442\u0438\u043b\u044c\u0434\u043e\u0439 (`) \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435:  <\/p>\n<pre><code class=\"javascript\">\/\/ \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 + \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 Widget def `+`(Widget w1, Widget w2) {     print(\"merging two widgets!\") }  var widget1 = Widget() var widget2 = Widget() widget1 + widget2 \/\/ \u0431\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0448\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435  \/\/ \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c: var plus = `+` print(plus(1, 7)) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 8 <\/code><\/pre>\n<p>  <\/p>\n<h4>\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d<\/h4>\n<p>  \u0413\u043e\u0432\u043e\u0440\u044f \u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d \u0432 ChaiScript, \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443 \u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>namespace(name)<\/code>, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u043b\u0430\u0441\u0441\u044b. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u044f\u0437\u044b\u043a\u0435 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"javascript\">namespace(\"math\") \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d math  \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 math.square = fun(x) { x * x } math.hypot_squared= fun(x, y) { math.square(x) + math.square(y) }  print(math.square(4)) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 16 print(math.hypot_squared(3, 4)) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 25 <\/code><\/pre>\n<h4>\u041b\u044f\u043c\u0431\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0438\u0447\u0438<\/h4>\n<p>  \u041b\u044f\u043c\u0431\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 ChaiScript \u043f\u043e\u0434\u043e\u0431\u043d\u044b \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0438\u0437 C++. \u0414\u043b\u044f \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <b>fun<\/b>, \u0438 \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. \u0422\u0430\u043a\u0436\u0435 \u0432 \u044f\u0437\u044b\u043a\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f bind, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"javascript\">var func_object = fun(x) { x * x } func_object(9) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 81  var name = \"John\" var greet = fun[name]() { \"Hello, \" + name }  print(greet()) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 Hello, John name = \"Bob\" print(greet()) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 Hello, Bob  var message = bind(fun(msg, name) { msg + \" from \" + name }, _, \"ChaiScript\"); print(message(\"Hello\")) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 Hello from ChaiScript <\/code><\/pre>\n<p>  <\/p>\n<h4>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u044b \u0432 \u0441\u0430\u043c\u043e\u043c ChaiScript (\u0447\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u043c), \u0442\u0430\u043a \u0438 \u0432 C++. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u0441 \u043f\u043b\u044e\u0441\u0430\u043c\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0436\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0443:  <\/p>\n<pre><code class=\"javascript\">try {     eval(x + 1) \/\/ x \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 } catch (e) {     print(\"Error during evaluation\")) }  \/\/ \u043c\u043e\u0436\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c C++ \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 ChaiScript \/\/ \u0422\u0430\u043a \u043a\u0430\u043a Vector - \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 std::vector, \u0442\u043e \u043e\u043d \u043a\u0438\u0434\u0430\u0435\u0442 std::exception \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 try {     var vec = [1, 2]     var val = vec[3] \/\/ \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 } catch (e) {     print(\"index out of range: \" + e.what()); \/\/ e.what \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 ChaiScript }  \/\/ \u043a \u0441atch \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c guard \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 `:` try {   throw(5.2) } catch(e) : is_type(e, \"int\") {   print(\"Int: ${e}\"); \/\/ \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 `e` \u044d\u0442\u043e int } catch(e) : is_type(e, \"double\") {     print(\"Double: ${e}\"); \/\/ \u0435\u0441\u043b\u0438 `e` \u044d\u0442\u043e double } <\/code><\/pre>\n<p>  \u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u043a\u0438\u0434\u0430\u0442\u044c \u0435\u0433\u043e. \u041e \u0442\u043e\u043c, \u043a\u0430\u043a \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432 C++, \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435. \u0414\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 ChaiScript \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a eval_error, bad_boxed_cast \u0438 \u0442.\u043f.<\/p>\n<h4>\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430<\/h4>\n<p>  \u041a \u043c\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e \u0432 \u044f\u0437\u044b\u043a\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0438 \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u2014 \u0438\u0445 \u0432\u0441\u0435\u0433\u043e 4 \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0441\u043b\u0443\u0436\u0430\u0442 \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a:   <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td>__LINE__<\/td>\n<td>\u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u0442\u043e &#8216;1&#8217;<\/td>\n<\/tr>\n<tr>\n<td>__FILE__<\/td>\n<td>\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u0442\u043e &#171;__EVAL__&#187;<\/td>\n<\/tr>\n<tr>\n<td>__CLASS__<\/td>\n<td>\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u043b\u0438 \u00abNOT_IN_CLASS\u00bb<\/td>\n<\/tr>\n<tr>\n<td>__FUNC__<\/td>\n<td>\u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043b\u0438 \u00abNOT_IN_FUNCTION\u00bb<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  <\/p>\n<h4>\u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043e\u0448\u0438\u0431\u043e\u043a<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435, \u043d\u0435 \u0431\u044b\u043b\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u2014 <code>method_missing(object, func_name, params)<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438:  <\/p>\n<pre><code class=\"javascript\">def method_missing(Widget w, string name, Vector v)  {     print(\"widget method ${name} with params {v} was not found\") }  w = Widget() w.invoke_error(1, 2, 3) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 widget method invoke_error with params [1, 2, 3] was not found <\/code><\/pre>\n<p>  <\/p>\n<h4>Built-in \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p>  \u0412 ChaiScript \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u043e\u0441\u043e\u0431\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445. \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445: <code>eval(str)<\/code>, <code>eval_file(filename)<\/code>, <code>to_json(object)<\/code>, <code>from_json(str)<\/code>:  <\/p>\n<pre><code class=\"javascript\">var x = 3 var y = 5 var res = eval(\"x * y\") \/\/ res = 15, \u0432 eval \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430  \/\/ \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430: \/\/ \u0447\u0435\u0440\u0435\u0437 eval_file eval_file(\"source.chai\") \/\/ \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 use, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f use(\"source.chai\")  \/\/ to_json \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 Map \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 var w = Widget(0) var j = to_json(w) \/\/ j = \"{ \"id\" : 0 }\" \/\/ from_json \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 Map (\u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442) var m = from_json(\" {     \"x\": 0,     \"y\": 3,     \"z\": 2 }\") print(m) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 Map \u043a\u0430\u043a [&lt;x, 0&gt;, &lt;y, 3&gt;, &lt;z, 2&gt;] <\/code><\/pre>\n<p>  <a name=\"cppchai\"><\/a>  <\/p>\n<h2>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0432 C++<\/h2>\n<p>  <\/p>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h4>\n<p>  ChaiScript \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f header-only \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 C++, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u0430\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c clone <a href=\"https:\/\/github.com\/ChaiScript\/ChaiScript\" rel=\"nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a> \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 <a href=\"https:\/\/github.com\/ChaiScript\/ChaiScript\/tree\/develop\/include\/chaiscript\" rel=\"nofollow\">\u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438<\/a> \u0432 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 IDE \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0430\u0445, \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0438 \u043a\u043e\u0434 \u0441 include-\u043e\u043c: <code>#include &lt;chaiscript\/chaiscript.hpp&gt;<\/code> \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<h4>\u0412\u044b\u0437\u043e\u0432 \u043a\u043e\u0434\u0430 C++ \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h4>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c ChaiScript \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435. \u041c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 C++, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0443\u044e std::string \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0435 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 ChaiScript, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0434\u0435\u043b\u043e \u043d\u0435 \u0438\u0437 \u043b\u0435\u0433\u043a\u0438\u0445:  <\/p>\n<pre><code class=\"cpp\">#include &lt;string&gt; #include &lt;chaiscript\/chaiscript.hpp&gt;  std::string greet_name(const std::string&amp; name)  {     return \"hello, \" + name; }  int main()  {     chaiscript::ChaiScript chai; \/\/ \u043e\u0431\u044a\u0435\u043a\u0442 chaiscript     chai.add(chaiscript::fun(&amp;greet_name), \"greet\"); \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u0430\u043a greet      \/\/ \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 eval  \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c     chai.eval(R\"(         print(greet(\"John\"));     )\"); }<\/code><\/pre>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441 \u2014 \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 ChaiScript \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f\u0437\u044b\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0435\u043c \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 access violation \u0438\u043b\u0438 segmentation fault. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 <a href=\"https:\/\/github.com\/ChaiScript\/ChaiScript\/issues\/338\" rel=\"nofollow\">issue \u043d\u0430 github<\/a>, \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <b><code>#define CHAISCRIPT_NO_THREADS<\/code><\/b> \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c. \u041a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b, \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0421++ \u0438 ChaiScript. \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>fun<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0444\u0443\u043d\u043a\u0442\u043e\u0440 \u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432 C++ \u043a\u043e\u0434\u0435 \u043a\u043b\u0430\u0441\u0441 Widget \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u0441 ChaiScript:  <\/p>\n<pre><code class=\"cpp\">class Widget {     int Id; public:     Widget(int id) : Id(id) { }     int GetId() const { return this-&gt;Id; } };  std::string ToString(const Widget&amp; w) {     return \"widget #\" + std::to_string(w.GetId()); }  int main() {     chaiscript::ChaiScript chai;     Widget w(2); \/\/ \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Widget \u0432 C++ \u043a\u043e\u0434\u0435      chai.add(chaiscript::fun([&amp;w] { return w; }), \"get_widget\"); \/\/ \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043c \u0435\u0433\u043e \u0432 \u043b\u044f\u043c\u0431\u0434\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442     chai.add(chaiscript::fun(ToString), \"to_string\"); \/\/ \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f     chai.add(chaiscript::fun(&amp;Widget::GetId), \"get_id\"); \/\/ \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430      \/\/ \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 Widget \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 GetId, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0435\u044f\u0432\u043d\u043e to_string, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u043b\u0438     chai.eval(R\"(         var w = get_widget()         print(w.get_id) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 2         print(w) \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 widget #2         )\"); } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, ChaiScript \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 C++ \u0438 \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u044b. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0433\u0434\u0435-\u0442\u043e \u0432 \u043a\u043e\u0434\u0435 \u043e\u0448\u0438\u0431\u0435\u0442\u0435\u0441\u044c, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u043a\u0438\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u043e\u0434\u0430 <code>error in function dispatch<\/code>, \u0447\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u2014 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c std::vector&lt;Widget&gt;. \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>chaiscript::var<\/code> \u0438 \u043c\u0435\u0442\u043e\u0434 <code>add_global<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c public-\u043f\u043e\u043b\u0435 <code>Data<\/code> \u0432 \u043d\u0430\u0448 Widget, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430:  <\/p>\n<pre><code class=\"cpp\">class Widget {     int Id; public:     int Data = 0;     Widget(int id) noexcept : Id(id) { }     int GetId() const { return this-&gt;Id; } };  std::string ToString(const Widget&amp; w) {     return \"widget #\" + std::to_string(w.GetId()) +         \" with data: \" + std::to_string(w.Data);  int main() {     chaiscript::ChaiScript chai;      std::vector&lt;Widget&gt; W; \/\/ \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 Widget     W.emplace_back(1);     W.emplace_back(2);     W.emplace_back(3);      chai.add(chaiscript::fund(ToString), \"to_string\");      chai.add(chaiscript::fun(&amp;Widget::Data), \"data\"); \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430           \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 ChaiScript     chai.add_global(chaiscript::var(std::ref(W)), \"widgets\"); \/\/ \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e std::ref     chai.add(chaiscript::fun(&amp;std::vector&lt;Widget&gt;::size), \"size\"); \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430         \/\/ \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f. \u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u0438\u043c \u0434\u0432\u0443\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0434\u0430\u043d\u043e \u043d\u0438\u0436\u0435     using IndexFuncType = Widget&amp; (std::vector&lt;Widget&gt;::*)(const size_t);     chai.add(chaiscript::fun(IndexFuncType(&amp;std::vector&lt;Widget&gt;::operator[])), \"[]\");      chai.eval(R\"(         for(var i = 0; i &lt; vec.size; ++i)         {             vec[i].data = i * 2;             print(vec[i])         }     )\"); } <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u0432\u044b\u0448\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d: <b><code>widget #1 with data: 0<\/code>,<code> widget #2 with data: 2<\/code>,<code> widget #3 with data: 4<\/code><\/b>. \u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432 ChaiScript \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430, \u0438 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code>std::vector<\/code> \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2014 <code>operator[]<\/code>. \u0422\u0435, \u043a\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 STL, \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u0443 <code>std::vector<\/code> \u0434\u0432\u0430 \u2014 \u043e\u0434\u0438\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0442\u0438\u043f \u2014 \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043d\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435:  <\/p>\n<pre><code class=\"cpp\">chai.add(chaiscript::var(x), \"x\"); \/\/ x \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 ChaiScript  chai.add(chaiscript::var(std::ref(x), \"x\"); \/\/ \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0437 C++ \u0438 ChaiScript  auto shared_x = std::make_shared&lt;int&gt;(5); chai.add(chaiscript::var(shared_x), \"x\"); \/\/ shared_ptr \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432 C++ \u0438\u043b\u0438 ChaiScript  chai.add(chaiscript::const_var(x), \"x\"); \/\/  \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 ChaiScript \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439  chai.add_global_const(chaiscript::const_var(x), \"x\"); \/\/ global const \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 x \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442  chai.add_global(chaiscript::var(x), \"x\"); \/\/ global \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0435\u0441\u043b\u0438 x \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442  chai.set_global(chaiscript::var(x), \"x\"); \/\/ \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 global \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0435\u0441\u043b\u0438 \u0442\u0430 \u043d\u0435 const <\/code><\/pre>\n<p>  <\/p>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 STL \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c STL-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 <b>\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435<\/b> \u0442\u0438\u043f\u044b \u0432 ChaiScript, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 \u0432\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b.  <\/p>\n<pre><code class=\"cpp\">using MyVector = std::vector&lt;std::pair&lt;int, std::string&gt;&gt;;  MyVector V; V.emplace_back(1, \"John\"); V.emplace_back(3, \"Bob\");  \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430\u0448\u0438 \u0442\u0438\u043f\u044b - vector \u0438 pair chai.add(chaiscript::bootstrap::standard_library::vector_type&lt;MyVector&gt;(\"MyVec\")); chai.add(chaiscript::bootstrap::standard_library::pair_type&lt;MyVector::value_type&gt;(\"MyVecData\"));  chai.add(chaiscript::var(std::ref(V)), \"vec\"); chai.eval(R\"(     for(var i = 0; i &lt; vec.size; ++i)     {       print(to_string(vec[i].first) + \" \" + vec[i].second)     }   )\");<\/code><\/pre>\n<p>  \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0438\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 ChaiScript, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0445\u043e\u0436\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 STL-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 c <code>std::vector&lt;Widget&gt;<\/code> \u044d\u0442\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a ChaiScript \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <code>vector_type<\/code>, \u043a\u043e\u0435\u0433\u043e \u0443 \u043d\u0430\u0448\u0435\u0433\u043e Widget \u043d\u0435 \u0431\u044b\u043b\u043e. <\/p>\n<h4>\u0421++ \u043a\u043b\u0430\u0441\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 ChaiScript<\/h4>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0432\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 ChaiScript, \u043d\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435. \u0427\u0442\u043e \u0436\u0435, \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441 Widget \u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043e\u0442 \u043d\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 WindowWidget, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u043e\u0431\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0439:  <\/p>\n<pre><code class=\"cpp\">class Widget {     int Id; public:     Widget(int id) : Id(id) { }     int GetId() const { return this-&gt;Id; } };  class WindowWidget : public Widget {     std::pair&lt;int, int&gt; Size; public:     WindowWidget(int id, int width, int height)         : Widget(id), Size(width, height) { }      int GetWidth()  const { return this-&gt;Size.first; }     int GetHeight() const { return this-&gt;Size.second; } };  int main() {     chaiscript::ChaiScript chai;      \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0438\u043f Widget \u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440     chai.add(chaiscript::user_type&lt;Widget&gt;(), \"Widget\");     chai.add(chaiscript::constructor&lt;Widget(int)&gt;(), \"Widget\");      \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0438\u043f WindowWidget \u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440     chai.add(chaiscript::user_type&lt;WindowWidget&gt;(), \"WindowWidget\");     chai.add(chaiscript::constructor&lt;WindowWidget(int, int, int)&gt;(), \"WindowWidget\");      \/\/ \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e Widget - \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f WindowWidget     chai.add(chaiscript::base_class&lt;Widget, WindowWidget&gt;());      \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u044b Widget \u0438 WindowWidget     chai.add(chaiscript::fun(&amp;Widget::GetId), \"get_id\");      chai.add(chaiscript::fun(&amp;WindowWidget::GetWidth), \"width\");     chai.add(chaiscript::fun(&amp;WindowWidget::GetHeight), \"height\");      \/\/ \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c WindowWidget \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b     chai.eval(R\"(         var window = WindowWidget(1, 800, 600)         print(\"${window.width} * ${window.height}\")         print(\"widget.id is ${window.get_id}\")     )\"); } <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 ChaiScript \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 C++ \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445), \u043f\u0440\u0438\u0432\u0435\u0434\u0438\u0442\u0435 \u0435\u0433\u043e \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 \u044f\u0432\u043d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 <code>std::vector&lt;Widget&gt;<\/code>.<\/p>\n<h4>\u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430<\/h4>\n<p>  \u0414\u043b\u044f \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438\u043b\u0438 \u043f\u043e\u043b\u0435\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 ChaiScript \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043b\u0438\u0431\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430:  <\/p>\n<pre><code class=\"cpp\">Widget w(3); w.Data = 4444;  \/\/ \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 Widget w chai.add(chaiscript::fun(&amp;Widget::GetId, &amp;w), \"widget_id\"); chai.add(chaiscript::fun(&amp;Widget::Data, &amp;w), \"widget_data\");  chai.eval(R\"(     print(widget_id)     print(widget_data) )\"); <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u00ab\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445\u00bb \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u0437 C++ \u0432 ChaiScript (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, vec3, complex, matrix) \u0447\u0430\u0441\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0412 ChaiScript \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>type_conversion<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0430\u0441\u0441 Complex \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f int \u0438 double \u0432 \u043d\u0435\u0433\u043e \u043f\u0440\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">class Complex { public:     float Re, Im;     Complex(float re, float im = 0.0f) : Re(re), Im(im) { } };  int main() {     chaiscript::ChaiScript chai;      \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c Complex, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u043f\u043e\u043b\u044f re, im, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 `=`     chai.add(chaiscript::user_type&lt;Complex&gt;(), \"Complex\");     chai.add(chaiscript::bootstrap::standard_library::assignable_type&lt;Complex&gt;(\"Complex\"));     chai.add(chaiscript::constructor&lt;Complex(float, float)&gt;(), \"Complex\");     chai.add(chaiscript::fun(&amp;Complex::Re), \"re\");     chai.add(chaiscript::fun(&amp;Complex::Im), \"im\");      \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 double \u0438 int \u0432 Complex     chai.add(chaiscript::type_conversion&lt;int, Complex&gt;());     chai.add(chaiscript::type_conversion&lt;double, Complex&gt;());      \/\/ \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 `+` \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430     chai.eval(R\"(         def `+`(Complex c, x)         {             var res = Complex(0, 0)             res.re = c.re + x.re             res.im = c.im + x.im             return res         }          var c = Complex(1, 2)         c = c + 3         print(\"${c.re} + ${c.im}i\")     )\"); \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: `4 + 2i` } <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0430\u043c\u043e\u043c C++, \u0430 \u043b\u0438\u0448\u044c \u0437\u0430\u0442\u0435\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0432 ChaiScript. \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>type_conversion<\/code>. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u043e\u0432. <br \/>  \u0421\u0445\u043e\u0436\u0438\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f Vector \u0438\u043b\u0438 Map ChaiScript&#8217;\u0430 \u0432 \u0432\u0430\u0448 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0442\u0438\u043f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b <code>vector_conversion<\/code> \u0438 <code>map_conversion<\/code>.<\/p>\n<h4>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 ChaiScript<\/h4>\n<p>  \u041c\u0435\u0442\u043e\u0434\u044b <code>eval<\/code> \u0438 <code>eval_file<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Boxed_Value<\/code>. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u043e\u0434\u0435 C++, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0430\u043a \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>boxed_cast&lt;T&gt;<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>bad_boxed_cast<\/code>:  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 double d = chai.eval&lt;double&gt;(\"5.3 + 2.1\");  \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0432\u0438\u0434\u0435 Boxed_Value, \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0442\u0438\u043f\u0443 auto v = chai.eval(\"5.3 + 2.1\"); double d = chai.boxed_cast&lt;double&gt;(v); <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u0438 ChaiScript \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e shared_ptr, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0442\u0438\u043f shared_ptr \u043f\u0440\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">auto x = chai.eval&lt;std::shared_ptr&lt;double&gt;&gt;(\"var x = 3.2\"); <\/code><\/pre>\n<p>  \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e shared_ptr, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b \u0440\u0438\u0441\u043a\u0443\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c access violation \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u0432 \u0445\u043e\u0434\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0438\u0437 ChaiScript \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432, \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 ChaiScript. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 Complex \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:  <\/p>\n<pre><code class=\"cpp\">auto printComplex = chai.eval&lt;std::function&lt;void(Complex)&gt;&gt;(R\"(     fun(Complex c) { print(\"${c.re} + ${c.im}i\"); } )\"); \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043b\u044f\u043c\u0431\u0434\u0443, \u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0449\u0443\u044e \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0435 \u0432 C++ printComplex(Complex(2, 3)); \/\/ \u0432\u044b\u0437\u043e\u0432 chaiscript, \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 `2 + 3i` <\/code><\/pre>\n<p>  <\/p>\n<h4>\u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 ChaiScript<\/h4>\n<p>  \u0410\u0432\u0442\u043e\u0440\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u043b\u043e\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e <code>eval_error<\/code> \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, <code>bad_boxed_cast<\/code>, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 <code>std::exception<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0442\u0438\u043f\u044b \u0421++:  <\/p>\n<pre><code class=\"cpp\">class MyException : public std::exception { public:     int Data;     MyException(int data) : std::exception(\"MyException\"), Data(data) { } };  int main() {     chaiscript::ChaiScript chai;          \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0442\u0438\u043f \u0432 chaiscript     chai.add(chaiscript::user_type&lt;MyException&gt;(), \"MyException\");     chai.add(chaiscript::constructor&lt;MyException(int)&gt;(), \"MyException\");      try     {         \/\/ \u0443\u043a\u0430\u0436\u0435\u043c \u043a \u043a\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u0430\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430         chai.eval(\"throw(MyException(11111))\",             chaiscript::exception_specification&lt;MyException, std::exception&gt;());     }     catch (MyException&amp; e)     {         std::cerr &lt;&lt; e.Data; \/\/ \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f `11111`     }     catch (chaiscript::exception::eval_error&amp; e)     {         std::cerr &lt;&lt; e.pretty_print();     }     catch(std::exception&amp; e)     {         std::cerr &lt;&lt; e.what();     } } <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0432 C++. \u041f\u043e\u043c\u0438\u043c\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>pretty_print<\/code>, \u0443 <code>eval_error<\/code> \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430, \u0434\u0435\u0442\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u043e \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<h4>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 ChaiScript<\/h4>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ChaiScript \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u043d\u0435\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0427\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/ChaiScript\/ChaiScript_Extras\" rel=\"nofollow\">ChaiScript Extras<\/a>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <b>math<\/b> \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e acos(x):  <\/p>\n<pre><code class=\"cpp\">#include &lt;chaiscript\/chaiscript.hpp&gt; #include &lt;chaiscript\/extras\/math.hpp&gt;  int main() {     chaiscript::ChaiScript chai;     \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443     auto mathlib = chaiscript::extras::math::bootstrap();     chai.add(mathlib);      std::cout &lt;&lt; chai.eval&lt;double&gt;(\"acos(0.5)\"); \/\/ ~1.047 } <\/code><\/pre>\n<p>  \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 \u0438 \u043f\u043e\u0442\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c math \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043b\u0438\u0431\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 C++ \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c.<br \/>  <a name=\"myexp\"><\/a>  <\/p>\n<h2>\u041b\u0438\u0447\u043d\u044b\u0439 \u043e\u043f\u044b\u0442<\/h2>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043f\u0438\u0448\u0443 3D-\u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0434 OpenGL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f <a href=\"https:\/\/github.com\/MomoDeve\/MSL\" rel=\"nofollow\">\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c<\/a>, \u043d\u043e, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u00ab\u0438\u0433\u0440\u0430 \u0431\u044b \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0430 \u0441\u0432\u0435\u0447\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<br \/>  \u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043e ChaiScript \u043a \u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u044f\u043b \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 Lua. \u0414\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0438 \u0441 \u0442\u0435\u043c, \u043d\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u044f \u0437\u043d\u0430\u043a\u043e\u043c \u043d\u0435 \u0431\u044b\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u043b\u0438\u044f\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b \u043a\u0430\u043a: \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 C++ \u0432\u043c\u0435\u0441\u0442\u043e C, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0437\u0430\u0431\u043e\u0440 \u0438\u0437 \u041e\u041e\u041f-\u043e\u0431\u0435\u0440\u0442\u043e\u043a \u043d\u0430\u0434 C-style \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. \u0414\u0443\u043c\u0430\u044e, \u043f\u043e \u0445\u043e\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043d\u0430 \u0447\u0442\u043e \u043f\u0430\u043b \u043c\u043e\u0439 \u0432\u044b\u0431\u043e\u0440.<\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f\u0437\u044b\u043a \u043c\u0435\u043d\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0438 \u043d\u0430\u0434 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430. \u0412 \u043a\u043e\u0434\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0430 ImGui, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 chaiscript. \u041f\u0430\u0440\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 3D-\u043e\u0431\u044a\u0435\u043a\u0442\u0430:  \/\/ rotation CHAI_IMPORT(&amp;GLInstance::RotateX, rotate_x); CHAI_IMPORT(&amp;GLInstance::RotateY, rotate_y); CHAI_IMPORT(&amp;GLInstance::RotateZ, rotate_z);  \/\/ scale CHAI_IMPORT((GLInstance&amp;(GLInstance::*)(float))&amp;GLInstance::Scale, scale); CHAI_IMPORT((GLInstance&amp;(GLInstance::*)(float, float, float))&amp;GLInstance::Scale, scale);  \/\/ translation CHAI_IMPORT(&amp;GLInstance::Translate, translate); CHAI_IMPORT(&amp;GLInstance::TranslateX, translate_x); CHAI_IMPORT(&amp;GLInstance::TranslateY, translate_y); CHAI_IMPORT(&amp;GLInstance::TranslateZ, translate_z); \t\t \/\/ hide \/ show CHAI_IMPORT(&amp;GLInstance::Hide, hide); CHAI_IMPORT(&amp;GLInstance::Show, show);  \/\/ getters CHAI_IMPORT(&amp;GLInstance::GetTranslation, translation); CHAI_IMPORT(&amp;GLInstance::GetRotation, rotation); CHAI_IMPORT(&amp;GLInstance::GetScale, scale); <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u0434\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rl\/bo\/td\/rlbotdpcfl4pdpbplwxfrvsk73i.png\" alt=\"image\"><br \/>  <i>\u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441 chaiscript \u043d\u0430 ImGui: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/i><\/p>\n<p>  \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432 \u0446\u0435\u043b\u043e\u043c \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430. \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, Lua \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u0438 \u044d\u0442\u043e\u0442 \u044f\u0437\u044b\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442 \u043a\u043e\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (JIT \u0432\u0441\u0435 \u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u043e\u0435 \u0434\u0435\u043b\u043e), \u043d\u043e \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u0447\u0435\u0442\u043e\u0432 ChaiScript \u0432\u0441\u0435 \u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0438\u043d\u0433\u0435, \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043c\u0435\u043b\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u043c\u0438.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u0439 \u043d\u043e\u0442\u0435 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u043b\u0438 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u043c\u0438 \u044f\u0437\u044b\u043a\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 C++ (\u0431\u0443\u0434\u044c \u0442\u043e Lua \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a), \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0432\u0430\u0448\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e ChaiScript \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0438\u043d\u0433\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c. \u0422\u0430\u043a\u0436\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412\u0441\u0435\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 ChaiScript: <a href=\"http:\/\/chaiscript.com\" rel=\"nofollow\">chaiscript.com<\/a><\/li>\n<li>\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043f\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435: <a href=\"https:\/\/github.com\/ChaiScript\/ChaiScript\/blob\/develop\/cheatsheet.md\" rel=\"nofollow\">ChaiScript cheatsheet<\/a><\/li>\n<li>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: <a href=\"https:\/\/codedocs.xyz\/ChaiScript\/ChaiScript\/\" rel=\"nofollow\">codedocs.xyz\/ChaiScript\/ChaiScript<\/a><\/li>\n<li>\u041c\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c ChaiScript: <a href=\"https:\/\/github.com\/MomoDeve\/MomoEngine\" rel=\"nofollow\">github.com\/MomoDeve\/MomoEngine<\/a><\/li>\n<\/ul>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d() } } }t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>      <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/483540\/\"> https:\/\/habr.com\/ru\/post\/483540\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/483540\/\">\u041a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 C++, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 Lua. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0434\u0440\u0443\u0433\u043e\u043c, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0438 \u043b\u0435\u0433\u043a\u043e\u043c \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u044f\u0437\u044b\u043a\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c ChaiScript. <br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zh\/vl\/py\/zhvlpyg_87wuf7gg0alk-s7qeyo.png\" alt=\"image\">  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-296990","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296990","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=296990"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296990\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=296990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=296990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=296990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}