{"id":401399,"date":"2024-06-29T15:49:58","date_gmt":"2024-06-29T15:49:58","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=401399"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=401399","title":{"rendered":"<span>\u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u043c\u0438 \u0438 \u043a\u0430\u043a \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f?<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u041a\u0430\u0440\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0438 \u0443 \u043c\u0435\u043d\u044f\u2026 \u043f\u043e\u0441\u0442\u0442\u0440\u0430\u0432\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0435\u0441\u0441\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f, \u0441 \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u043b\u0435\u0447\u0438\u0442\u044c \u043f\u0443\u0442\u0451\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0440\u0430\u0432\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/oh\/a8\/fd\/oha8fdciyzawz3-rdjxlkjxcase.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/oh\/a8\/fd\/oha8fdciyzawz3-rdjxlkjxcase.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 <a href=\"https:\/\/holyjs-piter.ru\/\">HolyJS&#8217;21<\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/www.youtube.com\/watch?v=rQEqXIo4PVM\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0437\u0430\u043f\u0438\u0441\u044c<\/a>, <a href=\"https:\/\/github.com\/nin-jin\/slides\/tree\/master\/sourcemap\">\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u043b\u0438\u0431\u043e <a href=\"https:\/\/nin-jin.github.io\/slides\/sourcemap\/\">\u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0439<\/a>.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"kak-ya-do-etogo-dokatilsya\">\u041a\u0430\u043a \u044f \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043a\u0430\u0442\u0438\u043b\u0441\u044f?<\/h2>\n<p>  <\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0431\u043e\u043b\u0435\u0437\u043d\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/nin-jin\/slides\/tree\/master\/tree\">\u0424\u043e\u0440\u043c\u0430\u0442 tree<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hyoo-ru\/mam_mol\/tree\/master\/view#viewtree\">\u042f\u0437\u044b\u043a view.tree<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nin-jin\/slides\/tree\/master\/mol\">\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a $mol<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 Tree \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435. \u041d\u0430 \u0431\u0430\u0437\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f\u0437\u044b\u043a\u043e\u0432. \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u2014 \u044f\u0437\u044b\u043a <code>view.tree<\/code> \u2014 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u0445 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 $mol. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0438 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"zachem-dsl-boylerpleyt\">\u0417\u0430\u0447\u0435\u043c DSL? \u0411\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442!<\/h2>\n<p>  <\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 $mol:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$my_app $my_page     title @ \\Are you ready for SPAM?     body \/         &lt;= Agree $my_checkbox             checked?val &lt;=> agree?val true<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u0430\u043d\u0435\u043b\u044c\u043a\u0438, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0447\u0435\u043a\u0431\u043e\u043a\u0441. \u0418 \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u043d\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0441\u0432\u044f\u0437\u044c\u044e \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c. \u0412 \u044d\u0442\u0438\u0445 5 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 \u043a\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 JavaScript \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 5 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">class $my_app extends $my_page {     title() {         return this.$.$my_text( '$my_app_title' )     }     body() {         return [ this.Agree() ]     }     Agree() {         const obj = new this.$.$my_checkbox()         obj.checked = val => this.agree( val )         return obj     }     agree( val = true ) {         return val     } } $my_mem( $my_app.prototype, \"agree\" ) $my_mem( $my_app.prototype, \"Agree\" )<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434, \u0445\u043e\u0442\u044c \u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u043c\u043d\u043e\u0433\u0438\u043c \u044f\u0437\u044b\u043a\u0435, \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u0442\u0435\u0440\u044f\u043b \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u044f \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438. \u041f\u043b\u043e\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u0445\u043e\u0440\u043e\u0448 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0442 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0430\u0441\u043f\u0435\u043a\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f DSL \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u043a\u043e\u0441\u044f\u0447\u0438\u0442\u044c, \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<h2 id=\"zachem-dsl-polzovatelskie-skripty\">\u0417\u0430\u0447\u0435\u043c DSL? \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b!<\/h2>\n<p>  <\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f DSL \u2014 \u044d\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u0434\u0430\u0447, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">@assignee = $me @component = \\Frontend @estimate ?= 1D @deadline = $prev.@deadline + @estimate<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u043e\u043d \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u043d\u0430\u0437\u043d\u0430\u0447\u044c \u043c\u0435\u043d\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438; \u0443\u043a\u0430\u0436\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u0441\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0443; \u0435\u0441\u043b\u0438 \u044d\u0441\u0442\u0438\u043c\u0435\u0439\u0442 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d, \u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0448\u0438 1 \u0434\u0435\u043d\u044c; \u0438 \u0432\u044b\u0441\u0442\u0440\u043e\u0439 \u0438\u0445 \u0434\u0435\u0434\u043b\u0430\u0439\u043d\u044b \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u044d\u0441\u0442\u0438\u043c\u0435\u0439\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<h2 id=\"js-v-pesochnice-eto-zakonno7\">JS \u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435? \u042d\u0442\u043e \u0437\u0430\u043a\u043e\u043d\u043d\u043e?!7<\/h2>\n<p>  <\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432\u044b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435: \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432 \u0440\u0443\u043a\u0438 JS? \u0418 \u0442\u043e\u0433\u0434\u0430 \u044f \u0441 \u0432\u0430\u043c\u0438, \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e, \u0441\u043e\u0433\u043b\u0430\u0448\u0443\u0441\u044c. \u0423 \u043c\u0435\u043d\u044f \u0434\u0430\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/hyoo-ru\/mam_mol\/tree\/master\/func\/sandbox\">\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e JS<\/a>. \u0418 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/sandbox.js.hyoo.ru\">sandbox.js.hyoo.ru<\/a><\/p>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/habhub.hyoo.ru\/#!author=nin-jin\/repo=HabHub\/article=19\">\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0435\u0451<\/a>. \u041c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: <a href=\"https:\/\/sandbox.js.hyoo.ru\/#!script=let%20Function%20%3D%20%28%20function*%28%29%7B%7D%20%29.constructor%0Alet%20getCookie%20%3D%20Function%28%20'return%20document.cookie'%20%29%0Areturn%20getCookie%28%29.next%28%29.value\">Function is not a function<\/a> \u2014 \u0432 \u043e\u0447\u0435\u043d\u044c \u0434\u0443\u0445\u0435 JS.<\/p>\n<p>  <\/p>\n<h2 id=\"js-v-pesochnice-ne-eto-ne-dlya-srednih-umov\">JS \u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435? \u041d\u0435, \u044d\u0442\u043e \u043d\u0435 \u0434\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u0443\u043c\u043e\u0432..<\/h2>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f JS \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u0435\u043d. <\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ao\/yq\/5p\/aoyq5pthfqsvo7mhyarqrsse3ug.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ao\/yq\/5p\/aoyq5pthfqsvo7mhyarqrsse3ug.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0415\u043c\u0443 \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044f\u0437\u044b\u043a, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0435\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0430 \u043d\u0435 \u044f\u0437\u044b\u043a \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 JS.<\/p>\n<p>  <\/p>\n<h2 id=\"zachem-dsl-raznye-targety\">\u0417\u0430\u0447\u0435\u043c DSL? \u0420\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0440\u0433\u0435\u0442\u044b!<\/h2>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 DSL \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u0445:<\/p>\n<p>  <\/p>\n<ul>\n<li>JS<\/li>\n<li>WASM<\/li>\n<li>GPU<\/li>\n<li>JVM<\/li>\n<li>CIL<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"a-raznye-targety-zachem-odna-model-chtoby-pravit-vsemi\">\u0410 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0440\u0433\u0435\u0442\u044b \u0437\u0430\u0447\u0435\u043c? \u041e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435\u043c\u0438!<\/h2>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b. \u0417\u0430 \u043f\u043e\u043b \u0433\u043e\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e. \u0418 \u0432\u0441\u0451 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b\u0439 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u043c DSL, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0438\u0445 \u0442\u0438\u043f\u044b, \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u043a\u0430\u043a\u0438\u0435 \u043d\u0430 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435. \u0412\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u043e\u0434 \u0441\u043e\u0442\u043d\u044e \u0441\u0432\u044f\u0437\u0435\u0439. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0447\u0438..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">Task     title String     estimate Duration<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u0430\u043a \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0442\u0430\u043a \u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0445\u0435\u043c\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">class Task extends Model {     title() {         return this.json().title     }     estimate() {         return new Duration( this.json().estimate )     } } $my_mem( Task.prototype, \"estimate\" )  CREATE CLASS Task extends Model; CREATE PROPERTY title string; CREATE PROPERTY estimate string;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 (\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433) \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435, \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u0451\u0440\u0433\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0437\u0430 \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  <\/p>\n<h2 id=\"zachem-dsl-fatalnyy-nedostatok-zhe\">\u0417\u0430\u0447\u0435\u043c DSL? \u0424\u0430\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0436\u0435!<\/h2>\n<p>  <\/p>\n<p>\u041d\u0443 \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0435\u0437\u0434\u044b \u043d\u0430 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0435?<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/bf\/r_\/dx\/bfr_dxmy-xwvpql8fxv3x1c2vha.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/bf\/r_\/dx\/bfr_dxmy-xwvpql8fxv3x1c2vha.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<h2 id=\"zachem-vsyo-eto-transpilyaciya-i-proverki\">\u0417\u0430\u0447\u0435\u043c \u0432\u0441\u0451 \u044d\u0442\u043e? \u0422\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438!<\/h2>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>Babel \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u0442\u0440\u0430\u043d\u0441\u043f\u0430\u0439\u043b\u0435\u0440\u044b<\/strong>.<\/li>\n<li>Uglify \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b<\/strong>.<\/li>\n<li>TypeScript, AssemblyScript \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/strong>.<\/li>\n<li>TypeScript, FlowJS, Hegel \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u0442\u0430\u0439\u043f\u0447\u0435\u043a\u0435\u0440\u044b<\/strong>.<\/li>\n<li>SCSS, Less, Stylus PostCSS \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>CSS \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/strong>.<\/li>\n<li>SVGO, CSSO \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/strong>.<\/li>\n<li>JSX, Pug, Handlebars \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/strong>.<\/li>\n<li>MD, TeX \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u044f\u0437\u044b\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438<\/strong>.<\/li>\n<li>ESLint \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u043b\u0438\u043d\u0442\u0435\u0440\u044b<\/strong>.<\/li>\n<li>Pretier \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>\u0444\u043e\u0440\u043c\u0430\u0442\u0442\u0435\u0440\u044b<\/strong>.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u0414\u0430 \u0434\u0430\u0436\u0435 \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0433\u0438\u043d \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0435\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c. \u041d\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441 \u043f\u043e\u0434\u0441\u0442\u0435\u0440\u0435\u0433\u0430\u044e\u0442 \u043d\u0430 \u043f\u0443\u0442\u0438..<\/p>\n<p>  <\/p>\n<h2 id=\"tak-kakie-problemy-eto-ne-to-chto-ya-napisal\">\u0422\u0430\u043a \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b? \u042d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b!<\/h2>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043c\u0430\u0440\u043a\u0434\u0430\u0443\u043d-\u0448\u0430\u0431\u043b\u043e\u043d..<\/p>\n<p>  <\/p>\n<pre><code class=\"markdown\">Hello, **World**!<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u043c\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0441\u0438\u0441\u0442\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 DOM \u0447\u0435\u0440\u0435\u0437 JS..<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">function make_dom( parent ) {     {         const child = document.createTextNode( \"Hello, \" )         parent.appendChild( child )     }     {         const child = document.createElement( \"strong\" )         void ( parent => {             const child = document.createTextNode( \"World\" )             parent.appendChild( child )         } )( child )         parent.appendChild( child )     }     {          const child = document.createTextNode( \"!\" )         parent.appendChild( child )     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u0442\u0441\u044f \u0441 \u043d\u0438\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0434\u0435\u0431\u0430\u0433\u0435, \u0442\u043e \u0435\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u043b\u0430\u043f\u0448\u0435\u043a\u043e\u0434, \u0438 \u0447\u0442\u043e \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0435\u043b\u0430\u0435\u0442.<\/p>\n<p>  <\/p>\n<h2 id=\"tak-kakie-problemy-da-tut-chyort-nogu-slomit\">\u0422\u0430\u043a \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b? \u0414\u0430 \u0442\u0443\u0442 \u0447\u0451\u0440\u0442 \u043d\u043e\u0433\u0443 \u0441\u043b\u043e\u043c\u0438\u0442!<\/h2>\n<p>  <\/p>\n<p>\u0421\u043e\u0432\u0441\u0435\u043c \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u0434\u0443\u0442\u044b\u0439, \u043d\u043e \u0438 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043e\u0434\u043d\u043e\u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439..<\/p>\n<p>  <\/p>\n<pre><code class=\"markdown\">Hello, **World**!<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"javascript\">function make_dom(e){{const t=document.createTextNode(\"Hello, \"); e.appendChild(t)}{const t=document.createElement(\"strong\"); (e=>{const t=document.createTextNode(\"World\");e.appendChild(t)})(t), e.appendChild(t)}{const t=document.createTextNode(\"!\");e.appendChild(t)}}<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"chem-pomogut-sorsmapy-ishodniki-i-otladka\">\u0427\u0435\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b? \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430!<\/h2>\n<p>  <\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u0442\u043e\u0442 \u043a\u043e\u0434, \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/845\/e97\/f02\/845e97f02632f54b82ebc8ac2b107430.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/845\/e97\/f02\/845e97f02632f54b82ebc8ac2b107430.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u043a\u0438: \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0438\u043d\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435. \u041f\u043e\u0447\u0442\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0435\u043d\u044c\u043a\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"chem-pomogut-sorsmapy-stek-treysy\">\u0427\u0435\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b? \u0421\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u044b!<\/h2>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/823\/2d4\/da1\/8232d4da193a2176e44cc80dc3630b95.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/823\/2d4\/da1\/8232d4da193a2176e44cc80dc3630b95.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u043f\u0435\u0440\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0432 \u0444\u043e\u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044f \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430 \u043b\u0435\u0442\u0443 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<h2 id=\"chem-pomogut-sorsmapy-znacheniya-peremennyh\">\u0427\u0435\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b? \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445!<\/h2>\n<p>  <\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u0438\u043f\u043e\u0441\u0442\u0430\u0441\u044c \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u2014 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/eab\/2b8\/31b\/eab2b831bba151b615441a53034d225d.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/eab\/2b8\/31b\/eab2b831bba151b615441a53034d225d.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u044f <code>next<\/code>, \u043d\u043e \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0442, \u0438\u0431\u043e \u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>pipe<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0430 <code>next<\/code>, \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0430\u043f\u0438\u043d\u0433 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0443\u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>pipe<\/code>.<\/p>\n<p>  <\/p>\n<h2 id=\"specifikaciya-ne-ne-slyshal\">\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f? \u041d\u0435, \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b..<\/h2>\n<p>  <\/p>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0442\u044c \u0438 \u0432\u0441\u0451, \u043c\u044b \u0432 \u0448\u043e\u043a\u043e\u043b\u0430\u0434\u0435. \u042d\u0442\u043e\u0439 \u0448\u0442\u0443\u043a\u0435 \u0432\u0435\u0434\u044c \u0443\u0436\u0435 10 \u043b\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u0441\u0451 \u043d\u0435 \u0442\u0430\u043a \u0440\u0430\u0434\u0443\u0436\u043d\u043e..<\/p>\n<p>  <\/p>\n<ul>\n<li>V1 \u2014 Internal Closure Inspector format<\/li>\n<li><a href=\"https:\/\/docs.google.com\/document\/d\/1xi12LrcqjqIHTtZzrzZKmQ3lbTv9mKrN076UB-j3UZQ\/edit\">Proposal V2 2010<\/a> +JSON -20%<\/li>\n<li><a href=\"https:\/\/docs.google.com\/document\/d\/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k\/edit\">Proposal V3 2013<\/a> \u2014 50%<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0421\u043f\u0435\u043a\u0430 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 3 \u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0435\u0440\u0432\u0443\u044e \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u0432 Google Docs.<\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0433\u0435\u0440\u043e\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u043e\u0440\u043e\u043b\u0441\u044f \u0437\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432. \u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u043e\u043d\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0438\u0441\u044c \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 60%. \u042d\u0442\u043e \u043c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043c\u0435\u0448\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435, \u0442\u0430\u043a \u0435\u0449\u0451 \u0431\u043e\u0440\u044c\u0431\u0430 \u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435, \u0432\u0435\u0434\u044c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u043b\u0438\u0448\u044c \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u0442\u043e \u043b\u0438\u0448\u044c \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0435\u0434\u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0449\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435!<\/p>\n<p>  <\/p>\n<h2 id=\"kak-vsyo-zhe-razobratsya-v-sorsmapah\">\u041a\u0430\u043a \u0432\u0441\u0451 \u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u0445?<\/h2>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u043c\u0438, \u0442\u043e \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/www.html5rocks.com\/en\/tutorials\/developertools\/sourcemaps\/\">Introduction to JavaScript Source Maps<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/509250\/\">Source Maps: \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u043f\u0440\u043e \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u043d\u044b \u0442\u0443\u0442 \u0438 \u0442\u0430\u043c \u0432\u043e \u0438\u043c\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430..<\/p>\n<p>  <\/p>\n<h2 id=\"kak-sorsmapy-podklyuchayutsya\">\u041a\u0430\u043a \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f?<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 HTTP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">SourceMap: &lt;url><\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u0435\u0441\u0442\u043e\u043b\u043a\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/# sourceMappingURL=&lt;url.js.map>  \/*# sourceMappingURL=&lt;url.css.map> *\/<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f JS \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043b\u044f CSS. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d \u0438 \u0434\u043b\u044f JS, \u043d\u043e \u043d\u0435\u0442, \u0442\u0430\u043a \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043e\u0434\u043d\u043e\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u043c\u0438. \u041d\u0430\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 JS \u043a\u043e\u0434\u0430 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u044f CSS. \u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0442 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>  <\/p>\n<h2 id=\"kak-sorsmapy-ustroeny\">\u041a\u0430\u043a \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b?<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0443 \u043d\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0438..<\/p>\n<p>  <\/p>\n<pre><code class=\"json\">{     \"version\": 3,     \"sources\": [ \"url1\", \"url2\", ... ],     \"sourcesContent\": [ \"src1\", \"src2\", ... ],     \"names\": [ \"va1\", \"var2\", ... ],     \"mappings\": \"AAAA,ACCO;AAAA,ADJH,WFCIG;ADJI;...\" }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0435 <code>sources<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u0422\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u041d\u043e \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0442\u044c \u044d\u0442\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432 <code>sourcesContent<\/code> \u2014 \u044d\u0442\u043e \u0443\u0431\u0435\u0440\u0435\u0436\u0451\u0442 \u0432\u0430\u0441 \u043e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u0430\u043f\u0438\u043d\u0433\u0438 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u0440\u0443\u0433\u043e\u0439, \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043a\u0430\u0447\u0430\u044e\u0442\u0441\u044f. \u0418 \u0442\u043e\u0433\u0434\u0430 \u2014 \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0414\u0430, \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435, \u0437\u0430\u0442\u043e \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0433\u043b\u044e\u0447\u0430\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u044f \u0442\u0430 \u0431\u043e\u0440\u044c\u0431\u0430 \u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u0431\u044b\u043b\u0430 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430 \u2014 \u044d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u043e\u043b\u0435 <code>names<\/code> \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u042d\u0442\u043e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u044c \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0443\u043c\u0435\u044e\u0442 \u043a\u0430\u043a \u043f\u0440\u044f\u043c\u043e\u0439, \u0442\u0430\u043a \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0430\u043f\u0438\u043d\u0433. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0438 \u0441\u0430\u043c\u0438 \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u0443 \u0430 \u0432 \u043f\u043e\u043b\u0435 <code>mappings<\/code> \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u0430\u043f\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"kak-rasshifrovat-mapingi\">\u041a\u0430\u043a \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043f\u0438\u043d\u0433\u0438?<\/h2>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043c\u0430\u043f\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">AAAA,ACCO; AAAA,ADJH,WFCIG; ADJI; ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0430\u043d\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438. \u0410 \u0432 \u043a\u043e\u043d\u0446\u0435 \u2014 \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a. \u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 3 \u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c 3 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0438\u0441\u044f\u0449\u0435\u0439, \u0430 \u0432\u043e\u0442 \u0437\u0430\u043f\u044f\u0442\u044b\u0435 \u0432\u0438\u0441\u044f\u0449\u0438\u043c\u0438 \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443\u0442. \u041d\u0443, \u0442\u043e\u0447\u043d\u0435\u0435, \u0424\u0424 \u0438\u0445 \u0441\u043a\u0443\u0448\u0430\u0435\u0442 \u0438 \u043d\u0435 \u043f\u043e\u0434\u0430\u0432\u0438\u0442\u0441\u044f, \u0430 \u0432\u043e\u0442 \u0425\u0440\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p>  <\/p>\n<h2 id=\"eto-chto-za-spany-takie\">\u042d\u0442\u043e \u0447\u0442\u043e \u0437\u0430 \u0441\u043f\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u0435?<\/h2>\n<p>  <\/p>\n<p>\u0421\u043f\u0430\u043d \u2014 \u044d\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0447\u0438\u0441\u0435\u043b \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 1, 4 \u0438\u043b\u0438 5 \u0448\u0442\u0443\u043a. \u0421\u043f\u0430\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pm\/rb\/mn\/pmrbmnzdwujys9rdgywjm_o5b10.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pm\/rb\/mn\/pmrbmnzdwujys9rdgywjm_o5b10.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u044f\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <code>names<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 (\u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438), \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c.<\/p>\n<p>  <\/p>\n<h2 id=\"tak-chto-v-etih-chislah-to\">\u0422\u0430\u043a \u0447\u0442\u043e \u0432 \u044d\u0442\u0438\u0445 \u0447\u0438\u0441\u043b\u0430\u0445-\u0442\u043e?<\/h2>\n<p>  <\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 4 \u0447\u0438\u0441\u043b\u0430 \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0435, \u043d\u043e\u043c\u0435\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430, \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/05\/56\/qo\/0556qo-lxeehub6eic7ypgqk7lc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/05\/56\/qo\/0556qo-lxeehub6eic7ypgqk7lc.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0418\u043c\u0435\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 0. \u0422\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0447\u0438\u0441\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0442\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0443\u0434\u0430 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043d\u0435 \u043c\u0430\u043f\u0438\u0442\u0441\u044f. \u0427\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0430\u0434\u043e. \u0410 \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u0430 \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f..<\/p>\n<p>  <\/p>\n<h2 id=\"i-eto-vsyo-v-5-baytah-differencialnoe-kodirovanie\">\u0418 \u044d\u0442\u043e \u0432\u0441\u0451 \u0432 5 \u0431\u0430\u0439\u0442\u0430\u0445? \u0414\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435!<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430\u0438\u0432\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0430\u043d\u044b \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0430\u043a (\u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043e\u0434\u0438\u043d \u0441\u043f\u0430\u043d)..<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>TC<\/th>\n<th>SI<\/th>\n<th>SR<\/th>\n<th>SC<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>1<\/td>\n<td>40<\/td>\n<td>30<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>3<\/td>\n<td><strong>900<\/strong><\/td>\n<td>10<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>3<\/td>\n<td><strong>910<\/strong><\/td>\n<td>20<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041d\u043e \u0432 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u0430\u043d\u0430. \u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u2014 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0441\u043f\u0430\u043d\u043e\u043c..<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>TC<\/th>\n<th>SI<\/th>\n<th>SR<\/th>\n<th>SC<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>1<\/td>\n<td>40<\/td>\n<td>30<\/td>\n<\/tr>\n<tr>\n<td>+3<\/td>\n<td>+2<\/td>\n<td><strong>+860<\/strong><\/td>\n<td>-20<\/td>\n<\/tr>\n<tr>\n<td>+3<\/td>\n<td>0<\/td>\n<td><strong>+10<\/strong><\/td>\n<td>+10<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a 40 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u0430\u043d\u0430 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c 860, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f 900 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043f\u0430\u043d\u0430, \u0430 \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 10, \u0442\u043e 910 \u0434\u043b\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u043f\u0430\u043d\u0430.<\/p>\n<p>  <\/p>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u2014 \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u043a 0. <\/p>\n<p>  <\/p>\n<h2 id=\"i-eto-vsyo-v-5-baytah-vlq-kodirovanie\">\u0418 \u044d\u0442\u043e \u0432\u0441\u0451 \u0432 5 \u0431\u0430\u0439\u0442\u0430\u0445? VLQ \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435!<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Variable-length_quantity\">VLQ \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a>, \u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0447\u0438\u0441\u043b\u043e \u043a 0, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u0430\u0439\u0442 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f..<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>Values<\/th>\n<th>Bits Count<\/th>\n<th>Bytes Count<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>-15\u2026 +15<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>-511\u2026 +511<\/td>\n<td>10<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>-16383\u2026 +16383<\/td>\n<td>15<\/td>\n<td>3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043a\u0430\u0436\u0434\u044b\u0435 5 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0431\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u043e 1 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443. \u042d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 WebAssembly \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/LEB128\">LEB128<\/a>, \u0433\u0434\u0435 \u043f\u043e \u0431\u0430\u0439\u0442\u0443 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 7 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0431\u0438\u0442. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u0410 \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442 \u043c\u0430\u043f\u0438\u043d\u0433\u0438 \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0438, \u0430 \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e-\u0442\u043e \u0438 \u0432\u044b\u0438\u0433\u0440\u0430\u043b\u0438. \u041d\u0443 \u0434\u0430 \u043b\u0430\u0434\u043d\u043e, \u044d\u0442\u043e \u0435\u0449\u0451 \u0446\u0432\u0435\u0442\u043e\u0447\u043a\u0438..<\/p>\n<p>  <\/p>\n<h2 id=\"kak-zhe-sorsmapy-horoshi-byl-by-ishodnik\">\u041a\u0430\u043a \u0436\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u0438! \u0411\u044b\u043b \u0431\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a..<\/h2>\n<p>  <\/p>\n<p>\u0421\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u043c\u0430\u043f\u044f\u0442 \u043d\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0430\u0439\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432 \u0434\u0440\u0443\u0433\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0433 \u0431\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041e\u043d\u0438 \u043c\u0430\u043f\u044f\u0442 \u043b\u0438\u0448\u044c \u0442\u043e\u0447\u043a\u0438. \u0418 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043c\u0430\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u2014 \u043e\u043d\u043e \u043a\u0430\u043a \u0431\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<p>  <\/p>\n<p>\u0418 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0437\u0430\u043c\u0430\u043f\u0438\u043c, \u0442\u043e \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e..<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qc\/yc\/nc\/qcycnc3qglfbyg9vemcmwof5usa.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qc\/yc\/nc\/qcycnc3qglfbyg9vemcmwof5usa.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 Bar. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u043f\u0438\u043d\u0433 (\u0430 \u043c\u0430\u043f\u0438\u0442\u044c-\u0442\u043e \u0435\u0433\u043e \u043d\u0435\u043a\u0443\u0434\u0430), \u0442\u043e \u043e\u043d \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0442\u0441\u044f \u043a Foo. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e Foo \u043c\u0430\u043f\u0438\u0442\u0441\u044f \u043d\u0430 FooBar, \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e, \u043d\u0443\u0436\u043d\u043e Bar \u0437\u0430\u043c\u0430\u043f\u0438\u0442\u044c \u0432 \u043d\u0438\u043a\u0443\u0434\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043d\u0443\u0436\u0435\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043f\u0430\u043d\u0430 \u0441 \u043e\u0434\u043d\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0441\u043b\u043e 3, \u0442\u0430\u043a \u043a\u0430\u043a Bar \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e (\u0438\u043b\u0438 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438) \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0437\u0430\u043c\u0430\u043f\u043b\u0435\u043d, \u0430 Foo \u043c\u0430\u043f\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u043d\u0430 Foo.<\/p>\n<p>  <\/p>\n<h2 id=\"kak-zhe-sorsmapy-horoshi-byl-by-rezultat\">\u041a\u0430\u043a \u0436\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u0438! \u0411\u044b\u043b \u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442..<\/h2>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0435\u0441\u0442\u044c, \u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043d \u043d\u0435 \u0438\u0434\u0451\u0442. \u0418 \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0440\u0438\u043b\u0438\u043f\u0430\u043d\u0438\u0435\u043c..<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ew\/ew\/ae\/ewewaeps8nxiz3hcmpk6vdm-yp4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ew\/ew\/ae\/ewewaeps8nxiz3hcmpk6vdm-yp4.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u0434\u043e \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0441\u0451 \u0436\u0435 \u0437\u0430\u043c\u0430\u043f\u0438\u0442\u044c. \u041d\u043e \u043a\u0443\u0434\u0430? \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u2014 \u044d\u0442\u043e \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u042d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0418 \u0432\u0441\u0451 \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043d\u0430\u0448 \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u0430\u043b\u0435\u0435 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u0435, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445 \u043c\u0430\u043f\u0438\u043d\u0433\u0438. \u0423\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043e\u043d\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0435\u0446 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e. \u0418 \u0432\u0441\u0451 \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. <\/p>\n<p>  <\/p>\n<h2 id=\"a-esli-nado-skleit-sorsmapy\">\u0410 \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b?<\/h2>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0445\u0438\u0442\u0440\u044b\u0439 \u0440\u0435\u043c\u0430\u043f\u0438\u043d\u0433 \u043f\u0440\u0438 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438, \u043d\u043e \u0442\u0443\u0442 \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432. \u0412\u043e\u0442 \u044d\u0442\u043e \u0442\u0432\u0438\u0441\u0442! \u0418\u0445 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u0432\u0430. \u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0443\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">{     version: 3,     sections: [         {             offset: {                 line: 0,                 column: 0             },             url: \"url_for_part1.map\"         },         {             offset: {                 line: 100,                 column: 10             },             map: { ... }         }     ], }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438 \u043b\u0438\u0431\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043e\u0440\u0441\u043c\u0430\u043f, \u043b\u0438\u0431\u043e \u0441\u0430\u043c\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0447\u0451\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0435\u043a\u0446\u0438\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &#171;\u0441\u0442\u0440\u043e\u043a\u0430-\u043a\u043e\u043b\u043e\u043d\u043a\u0430&#187;, \u0447\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u0412\u0435\u0434\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043c\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0435\u0441\u0435\u043b\u043e \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043a\u043e\u043b\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438\u0441\u044c \u0431\u044b \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0411\u043b\u0430\u0433\u043e \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b by design \u0438\u0445 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442.<\/p>\n<p>  <\/p>\n<h2 id=\"a-makrosy-mapim-na-ih-vnutryanku\">\u0410 \u043c\u0430\u043a\u0440\u043e\u0441\u044b? \u041c\u0430\u043f\u0438\u043c \u043d\u0430 \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u044f\u043d\u043a\u0443..<\/h2>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u0440\u0430\u0439\u043d\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u0430\u043a\u0440\u043e\u0441 <code>log<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&#8230;<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">template log( value ) {     if( logLevel > Info ) { \/\/ A         console.log( value ) \/\/ B     } }  log!stat1() log!stat2() log!stat3()<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043d\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u0451\u043b\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0438\u0448\u0435\u043c \u043a\u0443\u0447\u0443 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0443\u0434\u0430 \u043c\u0430\u043f\u0438\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c \u043a\u043e\u0434?<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if( logLevel > Info ) { \/\/ A     console.log( stat1() ) \/\/ B }  if( logLevel > Info ) { \/\/ A     console.log( stat2() ) \/\/ B }  if( logLevel > Info ) { \/\/ A     console.log( stat3() ) \/\/ B }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043c\u0430\u043f\u0438\u043c \u0435\u0433\u043e \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u043e\u0434\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430: <code>A-B-A-B-A-B<\/code>. \u0410 \u0432 \u0442\u043e\u0447\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u043f\u043e\u043f\u0430\u043b \u0432 \u043c\u0430\u043a\u0440\u043e\u0441, \u0438 \u0447\u0442\u043e \u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  <\/p>\n<h2 id=\"a-makrosy-mapim-na-ih-primenenie\">\u0410 \u043c\u0430\u043a\u0440\u043e\u0441\u044b? \u041c\u0430\u043f\u0438\u043c \u043d\u0430 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435..<\/h2>\n<p>  <\/p>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u043c\u0430\u043f\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430?<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">template log( value ) {     if( logLevel > Info ) {         console.log( value )     } }  log!stat1() \/\/ 1 log!stat2() \/\/ 2 log!stat3() \/\/ 3<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">if( logLevel > Info ) { \/\/ 1     console.log( stat1() ) \/\/ 1 }  if( logLevel > Info ) { \/\/ 2     console.log( stat2() ) \/\/ 2 }  if( logLevel > Info ) { \/\/ 3     console.log( stat3() ) \/\/ 3 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0430\u044f \u0431\u0435\u0434\u0430: \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 1, \u043f\u043e\u0442\u043e\u043c \u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 1, \u043f\u043e\u0442\u043e\u043c \u043e\u043f\u044f\u0442\u044c\u2026 \u0422\u0430\u043a \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u0441\u043c\u043e\u0442\u0440\u044f \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430. \u041a\u043e\u0440\u043e\u0447\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u043c\u0435\u0441\u0442\u0435, \u0442\u0430\u043a \u0438 \u043d\u0435 \u0437\u0430\u0439\u0434\u044f \u0432 \u043a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430. \u042d\u0442\u043e \u0438 \u0442\u0430\u043a-\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u043b\u044e\u0441 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"a-makrosy-mapim-i-na-primenenie-i-na-vnutryanku\">\u0410 \u043c\u0430\u043a\u0440\u043e\u0441\u044b? \u041c\u0430\u043f\u0438\u043c \u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0438 \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u044f\u043d\u043a\u0443!<\/h2>\n<p>  <\/p>\n<p>\u0421 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438 \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u043d\u043e \u043c\u0430\u043f\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c \u043a\u043e\u0434 \u0443\u0436\u0435 \u043c\u0430\u043f\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">template log( value ) {     if( logLevel > Info ) { \/\/ A         console.log( value ) \/\/ B     } }  log!stat1() \/\/ 1 log!stat2() \/\/ 2 log!stat3() \/\/ 3<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">void 0 \/\/ 1 if( logLevel > Info ) { \/\/ A     console.log( stat1() ) \/\/ B }  void 0 \/\/ 2 if( logLevel > Info ) { \/\/ A     console.log( stat2() ) \/\/ B }  void 0 \/\/ 3 if( logLevel > Info ) { \/\/ A     console.log( stat3() ) \/\/ B }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043f\u043e \u0448\u0430\u0433\u0430\u043c \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0439\u0434\u0451\u043c \u0432 \u043d\u0435\u0433\u043e \u0438 \u043f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u0435\u0433\u043e \u043a\u043e\u0434\u0443, \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0439\u0434\u0435\u043c \u0438 \u043f\u043e\u0439\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c, \u0438\u0431\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e \u043d\u0430\u0448\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u0432 4 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432. \u042d\u0445, \u043c\u0435\u0447\u0442\u044b, \u043c\u0435\u0447\u0442\u044b..<\/p>\n<p>  <\/p>\n<h2 id=\"kak-zhe-sorsmapy-horoshi-esli-by-ne-imena-peremennyh\">\u041a\u0430\u043a \u0436\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u0438! \u0415\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445..<\/h2>\n<p>  <\/p>\n<p>\u041d\u0443 \u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0442\u0443\u0442 \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0443\u0431\u043e\u0432\u043e. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435, \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0433\u043b\u044f\u043d\u0435\u0442, \u0432\u043e \u0447\u0442\u043e \u043e\u043d\u043e \u043c\u0430\u043f\u0438\u0442\u0441\u044f, \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c, \u0442\u043e \u043a\u0430\u043a \u0431\u044b \u043d\u0435 \u0442\u0430\u043a! <\/p>\n<p>  <\/p>\n<ul>\n<li>\u0422\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li>\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"kak-zhe-sorsmapy-horoshi-esli-by-ne-evil\">\u041a\u0430\u043a \u0436\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u0438! \u0415\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 evil..<\/h2>\n<p>  <\/p>\n<p>\u0418 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0434\u044c\u044f\u0432\u043e\u043b \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c, \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e <code>eval<\/code>, \u0442\u043e \u0441 \u043c\u0430\u043f\u0438\u043d\u0433\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0435\u0451 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437..<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">new Function( '', 'debugger' )<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">eval(`     (function anonymous(     ) {         debugger     }) `)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0432\u0430\u0448 \u043a\u043e\u0434 \u0441\u0432\u0435\u0440\u0445\u0443 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0442\u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043c\u0430\u043f\u0438\u043d\u0433\u0438 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u043d\u0435 \u0442\u0443\u0434\u0430. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c, \u043d\u0430\u0434\u043e \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u043d\u0438\u0437, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043f\u0430\u0440\u0443 \u0442\u043e\u0447\u0435\u043a \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u043f\u0438\u043d\u0433\u0430. \u0422\u043e\u0433\u0434\u0430 <code>new Function<\/code> \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u043c\u0430\u043f\u0438\u0442\u044c\u0441\u044f. \u041d\u043e \u0441\u044a\u0435\u0434\u0435\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0432 <code>eval<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u043c\u0430\u043f\u0438\u043d\u0433\u0438, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0447\u0451\u0442\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u044b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0438\u043d\u0430\u0447\u0435 \u043c\u0430\u043f\u0438\u043d\u0433\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u0443\u0434\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"kak-zhe-sorsmapy-horoshi-no-chto-to-poshlo-ne-tak\">\u041a\u0430\u043a \u0436\u0435 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u0438! \u041d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a..<\/h2>\n<p>  <\/p>\n<p>\u041d\u0443 \u0438 \u0441\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0431\u0435\u0434\u0430 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432: \u0435\u0441\u043b\u0438 \u0432\u044b \u0433\u0434\u0435-\u0442\u043e \u043d\u0430\u043a\u043e\u0441\u044f\u0447\u0438\u0442\u0435, \u0442\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442. \u0418 \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0433\u0430\u0434\u0430\u0442\u044c..<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u0430\u0440\u0442\u044b \u0422\u0430\u0440\u043e<\/li>\n<li>\u041d\u0430\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b<\/li>\n<li>\u0413\u0443\u0433\u043b \u041a\u0430\u0440\u0442\u044b<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0418 \u0434\u0430\u0436\u0435 \u0413\u0443\u0433\u043b \u0442\u0443\u0442 \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u0438\u0431\u043e \u0442\u0430\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432 \u0434\u0443\u0445\u0435 &#171;\u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c WebPack?&#187;. \u0410 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0417\u0430\u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u0430\u0437\u0434\u0430\u043b\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0430\u043d\u0430\u0442 \u2014 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"pofantaziruem-sorsmapy-zdorovogo-cheloveka\">\u041f\u043e\u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0440\u0443\u0435\u043c? \u0421\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430!<\/h2>\n<p>  <\/p>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u043c\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441 \u043d\u0443\u043b\u044f. \u042f \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0433\u0434\u0435 \u043c\u0430\u043f\u0438\u043b\u0438\u0441\u044c \u0431\u044b \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0431\u0430\u0439\u0442. \u041d\u0430 \u0441\u043f\u0430\u043d \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0435 8 \u0431\u0430\u0439\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043d\u0443\u0436\u0434. \u0421\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0441\u043f\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0437 3 \u0447\u0438\u0441\u0435\u043b: \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0432 \u043a\u0443\u043c\u0443\u043b\u044f\u0442\u0438\u0432\u043d\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435 (\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432), \u0434\u043b\u0438\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u0438 \u0434\u043b\u0438\u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>Field<\/th>\n<th>Bytes Count<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>source_offset<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>source_length<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>target_length<\/td>\n<td>2<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0441\u043c\u0430\u043f\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u0430 \u043d\u0435 \u0442\u0435\u043a\u0441\u0442. \u0410 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0440\u0435\u043c\u0430\u043f\u0438\u0442\u044c, \u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441..<\/p>\n<p>  <\/p>\n<h2 id=\"stoit-li-svyazyvatsya-s-sorsmapami\">\u0421\u0442\u043e\u0438\u0442 \u043b\u0438 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430\u043c\u0438?<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u2014 \u044d\u0442\u043e \u0442\u043e \u0435\u0449\u0451 \u0431\u043e\u043b\u043e\u0442\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u043b\u0435\u0437\u0442\u044c. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439 \u0437\u0430 \u043d\u0438\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438\u0441\u044c \u0438 \u043d\u0435 \u0441\u044a\u0435\u0445\u0430\u043b\u0438. \u0412 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u0441 \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c. \u0418\u0442\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043b\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435.<\/li>\n<li>\u041f\u0440\u043e\u043d\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/li>\n<li>\u041f\u0440\u043e\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445.<\/li>\n<li>\u041f\u043b\u044e\u0441 \u0442\u0440\u0435\u0439\u0441 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u042f \u0431\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0441 \u043d\u0438\u043c\u0438 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u0438\u0445 \u0432\u0441\u0451 \u0436\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c..<\/p>\n<p>  <\/p>\n<h2 id=\"slozhno-vozmyom-babel\">\u0421\u043b\u043e\u0436\u043d\u043e? \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0411\u0430\u0431\u0435\u043b\u044c!<\/h2>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Babel. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0436\u0435 \u0442\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u0436\u0435 \u0440\u0435\u0448\u0435\u043d\u044b \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0430\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u0430 \u0435\u0445\u0430\u0442\u044c!<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f <a href=\"https:\/\/github.com\/babel\/babel\/blob\/master\/packages\/babel-plugin-transform-arrow-functions\/src\/index.js\">\u043f\u043b\u0430\u0433\u0438\u043d<\/a>..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">import { declare } from \"@babel\/helper-plugin-utils\"; import type NodePath from \"@babel\/traverse\";  export default declare((api, options) => {     const { spec } = options;     return {         name: \"transform-arrow-functions\",         visitor: {             ArrowFunctionExpression(                 path: NodePath&lt;BabelNodeArrowFunctionExpression>,             ) {                 if (!path.isArrowFunctionExpression()) return                 path.arrowFunctionToExpression({ \/\/ Babel Helper                     allowInsertArrow: false,                     specCompliant: !!spec,                 })             },         },     } })<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u043d \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043e\u0431\u044b\u0447\u043d\u0443\u044e. \u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u0434\u0430 \u0438 \u043a\u043e\u0434\u0430 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u043d\u043e\u0433\u043e! \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f, \u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442, \u2014 \u044d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0431\u0430\u0431\u0435\u043b\u0435\u0432\u0441\u043a\u0438\u0439 \u0445\u0435\u043b\u043f\u0435\u0440 \u0438 \u0432\u0441\u0451. \u041a\u0430\u043a-\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438!<\/p>\n<p>  <\/p>\n<h2 id=\"babel-zachem-stolko-boylerpleyta\">\u0411\u0430\u0431\u0435\u043b\u044c, \u0437\u0430\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430?<\/h2>\n<p>  <\/p>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 <a href=\"https:\/\/github.com\/babel\/babel\/blob\/e498bee10f0123bb208baa228ce6417542a2c3c4\/packages\/babel-traverse\/src\/path\/conversion.js#L104\">\u044d\u0442\u043e\u0442 \u0445\u0435\u043b\u043f\u0435\u0440<\/a>..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">import \"@babel\/types\"; import nameFunction from \"@babel\/helper-function-name\";  \/\/ ...  this.replaceWith(     callExpression( \/\/ mapped to this         memberExpression( \/\/ mapped to this             nameFunction(this, true) || this.node, \/\/ mapped to this             identifier(\"bind\"), \/\/ mapped to this         ),         [checkBinding ? identifier(checkBinding.name) : thisExpression()],     ), );<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410\u0433\u0430, \u0442\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b AST, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u0444\u0430\u0431\u0440\u0438\u043a\u0438. \u041d\u043e \u0431\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0435, \u043a\u0443\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0430\u043f\u043b\u0435\u043d\u044b. \u0410 \u0447\u0443\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043a\u0430\u043a \u0432\u0430\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0443\u0434\u0430 \u043c\u0430\u043f\u0438\u0442\u0441\u044f. \u0422\u0443\u0442 \u0436\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0411\u0430\u0431\u0435\u043b\u044e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f, \u043a\u0430\u043a \u043c\u0430\u043f\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u043d\u0430 \u0442\u043e\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u0430\u0442\u0447\u0438\u043b\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d (<code>this<\/code>), \u0447\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0430\u0451\u0442 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>  <\/p>\n<h2 id=\"zaymyomsya-otladkoy-ast-kurilschika\">\u0417\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439? AST \u043a\u0443\u0440\u0438\u043b\u044c\u0449\u0438\u043a\u0430..<\/h2>\n<p>  <\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439. \u0422\u0443\u0442 \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 AST \u0431\u044b\u043b\u043e \u0434\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0430 \u043a\u0430\u043a\u043e\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u0441\u043b\u0435. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 JS \u043a\u043e\u0434:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/astexplorer.net\/#\/gist\/1296170ba2b75ef8f70acb6c478a8215\/8c64175041878ae28e750fedafb55193cf839c53\"><code>const foo = { \"bar\": 123 };<\/code><\/a><\/p>\n<p>  <\/p>\n<p>\u0412\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u044f\u043d\u044c\u0442\u0435, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u043e (AST) \u0434\u043b\u044f \u043d\u0435\u0433\u043e..<\/p>\n<p>  <\/p>\n<pre><code class=\"json\">{     \"type\": \"Program\",     \"sourceType\": \"script\",     \"body\": [         {             \"type\": \"VariableDeclaration\",             \"kind\": \"const\",             \"declarations\": [                 {                     \"type\": \"VariableDeclarator\",                     \"id\": {                         \"type\": \"Identifier\",                         \"name\": \"foo\"                     },                     \"init\": {                         \"type\": \"ObjectExpression\",                         \"properties\": [                             ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430. \u0418 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0431\u0430\u0431\u0435\u043b\u0435\u0432\u0441\u043a\u043e\u0435 AST, \u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u043e\u0443\u043d\u0435\u0439\u043c \u2014 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b \u0441\u0430\u043c\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0435 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 ASTExplorer. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f, \u0438\u0431\u043e \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u044d\u0442\u0438 JSON-\u0447\u0438\u043a\u0438 \u2014 \u0431\u043e\u043b\u044c \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<h2 id=\"zaymyomsya-otladkoy-ast-zdorovogo-cheloveka\">\u0417\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439? AST \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430!<\/h2>\n<p>  <\/p>\n<p>\u0418 \u0442\u0443\u0442 \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 <a href=\"https:\/\/github.com\/nin-jin\/slides\/blob\/master\/tree\/readme.md\">\u0444\u043e\u0440\u043c\u0430\u0442 Tree<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f AST..<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/tree.hyoo.ru\/#source=%7B%3B%7D%0A%09const%0A%09%09foo%0A%09%09%7B%2C%7D%0A%09%09%09%3A%0A%09%09%09%09%5Cbar%0A%09%09%09%09123%0A\/pipeline=%24mol_tree2_from_string~%24mol_tree2_js_to_text~%24mol_tree2_text_to_string\"><code>const foo = { \"bar\": 123 };<\/code><\/a><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">{;}     const         foo         {,}             :                 \\bar                 123<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, <a href=\"https:\/\/github.com\/nin-jin\/tree.d\/wiki\/js.tree\">js.tree<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435. \u0418 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 ASTExplorer. \u0425\u043e\u0442\u044f \u044f \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u043d\u0435\u0433\u043e <a href=\"https:\/\/github.com\/fkling\/astexplorer\/pull\/433\">\u043f\u0430\u0442\u0447 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 tree<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043e\u0434 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c. \u042d\u0442\u043e \u2014 open-source, \u0434\u0435\u0442\u043a\u0430!<\/p>\n<p>  <\/p>\n<h2 id=\"i-kak-s-etim-rabotat-vsyo-chto-nuzhno-i-nichego-nenuzhnogo\">\u0418 \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e!<\/h2>\n<p>  <\/p>\n<p>\u0412 \u043c\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 API \u0434\u043b\u044f Tree (<a href=\"https:\/\/github.com\/hyoo-ru\/mam_mol\/tree\/master\/tree2\">$mol_tree2<\/a>) \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0435\u0441\u0442\u044c \u043b\u0438\u0448\u044c 4 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430: \u044d\u0442\u043e \u0438\u043c\u044f \u0442\u0438\u043f\u0430, \u0441\u044b\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \u0438 \u0441\u043f\u0430\u043d (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435)..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">interface $mol_tree2 {     readonly type: string     readonly value: string     readonly kids: $mol_tree2[]     readonly span: $mol_span }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u0430\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a, \u0441\u0430\u043c\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430, \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0438 \u0434\u043b\u0438\u043d\u0443 \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">interface $mol_span {     readonly uri: string     readonly source: string     readonly row: number     readonly col: number     readonly length: number }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"i-kak-s-etim-rabotat-lokalnye-fabriki\">\u0418 \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0438!<\/h2>\n<p>  <\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438-\u0444\u0430\u0431\u0440\u0438\u043a\u0430\u043c\u0438, \u0430 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438-\u0444\u0430\u0431\u0440\u0438\u043a\u0430\u043c\u0438..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">interface $mol_tree2 {     struct( type , kids ): $mol_tree2     data( value , kids ): $mol_tree2     list( kids ): $mol_tree2     clone( kids ): $mol_tree2 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0442\u0430\u043a\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b, \u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043f\u0430\u043d \u043e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"pochemu-eto-rabotaet\">\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/h2>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043f\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b, \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439 AST..<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/_x\/fw\/fb\/_xfwfb70fcsgov4pwm35bbdb4qw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/_x\/fw\/fb\/_xfwfb70fcsgov4pwm35bbdb4qw.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u043a\u0430\u043a \u043c\u044b \u0438\u0437 2 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 1 \u043f\u0443\u0442\u0451\u043c 3 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438, \u0447\u0442\u043e-\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438, \u0430 \u0447\u0442\u043e-\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043b\u0438. \u041d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u0430\u043c \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0430\u0441\u044c.<\/p>\n<p>  <\/p>\n<h2 id=\"i-kak-s-etim-rabotat-obobschyonnye-transformacii\">\u0418 \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438!<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439 \u0435\u0441\u0442\u044c 4 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">interface $mol_tree2 {     select( ... path ): $mol_tree2     filter( ... path, value ): $mol_tree2     insert( ... path, value ): $mol_tree2     hack( belt, context ): $mol_tree2[] }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u043e\u0435 AST, \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435, \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0445\u0430\u043a\u0438.<\/p>\n<p>  <\/p>\n<h2 id=\"eto-chto-za-haki-takie-shablonnyy-primer\">\u042d\u0442\u043e \u0447\u0442\u043e \u0437\u0430 \u0445\u0430\u043a\u0438 \u0442\u0430\u043a\u0438\u0435? \u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440..<\/h2>\n<p>  <\/p>\n<p>\u0425\u0430\u043a\u0438 \u2014 \u0441\u0430\u043c\u0430\u044f \u043c\u043e\u0449\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0443\u0437\u043b\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f AST. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">rest-api     login @username     password @password db-root     user @username     secret @password<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0432 \u0435\u0433\u043e \u0432 AST, \u043c\u044b \u043c\u043e\u0436\u0435\u043c <a href=\"https:\/\/tree.hyoo.ru\/#!pipeline=%24mol_js_eval\/source=let%20src%20%3D%20%24mol_tree2_from_string%28%60%0A%09rest-api%0A%09%09login%20%40username%0A%09%09password%20%40password%0A%09db-root%0A%09%09user%20%40username%0A%09%09secret%20%40password%0A%60%29%0A%0Asrc%20%3D%20src.list%28%0A%09src.hack%28%7B%0A%09%09'%40username'%3A%20n%20%3D%3E%20n.data%28%20'jin'%20%29%2C%0A%09%09'%40password'%3A%20p%20%3D%3E%20p.data%28%20'%D0%BF%D0%BE%D1%80%D0%BE%D0%BB%D1%8C'%20%29%2C%0A%09%7D%29%0A%29%0A%0Areturn%20src\">\u043f\u043e\u0445\u0430\u0447\u0438\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u043d\u0444\u0438\u0433<\/a> \u0432\u0441\u0435\u0433\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">consfig.list(     config.hack({         '@username': n => [ n.data( 'jin' ) ],         '@password': p => [ p.data( '\u043f\u043e\u0440\u043e\u043b\u044c' ) ],     }) )<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u044b \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">rest-api     login \\jin     password \\\u043f\u043e\u0440\u043e\u043b\u044c db-root     user \\jin     secret \\\u043f\u043e\u0440\u043e\u043b\u044c<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"a-esli-chto-to-bolee-slozhnoe-skript-avtomatizacii\">\u0410 \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435? \u0421\u043a\u0440\u0438\u043f\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438..<\/h2>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u2014 \u0441\u043a\u0440\u0438\u043f\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">click \\$my_app.Root(0).Task(0) click \\$my_app.Root(0).Details().TrackTime()<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>click<\/code>. \u0415\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0436, <a href=\"https:\/\/tree.hyoo.ru\/#pipeline=%24mol_js_eval~%24mol_tree2_js_to_text~%24mol_tree2_text_to_sourcemap_vis\/source=let%20src%20%3D%20%24mol_tree2_from_string%28%60%0A%09click%20%5C%5C%24my_app.Root%280%29.Task%280%29%0A%09click%20%5C%5C%24my_app.Root%280%29.Details%28%29.TrackTime%28%29%0A%60%29%0A%0Asrc%20%3D%20src.list%28%5B%0A%09src.struct%28%20'%7B%3B%7D'%2C%0A%09%09src.hack%28%7B%0A%0A%09%09%09click%3A%20%28%20click%2C%20belt%20%29%3D%3E%20%7B%0A%09%09%09%09const%20id%20%3D%20click.kids%5B0%5D%0A%09%09%09%09return%20%5B%0A%09%09%09%09%09click.struct%28%20'%28%29'%2C%20%5B%0A%09%09%09%09%09%09id.struct%28%20'document'%20%29%2C%0A%09%09%09%09%09%09id.struct%28%20'%5B%5D'%2C%20%5B%0A%09%09%09%09%09%09%09id.data%28%20'getElementById'%20%29%2C%0A%09%09%09%09%09%09%5D%20%29%2C%0A%09%09%09%09%09%09id.struct%28%20'%28%2C%29'%2C%20%5B%20id%20%5D%20%29%2C%0A%09%09%09%09%09%09click.struct%28%20'%5B%5D'%2C%20%5B%0A%09%09%09%09%09%09%09click.data%28%20'click'%20%29%2C%0A%09%09%09%09%09%09%5D%20%29%2C%0A%09%09%09%09%09%09click.struct%28%20'%28%2C%29'%20%29%2C%0A%09%09%09%09%09%5D%20%29%2C%0A%09%09%09%09%5D%0A%09%09%09%7D%2C%0A%0A%09%09%09''%3A%20%28%29%3D%3E%20%5B%5D%0A%0A%09%09%7D%29%2C%0A%09%29%2C%0A%5D%29%0A%0Areturn%20src\">\u043f\u043e\u0445\u0430\u0447\u0438\u043c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442<\/a> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f AST \u044f\u0432\u0430\u0441\u043a\u0440\u0438\u043f\u0442\u0430..<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">script.hack({     click: ( click, belt )=> {         const id = click.kids[0]         return [             click.struct( '()', [                 id.struct( 'document' ),                 id.struct( '[]', [                     id.data( 'getElementById' ),                 ] ),                 id.struct( '(,)', [ id ] ),                 click.struct( '[]', [                     click.data( 'click' ),                 ] ),                 click.struct( '(,)' ),             ] ),         ]     }, })<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0443\u0437\u043b\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (<code>click<\/code>), \u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (<code>id<\/code>). \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0442\u0430\u043c, \u0438 \u0442\u0430\u043c. \u0410 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u044b \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"a-mozhno-eschyo-prosche-jacktree---makro-yazyk-dlya-transformaciy\">\u0410 \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0451 \u043f\u0440\u043e\u0449\u0435? jack.tree \u2014 \u043c\u0430\u043a\u0440\u043e-\u044f\u0437\u044b\u043a \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439!<\/h2>\n<p>  <\/p>\n<p>\u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0451 \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c DSL \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 DSL. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/tree.hyoo.ru\/#pipeline=%24mol_tree2_from_string~%24mol_jack_transform~%24mol_tree2_js_to_text~%24mol_tree2_text_to_string_mapped_js\/source=hack%20script%20%7B%3B%7D%20from%0A%0Ahack%20click%20%28%29%0A%09document%0A%09%5B%5D%20%5CgetElementById%0A%09%28%2C%29%20data%20from%0A%09%5B%5D%20%5Cclick%0A%09%28%2C%29%0A%0Ascript%20jack%0A%09click%20%5C%24my_app.Root%280%29.Task%280%29%0A%09click%20%5C%24my_app.Root%280%29.Details%28%29.TrackTime%28%29%0A\">\u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/a> \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <code>jack.tree<\/code>..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">hack script {;} from  hack click ()     document     [] \\getElementById     (,) data from     [] \\click     (,)  script jack     click \\$my_app.Root(0).Task(0)     click \\$my_app.Root(0).Details().TrackTime()<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 <code>hack<\/code> \u2014 \u044d\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u0442\u0447\u0438\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0443\u0437\u043b\u0430, \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u043e\u0435. \u042d\u0442\u043e \u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043d\u043e \u043e\u043d \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0443\u043c\u0435\u0435\u0442.<\/p>\n<p>  <\/p>\n<h2 id=\"a-esli-raznye-targety-transformiruem-v-js-vyrezaya-lokalizaciyu\">\u0410 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0440\u0433\u0435\u0442\u044b? \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0432 JS, \u0432\u044b\u0440\u0435\u0437\u0430\u044f \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e..<\/h2>\n<p>  <\/p>\n<p>\u0425\u0430\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u044f\u0437\u044b\u043a \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0441\u0442\u0440\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043a\u043e\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0443\u044e \u043d\u0430\u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c DSL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">+js     print @ begin \\Hello, World!     when onunload print @ end \\Bye, World!<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 JS \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u0451\u0440\u0433\u0430\u043b\u0430\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>localize<\/code> \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0432 \u0435\u0433\u043e \u0432 \u043c\u0430\u043a\u0440\u043e\u0441 <code>+js<\/code>..<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">{     console.log( localize(\"begin\") )      function onunload() {         console.log( localize(\"end\") )     } }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"a-esli-raznye-targety-vychlenyaem-perevody-ignoriruya-logiku\">\u0410 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0440\u0433\u0435\u0442\u044b? \u0412\u044b\u0447\u043b\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044f \u043b\u043e\u0433\u0438\u043a\u0443..<\/h2>\n<p>  <\/p>\n<p>\u041d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u2014 <code>+loc<\/code>..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">+loc     print @ begin \\Hello, World!     when onunload print @ end \\Bye, World!<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c JSON \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438..<\/p>\n<p>  <\/p>\n<pre><code class=\"json\">{     \"begin\": \"Hello, World!\",     \"end\": \"Bye, World!\" }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"a-esli-raznye-targety-menyaem-transformacii-kak-perchatki\">\u0410 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0430\u0440\u0433\u0435\u0442\u044b? \u041c\u0435\u043d\u044f\u0435\u043c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043a\u0430\u043a \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438..<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 jack.tree <a href=\"https:\/\/tree.hyoo.ru\/#!pipeline=%24mol_tree2_from_string~%24mol_jack_transform~%24mol_tree2_js_to_text~%24mol_tree2_text_to_string\/source=hack%20%2Bjs%0A%09hack%20print%20%28%29%0A%09%09console%0A%09%09%5B%5D%20%5Clog%0A%09%09%28%2C%29%20from%0A%09hack%20%40%20%28%29%0A%09%09localize%0A%09%09%28%2C%29%20type%20from%0A%09hack%20when%20function%0A%09%09struct%20type%20from%0A%09%09%28%2C%29%0A%09%09%7B%3B%7D%20kids%20from%0A%09%7B%3B%7D%20from%0A%0Ahack%20%2Bloc%0A%09hack%20print%20from%0A%09hack%20when%20kids%20from%0A%09hack%20%40%20%3A%0A%09%09type%20from%0A%09%09kids%20from%0A%09%7B%2C%7D%20from%0A%0A%2Bloc%0A%09print%20%40%20begin%20%5CHello%2C%20World!%0A%09when%20onunload%20print%20%40%20end%20%5CBye%2C%20World!%0A%0A\">\u044d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/a>..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">hack +js     hack print ()         console         [] \\log         (,) from     hack @ ()         localize         (,) type from     hack when function         struct type from         (,)         {;} kids from     {;} from<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">hack +loc     hack print from     hack when kids from     hack @ :         type from         kids from     {,} from<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u044f\u0437\u044b\u043a \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u0434. \u041c\u043e\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0443\u0437\u043b\u044b, \u0438 \u043c\u0430\u0442\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u041a\u043e\u0440\u043e\u0447\u0435, \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u043e \u043c\u043e\u0449\u043d\u0430\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0448\u0443\u0441\u0442\u0440\u0430\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443 \u0442\u0443\u0434\u0430-\u0441\u044e\u0434\u0430 \u2014 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u043d\u0435\u043c\u0443.<\/p>\n<p>  <\/p>\n<h2 id=\"chto-to-poshlo-ne-tak-treys-transformaciy\">\u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a? \u0422\u0440\u0435\u0439\u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439!<\/h2>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0430 \u0443 \u043d\u0430\u0441 \u043c\u0430\u043a\u0440\u043e\u0441 \u043d\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0433\u043e\u043d\u044f\u0435\u0442, \u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u043e <a href=\"https:\/\/tree.hyoo.ru\/#pipeline=%24mol_tree2_from_string~%24mol_jack_transform~%24mol_tree2_js_to_text~%24mol_tree2_text_to_string\/source=hack%20%2Bpipe%0A%09hack%20%7C%3E%20var%0A%09%09pipe%0A%09%09from%0A%09hack%20%3C%7C%0A%09%09pipe%0A%09%09test%0A%09%09%09case%20count%20from%0A%09%09%09case%200%0A%09from%0A%0Ahack%20%2Bmath%20%2Bpipe%0A%09hack%20square%20%28**%29%0A%09%09%3C%7C%201%0A%09%092%0A%09from%0A%0A%2Bmath%20%7B%3B%7D%0A%09%7C%3E%203%0A%09%7C%3E%20square%0A\">\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u0441<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0442\u043e \u0433\u0434\u0435 \u043d\u0430 \u0447\u0442\u043e \u043c\u0430\u0442\u0447\u0438\u043b\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438 \u043a \u043c\u0435\u0441\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0438..<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/7k\/4r\/by\/7k4rbyvkgphsh1mkfg81q8rh9zm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/7k\/4r\/by\/7k4rbyvkgphsh1mkfg81q8rh9zm.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u0432 \u0442\u043e\u0447\u043a\u0435 (1), \u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u0432 \u0442\u043e\u0447\u043a\u0435 (2), \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 (3).<\/p>\n<p>  <\/p>\n<h2 id=\"nu-zachem-eschyo-odin-velosiped\">\u041d\u0443 \u0437\u0430\u0447\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434?<\/h2>\n<p>  <\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0432\u044b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0437\u0430\u0434\u0430\u0451\u0442\u0435\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: &#171;\u0414\u0438\u043c\u0430, \u0437\u0430\u0447\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434? \u0413\u043e\u0440\u0448\u043e\u0447\u0435\u043a, \u043d\u0435 \u0432\u0430\u0440\u0438! \u0425\u0432\u0430\u0442\u0438\u0442 \u0443\u0436\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0432!&#187;. \u042f \u0431\u044b \u0438 \u0440\u0430\u0434, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0435\u0433\u043e \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u043c\u0438..<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th>Babel<\/th>\n<th>TypeScript<\/th>\n<th>tree<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c API<\/td>\n<td>~300<\/td>\n<td>\u221e<\/td>\n<td>~10<\/td>\n<\/tr>\n<tr>\n<td>\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043e\u0442 \u044f\u0437\u044b\u043a\u0430<\/td>\n<td>\u274c<\/td>\n<td>\u274c<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>\u0418\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c API<\/td>\n<td>\u274c<\/td>\n<td>\u274c<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>\u0423\u0434\u043e\u0431\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/td>\n<td>\u274c<\/td>\n<td>\u274c<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>\u0421\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/td>\n<td>\u274c<\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0423 \u0411\u0430\u0431\u0435\u043b\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 300 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0423 TS \u0442\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u0430\u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0435 complexity, \u0435\u0449\u0451 \u0438 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u043e\u043d\u0438 \u0433\u0432\u043e\u0437\u0434\u044f\u043c\u0438 \u043f\u0440\u0438\u0431\u0438\u0442\u044b \u043a JS, \u0447\u0442\u043e \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u0423 \u043d\u0438\u0445 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0435 API \u0431\u0435\u0437 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 AST, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, AST \u0411\u0430\u0431\u0435\u043b\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0437 \u043d\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b \u043a \u043d\u0435\u043c\u0443 \u2014 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u043a\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u043f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u0421 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u2014 \u0442\u0430 \u0436\u0435 \u0431\u0435\u0434\u0430. \u0423 TS \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0442\u0443\u0442 \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f \u043a\u0440\u0430\u0439\u043d\u043e\u0441\u0442\u044c \u2014 \u043e\u043d \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0430\u043d\u0430\u043d\u043e\u043c \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u0438 \u043e\u0431\u0435\u0437\u044c\u044f\u043d\u0443, \u0438 \u0434\u0436\u0443\u043d\u0433\u043b\u0438, \u0438 \u0434\u0430\u0436\u0435 \u0441\u0432\u043e\u044e \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u043f\u043e\u0441\u0442\u0430\u0441\u044f\u0445.<\/p>\n<p>  <\/p>\n<h2 id=\"tipichnyy-payplayn-chto-to-tut-ne-tak\">\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u2026 \u0447\u0442\u043e-\u0442\u043e \u0442\u0443\u0442 \u043d\u0435 \u0442\u0430\u043a..<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d..<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>TS<\/strong>: \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u043b, \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b.<\/li>\n<li><strong>Webpack<\/strong>: \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u043b, \u043f\u043e\u0448\u0430\u0442\u0430\u043b \u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u0441\u043e\u0431\u0440\u0430\u043b, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b.<\/li>\n<li><strong>Terser<\/strong>: \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u043b, \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b.<\/li>\n<li><strong>ESLint<\/strong>: \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u043b, \u0432\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0427\u0442\u043e-\u0442\u043e \u0442\u0443\u0442 \u043d\u0435 \u0442\u0430\u043a\u2026 \u0412\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f AST, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u0431\u044b, \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c, \u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u043e \u0431\u044b \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443, \u043d\u043e \u043d\u0435 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u043d\u0430 \u043d\u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0418, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0444\u043e\u0440\u043c\u0430\u0442 Tree \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u043b\u0430\u0441\u0441\u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c \u0438\u043c \u0438\u0434\u0435\u044e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442. \u041d\u043e \u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043b\u044e\u0435\u043d\u0441\u0435\u0440. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0433\u0443\u0431\u0443, \u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u0447\u0442\u0430\u0435\u043c..<\/p>\n<p>  <\/p>\n<h2 id=\"a-kak-by-vyglyadel-payplayn-zdorovogo-cheloveka\">\u0410 \u043a\u0430\u043a \u0431\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430?<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0420\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u043b\u0438 \u0432 AST.<\/li>\n<li>\u0412\u0441\u0451 \u043f\u0440\u043e\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u043a\u0430\u043b\u0438.<\/li>\n<li>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u044b\/\u0441\u0442\u0438\u043b\u0438 \u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 AST \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439. \u0410 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c AST \u0447\u0442\u043e\u0431\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 Tree \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0441\u043f\u0430\u0440\u0448\u0435\u043d <a href=\"https:\/\/t.me\/LanguageDev\/48201\">\u043a\u0443\u0434\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/a> \u0440\u0430\u0437\u0432\u0435\u0441\u0438\u0441\u0442\u043e\u0433\u043e JSON.<\/p>\n<p>  <\/p>\n<h2 id=\"kak-izbezhat-razezda-rezultata-i-sorsmapa-texttree\">\u041a\u0430\u043a \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0430\u0437\u044a\u0435\u0437\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0430? text.tree!<\/h2>\n<p>  <\/p>\n<p>\u041e\u043a, \u043c\u044b \u043f\u043e\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 AST, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e, \u0432\u0435\u0434\u044c \u0438\u043d\u043e\u0439 \u044f\u0437\u044b\u043a \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430 \u0442\u043e \u0438 \u0441\u043e\u0442\u043d\u0438 \u0442\u0438\u043f\u043e\u0432 \u0443\u0437\u043b\u043e\u0432. \u0418 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043f\u0430\u043d \u0432 \u043c\u0430\u043f\u0438\u043d\u0433\u0435.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443, \u043c\u044b \u0441\u043e <a href=\"https:\/\/github.com\/zerkalica\/\">\u0421\u0442\u0435\u0444\u0430\u043d\u043e\u043c<\/a> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u044f\u0437\u044b\u043a <a href=\"https:\/\/github.com\/nin-jin\/tree.d\/wiki\/text.tree\">text.tree<\/a>, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 3 \u0442\u0438\u043f\u0430 \u0443\u0437\u043b\u043e\u0432: \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0438 \u0441\u044b\u0440\u043e\u0439 \u0442\u0435\u043a\u0441\u0442. <a href=\"http:\/\/tree.hyoo.ru\/#pipeline=%24mol_tree2_from_string~%24mol_tree2_text_to_string_mapped_js\/source=line%20%5C%7B%0Aindent%0A%09line%0A%09%09%5Cfoo%0A%09%09%5C%3A%20%0A%09%09%5C123%0Aline%20%5C%7D%0A\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/a>..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">line \\{  indent     line         \\foo         \\:          \\123 line \\ }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"javascript\">{     foo: 123 }  \/\/# sourceMappingURL=data:application\/json, %7B%22version%22%3A3%2C%22sources%22%3A%5B%22 unknown%22%5D%2C%22sourcesContent%22%3A%5B%22 line%20%5C%5C%7B%5Cnindent%5Cn%5Ctline%5Cn%5C t%5Ct%5C%5Cfoo%5Cn%5Ct%5Ct%5C%5C%3A%20%5Cn%5C t%5Ct%5C%5C123%5Cnline%20%5C%5C%7D%5Cn%22%5D %2C%22mappings%22%3A%22%3B%3BAAAA%2CAAAK%3BAACL %2CAACC%2CCACC%2CGACA%2CEACA%3BAACF%2CAAAK%3B%22%7D<\/code><\/pre>\n<p>  <\/p>\n<p>\u041b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d \u0432 text.tree \u0431\u0435\u0437 \u043f\u043b\u044f\u0441\u043e\u043a \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u043f\u0430\u043d\u043e\u0432. \u0410 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445, \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  <\/p>\n<h2 id=\"a-esli-nuzhen-webassembly-wasmtree---bintree\">\u0410 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d WebAssembly? wasm.tree -> bin.tree<\/h2>\n<p>  <\/p>\n<p>\u041d\u0443 \u0430 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f. \u0422\u0443\u0442 \u0432\u0441\u0451 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435: \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u044f\u0437\u044b\u043a \u0432 <a href=\"https:\/\/github.com\/nin-jin\/tree.d\/wiki\/bin.tree\">bin.tree<\/a>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u043d\u0435\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043d\u0435 \u0445\u0438\u0442\u0440\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 wasm.tree..<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">custom xxx  type xxx     => i32     => i64     => f32     &lt;= f64  import foo.bar func xxx<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c <a href=\"https:\/\/tree.hyoo.ru\/#source=custom%20xxx%0A%0Atype%20xxx%0A%09%3D%3E%20i32%0A%09%3D%3E%20i64%0A%09%3D%3E%20f32%0A%09%3C%3D%20f64%0A%0Aimport%20foo.bar%20func%20xxx%0A\/pipeline=%24mol_tree2_from_string~%24mol_tree2_wasm_to_bin~%24mol_tree2_bin_to_bytes~%24mol_wasm_module\">\u043f\u0440\u043e\u0433\u043e\u043d\u0438\u043c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 wasm.tree \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c bin.tree, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u043c WASM \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u043c..<\/a><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\\00 \\61 \\73 \\6D \\01 \\00 \\00 \\00<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043a\u0430\u043a \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 <code>wasm.tree<\/code>, \u0442\u0430\u043a \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e \u0441\u0432\u043e\u0451\u043c DSL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 wasm.tree. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u044b \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434 WebAssembly, \u043d\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u044f\u0441\u044c \u0432 \u0434\u0435\u0431\u0440\u0438 \u0435\u0433\u043e \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430. \u041d\u0443\u2026 \u043a\u043e\u0433\u0434\u0430 \u044f \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0442\u0430\u043a\u0438 \u0434\u043e\u043f\u0438\u043b\u044e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0433\u043e\u0442\u043e\u0432 \u043f\u043e\u043c\u043e\u0447\u044c \u2014 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c.<\/p>\n<p>  <\/p>\n<h2 id=\"dazhe-wasm-s-sorsmapingom\">\u0414\u0430\u0436\u0435 WASM \u0441 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u0438\u043d\u0433\u043e\u043c?!<\/h2>\n<p>  <\/p>\n<p>\u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0437 <code>bin.tree<\/code> \u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u044b. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442. \u0414\u043b\u044f WASM \u043d\u0443\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u0430\u043f\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f..<\/p>\n<p>  <\/p>\n<blockquote><p><a href=\"http:\/\/dwarfstd.org\/\">DWARF<\/a><\/p><\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9m\/we\/fk\/9mwefkkbdbhd-_xafbib8bz4hfy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/9m\/we\/fk\/9mwefkkbdbhd-_xafbib8bz4hfy.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u0432 \u044d\u0442\u0438 \u0434\u0435\u0431\u0440\u0438 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430 \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u043b\u0435\u0437\u0442\u044c..<\/p>\n<p>  <\/p>\n<h2 id=\"nichego-ne-zabyli\">\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438?<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043b\u0438\u0448\u044c \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e DSL. \u041d\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u0432\u0435\u0449\u0435\u0439..<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430<\/li>\n<li>\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/li>\n<li>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"edinoe-rasshirenie-chtoby-pravit-vsemi-da-ladno\">\u0415\u0434\u0438\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435\u043c\u0438\u2026 \u0414\u0430 \u043b\u0430\u0434\u043d\u043e?!<\/h2>\n<p>  <\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0434\u0438\u043a\u0430\u044f \u0438\u0434\u0435\u044f \u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 IDE \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u044f\u0437\u044b\u043a\u0430 \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 IDE: \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e. \u042f \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0442\u0430\u043a <a href=\"https:\/\/github.com\/nin-jin\/vscode-language-tree\">\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b<\/a> \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 $mol-\u043a\u0430\u043d\u0430\u043b\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0451\u0445\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430..<\/p>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6148625cabb378f6450d19c1\" data-style=\"\" id=\"6148625cabb378f6450d19c1\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0412\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u0432\u0435\u043b\u043e\u043f\u0435\u0440\u0441\u043a\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043a \u043d\u0438\u043c. \u0412\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0435\u0442\u0435 \u043a\u043e\u0434, \u0438 \u043e\u043d \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 DSL.<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0440\u0430\u0432\u0430 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <a href=\"https:\/\/github.com\/eigenmethod\/mol\/tree\/master\/view#viewtree\">view.tree<\/a>, \u0430 \u0441\u043b\u0435\u0432\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u041f\u043b\u0430\u0433\u0438\u043d \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u044f\u0437\u044b\u043a, \u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u0435\u0433\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<h2 id=\"chto-nuzhno-dlya-avtomaticheskoy-podsvetki\">\u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438?<\/h2>\n<p>  <\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0432 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u044f\u0437\u044b\u043a (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u043f\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0444\u0430\u0439\u043b\u0430), \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0432\u043e\u0440\u043a\u0441\u043f\u0435\u0439\u0441 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0451\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0445\u0435\u043c, \u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443 \u2014 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0435\u0433\u043e \u0443\u0437\u043b\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &#171;\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u043e\u043b\u043b\u0430\u0440\u0430&#187; \u0438\u043b\u0438 &#171;\u0438\u043c\u0435\u0435\u0442 \u0438\u043c\u044f <code>null<\/code>&#171;. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u043d\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443. \u042d\u0442\u043e, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438, \u043d\u043e \u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0441\u0430\u043c\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430.<\/li>\n<li>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435.<\/li>\n<li>\u0411\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/li>\n<li>\u0414\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0434\u044c \u043f\u043e\u0440\u043e\u0439 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0438 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0439 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 tree-based \u044f\u0437\u044b\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<h2 id=\"kuda-kuda-poyti\">\u041a\u0443\u0434\u0430-\u043a\u0443\u0434\u0430 \u043f\u043e\u0439\u0442\u0438?<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0451 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a \u043a\u043e\u043d\u0446\u0443. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u044f\u043c\u0438. \u0418 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a, \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438..<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/nin-jin.github.io\/slides\/sourcemap\/\">nin-jin.github.io\/slides\/sourcemap<\/a> \u2014 \u044d\u0442\u0438 \u0441\u043b\u0430\u0439\u0434\u044b<\/li>\n<li><a href=\"https:\/\/tree.hyoo.ru\/\">tree.hyoo.ru<\/a> \u2014 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439 tree<\/li>\n<li><a href=\"https:\/\/t.me\/lang_idioms\">lang_idioms<\/a> \u2014 \u0447\u0430\u0442 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f\u0437\u044b\u043a\u043e\u0432<\/li>\n<li><a href=\"https:\/\/twitter.com\/_jin_nin_\"><code>_jin_nin_<\/code><\/a> \u2014 \u0442\u0432\u0438\u0442\u044b \u043e JS<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0432\u044b\u0441\u043b\u0443\u0448\u0430\u043b\u0438. \u041c\u043d\u0435 \u043f\u043e\u043b\u0435\u0433\u0447\u0430\u043b\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"svidetelskie-pokazaniya\">\u0421\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u274c \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0435.<\/li>\n<li>\u274c \u0421\u043b\u043e\u0436\u043d\u043e\u0432\u0430\u0442\u043e \u0438 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u0433\u0434\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c.<\/li>\n<li>\u274c \u042f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0443\u0436\u0435\u043d \u043d\u0430 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0442\u0435\u043c\u0443 \u0432\u0440\u043e\u0434\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u043b, \u043d\u043e \u0434\u0435\u0437\u0430\u0439\u043d DSL \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c = 0.<\/li>\n<li>\u274c \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 (\u0434\u0430\u0436\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e), \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e sourcemap \u0438\u0434\u0435\u0442 \u0441 5 \u043c\u0438\u043d\u0443\u0442\u044b \u043f\u043e 35-\u044e, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0430\u0432\u0442\u043e\u0440 \u0432\u0435\u0449\u0430\u0435\u0442 \u043f\u0440\u043e \u0441\u0432\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0442\u0435\u043c\u0435. \u0417\u0440\u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0432\u0440\u0435\u043c\u044f, \u043b\u0443\u0447\u0448\u0435 \u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430.<\/li>\n<li>\u2705 \u041f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0438 \u0414\u0438\u043c\u0430 \u0434\u0430\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043e\u0442\u0432\u044f\u0437\u0430\u043b\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0444\u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441 $mol.<\/li>\n<li>\u2705 \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0434\u043e\u043a\u043b\u0430\u0434. \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043e\u0441\u0432\u0435\u0442\u0438\u043b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u043e\u0431 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e!<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0r\/ot\/_r\/0rot_rdsomvwqjgcr7eqguh8hdg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/0r\/ot\/_r\/0rot_rdsomvwqjgcr7eqguh8hdg.png\"\/><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/577688\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0415\u0441\u0442\u044c \u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 DSL?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">9.09% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430, \u043d\u0430 \u043d\u0451\u043c \u043f\u0438\u0448\u0443\u0442 \u043d\u0430\u0448\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438<\/span><span class=\"tm-article-poll__answer-votes\">3<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 9.09%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">33.33% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430, \u043d\u0430 \u043d\u0451\u043c \u043f\u0438\u0448\u0443\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438<\/span><span class=\"tm-article-poll__answer-votes\">11<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 33.33%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">9.09% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430, \u043d\u0430 \u043d\u0451\u043c \u043f\u0438\u0448\u0443\u0442 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b<\/span><span class=\"tm-article-poll__answer-votes\">3<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 9.09%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">36.36% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u0438\u0448\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438<\/span><span class=\"tm-article-poll__answer-votes\">12<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 36.36%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">45.45% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0437\u044b\u043a\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/span><span class=\"tm-article-poll__answer-votes\">15<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 45.45%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 33 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.    \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 11 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \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\/articles\/577688\/\"> https:\/\/habr.com\/ru\/articles\/577688\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u041a\u0430\u0440\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0438 \u0443 \u043c\u0435\u043d\u044f\u2026 \u043f\u043e\u0441\u0442\u0442\u0440\u0430\u0432\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0442\u0440\u0435\u0441\u0441\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0441\u043c\u0430\u043f\u043e\u0432. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f, \u0441 \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u043b\u0435\u0447\u0438\u0442\u044c \u043f\u0443\u0442\u0451\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0440\u0430\u0432\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/oh\/a8\/fd\/oha8fdciyzawz3-rdjxlkjxcase.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/oh\/a8\/fd\/oha8fdciyzawz3-rdjxlkjxcase.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 <a href=\"https:\/\/holyjs-piter.ru\/\">HolyJS&#8217;21<\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/www.youtube.com\/watch?v=rQEqXIo4PVM\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0437\u0430\u043f\u0438\u0441\u044c<\/a>, <a href=\"https:\/\/github.com\/nin-jin\/slides\/tree\/master\/sourcemap\">\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u043b\u0438\u0431\u043e <a href=\"https:\/\/nin-jin.github.io\/slides\/sourcemap\/\">\u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0439<\/a>.<\/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-401399","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/401399","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=401399"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/401399\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=401399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=401399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=401399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}