{"id":259931,"date":"2015-06-23T13:25:03","date_gmt":"2015-06-23T09:25:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=259931"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=259931","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c \u043d\u0430 JS \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e-\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435"},"content":{"rendered":"<p>     \t\u042f \u043b\u044e\u0431\u043b\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u0437\u0430 \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u044f\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c. \u041f\u0438\u0448\u0443 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430 Elixir \/ Erlang \/ OTP, \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438, \u043d\u043e Erlang \u0441 \u0435\u0433\u043e \u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u043e\u043a\u0430 \u043c\u043d\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043b\u0438\u0436\u0435 \u0447\u0435\u043c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Lisp \u0438\u043b\u0438 Haskell. \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e Erlang == web, \u0430 \u0443 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0432\u0435\u0431\u0430 \u043f\u043e\u0440\u043e\u0439 \u0431\u044b\u0432\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: html, css, js \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u0423\u0432\u044b js \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0431\u0430, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u0434 \u043b\u044e\u0431\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438, \u0434\u0430 \u0438 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u0435\u043d js. \u0421\u043f\u0435\u0440\u0432\u0430 \u043c\u043d\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u043e\u0441\u044c \u00ab\u041b\u044f\u043c\u0431\u0434\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0435\u0441\u0442\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 js \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u044b\u0443\u0447\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u0431\u0443\u0434\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u043f\u0438\u0448\u0443 \u0432 Erlang\/Lisp\/Haskell\u00bb. \u041a\u0430\u043a \u0436\u0435 \u044f \u043e\u0448\u0438\u0431\u0430\u043b\u0441\u044f.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h1>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u044f\u0437\u044b\u043a<\/h1>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0447\u0438\u0441\u0442\u044b\u0439 js \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u041e\u0442 \u043e\u0431\u0438\u043b\u0438\u044f \u0441\u043a\u043e\u0431\u043e\u0447\u0435\u043a \u0438 \u0442\u043e\u0447\u0435\u043a \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0440\u044f\u0431\u0438\u0442 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445. \u0421\u043b\u043e\u0432\u043e return \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0433\u0434\u0435-\u043b\u0438\u0431\u043e \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442 \u043d\u0430 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u0430 \u0438 \u0440\u0443\u0448\u0438\u0442 \u043c\u043e\u044e \u0432\u0435\u0440\u0443 \u0432 \u043b\u0443\u0447\u0448\u0435\u0435. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u043e\u0432, \u0432 \u0442.\u0447. \u0438 \u0444\u0443\u043d\u043a\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 (purescript, fay, clojurescript) \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0432 js. \u041d\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u0432\u044b\u0431\u0440\u0430\u043b coffeescript \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u0449\u0438\u043a\u0438, \u0442\u0430\u043a \u0438 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0449\u0438\u043a\u0438. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u0432\u044b\u0431\u043e\u0440 \u0431\u044b\u043b \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d \u0442\u0435\u043c \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 brunch, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 coffeescript. \u041d\u0443 \u0438 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441 fay, \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441 js \u043d\u0430 coffeescript \u043f\u043e\u0447\u0442\u0438 \u0440\u0430\u0432\u043d\u044b 0. <\/p>\n<h1>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/h1>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0442\u0440\u0438\u0433\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0438 html-\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e. \u0415\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e. \u042f \u0441\u0430\u043c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f angularjs, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0441\u0442\u0430\u043b\u0438 \u0432\u0438\u0434\u043d\u044b \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b: \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u043b\u0438\u0431\u043e, \u043d\u0443\u0436\u043d\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043d\u0435\u0442 \u2014 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b, \u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0430\u043d\u0433\u0443\u043b\u044f\u0440\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u2014 \u0441\u0430\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 ng-model \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0438\u043e\u043d\u0430\u043b\u044c\u0449\u0438\u043a\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0438\u0434\u0435\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044e, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0430\u043d\u0433\u0443\u043b\u044f\u0440\u043e\u0432\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f-\u043a\u043e\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438\u0442\u0434 \u0438\u0442\u043f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0442\u044f\u0436\u0435\u043b\u044f\u044e\u0442 \u043a\u043e\u0434. \u0414\u0430, \u0438 \u043a\u0441\u0442\u0430\u0442\u0438 \u0433\u043e\u0432\u043e\u0440\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0430\u043d\u0433\u0443\u043b\u044f\u0440\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u0430\u043a \u0441\u0435\u0431\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 react js \u2014 \u0438 \u043c\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043f\u0430\u043b \u043d\u0435 \u043d\u0435\u0433\u043e. \u0418\u0434\u0435\u044f \u043f\u043e\u0434\u043a\u0443\u043f\u0430\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439 \u0438 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e-\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0441\u0442\u0438\u043b\u0435\u043c. \u0415\u0441\u0442\u044c state, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u043a-\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0435\u0433\u043e \u0432 jreact \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. <\/p>\n<p>  &#171;`<br \/>  widget = require(\u00abwidget\u00bb)<br \/>  do_render = () -&gt; React.render(widget(state), domelement) if domelement?<br \/>  render_process = () -&gt;<br \/>   try<br \/>   do_render()<br \/>   catch error<br \/>   console.log error<br \/>   setTimeout(render_process, 500)<br \/>  &#171;`<\/p>\n<p>  \u0418 \u0432\u0441\u0451! \u0414\u043e \u0431\u0435\u0437\u0443\u043c\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u041e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u0441\u0430\u043c react, \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 state \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435. \u0418 \u0442\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435.<\/p>\n<h1>Trouble in the Kitchen<\/h1>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043c\u044f\u0433\u043a\u0438\u0435 \u0442\u0438\u043f\u044b js. \u0412 Erlang \u043e\u043d\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0442\u043e\u0436\u0435 \u043c\u044f\u0433\u043a\u0438\u0435, \u043d\u043e \u0432 js \u043e\u043d\u0438 \u0440\u0435\u043b\u044c\u043d\u043e \u043c\u044f\u0433\u043a\u0438\u0435 \u043a\u0430\u043a, \u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435 \u0437\u0430 \u0440\u044b\u0432\u0430\u0436\u0435\u043d\u0438\u0435, \u0433\u043e\u0432\u043d\u043e. \u0412\u043e\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435, \u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043c\u0435\u0448\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443. \u041d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0447\u0430\u0441\u0442\u043e (\u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u043a\u043e\u0434 \u0445\u043e\u0440\u043e\u0448) \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044f\u0433\u043a\u0438\u0435 \u0442\u0438\u043f\u044b js \u044f \u043f\u0440\u0438\u043d\u044f\u043b \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043a\u0430\u043a \u043e\u043d\u0438 \u0435\u0441\u0442\u044c. <\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u043e\u043d\u0435\u043c\u043d\u043e\u0433\u0443 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 js \u0441\u043f\u0435\u0440\u0432\u0430 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0445\u043e\u0442\u0435\u043b. \u042f \u043f\u043e\u043b\u0435\u0437 \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0435: <\/p>\n<p>  &#171;`<br \/>  coffee&gt; map = {a: 1}<br \/>  { a: 1 }<br \/>  coffee&gt; lst = []<br \/>  []<br \/>  coffee&gt; lst.push map<br \/>  1<br \/>  coffee&gt; map.a = 2<br \/>  2<br \/>  coffee&gt; lst.push map<br \/>  2<br \/>  coffee&gt; map.a = 3<br \/>  3<br \/>  coffee&gt; lst.push map<br \/>  3<br \/>  coffee&gt; lst<br \/>  [ { a: 3 }, { a: 3 }, { a: 3 } ]<br \/>  &#171;`<\/p>\n<p>  \u0445\u043e\u0442\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u043b \u0443\u0432\u0438\u0434\u0435\u0442\u044c<\/p>\n<p>  &#171;`<br \/>  coffee&gt; lst<br \/>  [ { a: 1 }, { a: 2 }, { a: 3 } ]<br \/>  &#171;`<\/p>\n<p>  \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b \u0448\u043e\u043a. \u0411\u0438\u043d\u0433\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 js \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b! \u041f\u0440\u0438\u0447\u0451\u043c \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u2014 \u0432\u0441\u0451 \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0447\u0435\u043c number, string, null \u0438 undefined \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435!<\/p>\n<p>  \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0447\u0442\u043e <\/p>\n<p>  &#171;`<br \/>  coffee&gt; [1,2,3] == [1,2,3]<br \/>  false<br \/>  coffee&gt; {a: 1} == {a: 1}<br \/>  false<br \/>  &#171;`<\/p>\n<p>  \u0442\u043e \u0432\u043e\u043b\u043e\u0441\u044b \u0443 \u043c\u0435\u043d\u044f \u0437\u0430\u0448\u0435\u0432\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u0432 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 maps \u0438 lists \u0432 js \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0430 \u0442\u043e\u0436\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. <\/p>\n<p>  \u042f \u0441\u0442\u0430\u043b \u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0431\u044b\u0442\u044c. \u041a\u0430\u0441\u0430\u0435\u043c\u043e \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u043d\u0430\u043f\u0440\u043c\u0438\u0435\u0440 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439) \u0432 \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u043d\u043e\u043b\u044c, \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e \u043d\u0435 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0442\u0435\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043d\u0435 \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u043e\u043d\u0438 (\u0434\u0430\u043d\u043d\u044b\u0435) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f.<\/p>\n<p>  &#171;`<br \/>  coffee&gt; const_lst = () -&gt; [1,2,3]<br \/>  [Function]<br \/>  coffee&gt; new_lst = const_lst().concat([4,5,6])<br \/>  [ 1, 2, 3, 4, 5, 6 ]<br \/>  coffee&gt; const_lst()<br \/>  [ 1, 2, 3 ]<br \/>  &#171;`<\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u043e\u0441\u044c \u043c\u043d\u0435, \u0435\u0441\u043b\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0430\u043c\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u043d\u044b\u0435, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u044b \u2014 \u044f\u0437\u044b\u043a \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c! \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u2014 \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0438 \u043b\u044f\u043c\u0431\u0434\u0430-\u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 js \u0442\u0438\u043f\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c\u0438 \u043b\u044f\u043c\u0431\u0434\u0430-\u0442\u0438\u043f\u0430\u043c\u0438 (map, reduce, filter, zip \u0438\u0442\u0434 \u0438\u0442\u043f). \u0417\u0430\u043e\u0434\u043d\u043e \u043a\u0441\u0442\u0430\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u0435\u043d\u0435\u0435 \u043c\u044f\u0433\u043a\u0438\u043c\u0438. \u0417\u0430\u0434\u0430\u0447\u0430 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0440\u0435\u0448\u0430\u0435\u043c\u0430\u044f, \u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u0451\u043c\u043d\u0430\u044f, \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043a\u0441\u0442\u0430\u0442\u0438 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<p>  1) \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u043a\u043e\u0434 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0448\u0435\u043d \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435, \u0430 \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043d\u0438\u043c \u043d\u0430\u0434\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u044f\u043c\u0431\u0434\u0430-\u0442\u0438\u043f\u0430 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0438\u043f, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<br \/>  2) \u042d\u0442\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u043c\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043c \u0447\u0438\u0441\u0442\u043e\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442<br \/>  3) \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u0442\u0435\u043c \u043a\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0442 \u044d\u0442\u043e\u0439 \u0438\u0434\u0435\u0438 \u044f \u043f\u043e\u043a\u0430 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f (\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0435\u0439 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c) \u0438 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043b\u044e\u0431\u044b\u0435 js-\u0434\u0430\u043d\u043d\u044b\u0435. <\/p>\n<p>  \u041f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e clone <br \/>  &#171;`<br \/>  clone = (some) -&gt; <br \/>   switch Object.prototype.toString.call(some)<br \/>   when &quot;[object Undefined]&quot; then undefined<br \/>   when &quot;[object Boolean]&quot; then some<br \/>   when &quot;[object Number]&quot; then some<br \/>   when &quot;[object String]&quot; then some<br \/>   when &quot;[object Function]&quot; then some.bind({})<br \/>   when &quot;[object Null]&quot; then null<br \/>   when &quot;[object Array]&quot; then some.map (el) -&gt; clone(el)<br \/>   when &quot;[object Object]&quot; then Object.keys(some).reduce ((acc, k) -&gt; acc[clone(k)] = clone(some[k]); acc), {}<br \/>  &#171;`<\/p>\n<p>  \u041f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e equal<br \/>  &#171;`<br \/>  equal = (a, b) -&gt;<br \/>   [type_a, type_b] = [Object.prototype.toString.call(a), Object.prototype.toString.call(b)]<br \/>   if type_a == type_b<br \/>   switch type_a<br \/>   when &quot;[object Undefined]&quot; then a == b<br \/>   when &quot;[object Boolean]&quot; then a == b<br \/>   when &quot;[object Number]&quot; then a == b<br \/>   when &quot;[object String]&quot; then a == b<br \/>   when &quot;[object Function]&quot; then a.toString() == b.toString()<br \/>   when &quot;[object Null]&quot; then a == b<br \/>   when &quot;[object Array]&quot;<br \/>   len_a = a.length<br \/>   len_b = b.length<br \/>   if len_a == len_b<br \/>   [0..len_a].every (n) -&gt; equal(a[n], b[n])<br \/>   else<br \/>   false<br \/>   when &quot;[object Object]&quot;<br \/>   keys_a = Object.keys(a).sort()<br \/>   keys_b = Object.keys(b).sort()<br \/>   if equal(keys_a, keys_b)<br \/>   keys_a.every (k) -&gt; equal(a[k], b[k])<br \/>   else<br \/>   false<br \/>   else<br \/>   false<br \/>  &#171;`<\/p>\n<p>  \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0449\u0435 \u0447\u0435\u043c \u044f \u0434\u0443\u043c\u0430\u043b, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u00ab\u043d\u043e\u00bb \u2014 \u0435\u0441\u043b\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c stack overflow. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0430\u043a\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043a\u0430\u043a \u00ab\u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438\u00bb. \u041c\u043d\u0435 \u0434\u0443\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0438 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0438\u0437\u044f\u0449\u043d\u044b\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u044d\u0442\u0438 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0441\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 js \u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0440\u0435\u0448\u0435\u043d\u0430.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 state \u0438 \u043c\u044b \u0435\u0433\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>  &#171;`<br \/>  state.aaa = 20<br \/>  state.foo = 100<br \/>  state.bar = state.bar.map (el) -&gt; baz(el, state)<br \/>  &#171;`<\/p>\n<p>  \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f state \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c api \u0438\u0442\u0434 \u0438\u0442\u043f. \u041d\u043e \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f state \u0433\u0434\u0435-\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f func(state) \u2014 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442? \u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 state \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c? \u0410 \u043c\u043e\u0436\u0435\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 js \u043f\u043e\u043b\u0443-\u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0433\u043e state \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e? \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442? \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430 \u044f \u0438\u0445 \u0434\u0435\u043b\u0430\u044e state \u043d\u0430 \u043c\u0435\u043d\u044f\u043b\u0441\u044f? \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043b\u043e\u043c\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u0443 \u0442\u0430\u043a\u0438\u043c\u0438 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f state \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438. <\/p>\n<p>  \u0422\u0443\u0442 \u0434\u0443\u043c\u0430\u044e \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u044f\u0442 \u043e \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430\u0445. \u042f \u0442\u043e\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u043e \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430\u0445. \u0418 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u0433\u043e\u043d\u043a\u0438. \u0418 \u043e \u0434\u0435\u0434\u043b\u043e\u043a\u0430\u0445. \u0418 \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441, \u0430 \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u0438\u0437 \u044f\u0437\u044b\u043a\u0430 Erlang \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u00ab\u0430\u043a\u0442\u043e\u0440\u00bb. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 js \u0430\u043a\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043a\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c state, \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438 \u0432\u0435\u0449\u0438<\/p>\n<p>  1) \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u00ab\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u00bb \u0432 \u0432\u0438\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0430\u0440\u043d\u043e\u0441\u0442\u0438 1 \u0438\u043b\u0438 0 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c<br \/>  2) \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u00ab\u0440\u0430\u0437\u0433\u0440\u0435\u0431\u0430\u0442\u044c\u00bb \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0440\u043d\u043e\u0441\u0442\u0438 1 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 state (\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0440\u043d\u043e\u0441\u0442\u0438 0 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f, state \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f) \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432 \u043a\u0430\u043a\u043e\u043c \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<br \/>  3) \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e state<\/p>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043d\u0435-\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c state \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438, \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 get \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435 \u0441\u0430\u043c state, \u0430 \u0435\u0433\u043e \u043a\u043e\u043f\u0438\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0440\u0430\u043d\u0435\u0435. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u0434.<\/p>\n<p>  &#171;`<br \/>  window.Act = (init_state, timeout) -&gt; <br \/>   obj = {<br \/>   #<br \/>   # priv<br \/>   #<br \/>   state: Imuta.clone(init_state)<br \/>   queue: []<br \/>   init: () -&gt; <br \/>   try<br \/>      <a href=\"http:\/\/habrahabr.ru\/users\/state\/\" class=\"user_link\">state<\/a> = Imuta.clone(   @queue.shift()(   <a href=\"http:\/\/habrahabr.ru\/users\/state\/\" class=\"user_link\">state<\/a>)) while    @queue.length != 0<br \/>   catch error<br \/>   console.log \u00abActor error\u00bb<br \/>   console.log error<br \/>   this_ref = this<br \/>   setTimeout((() -&gt; this_ref.init()), timeout)<br \/>   #<br \/>   # public<br \/>   #<br \/>   cast: (func) -&gt; <br \/>   if (func.length == 1) and Imuta.is_function(func)<br \/>      @queue.push(Imuta.clone(func))<br \/>      @queue.length<br \/>   else<br \/>   throw(new Error(\u00abAct expects functions arity == 1 (single arg is actor&#8217;s state)\u00bb))<br \/>   zcast: (func) -&gt;<br \/>   if (func.length == 0) and Imuta.is_function(func)<br \/>      @queue.push( ((state) -&gt; Imuta.clone(func)(); state) )<br \/>      @queue.length<br \/>   else<br \/>   throw(new Error(\u00abAct expects functions arity == 0\u00bb))<br \/>   get: () -&gt;<br \/>   Imuta.clone(   <a href=\"http:\/\/habrahabr.ru\/users\/state\/\" class=\"user_link\">state<\/a>)<br \/>   }<br \/>   obj.init()<br \/>   obj<br \/>  &#171;`<br \/>  * \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0430\u0434\u0443\u0442 \u043b\u044f\u043c\u0431\u0434\u0443 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f cast \u0438 zcast \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u044d\u0440\u043b\u0430\u043d\u0433\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 handle_cast<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u0432\u0441\u0435 js-\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u044b (\u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u0445 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445), \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0430\u043a\u0442\u043e\u0440\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0431\u0435\u0440\u0451\u043c \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e state \u0438 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<\/p>\n<p>  \u041d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f:<br \/>  &#171;`<br \/>  coffee&gt; actor = new Act({a: 1}, \u00abpure\u00bb, 500)<br \/>  { state: { a: 1 },<br \/>   queue: [],<br \/>   init: [Function],<br \/>   cast: [Function],<br \/>   zcast: [Function],<br \/>   get: [Function] }<br \/>  coffee&gt; actor.cast((state) -&gt; state.b = 1; state)<br \/>  1<br \/>  coffee&gt; actor.get()<br \/>  { a: 1, b: 1 }<br \/>  coffee&gt; actor.cast((state) -&gt; state.c = 1; state)<br \/>  1<br \/>  coffee&gt; value = actor.get()<br \/>  { a: 1, b: 1, c: 1 }<br \/>  coffee&gt; value.d = 123<br \/>  123<br \/>  coffee&gt; value<br \/>  { a: 1, b: 1, c: 1, d: 123 }<br \/>  coffee&gt; actor.get()<br \/>  { a: 1, b: 1, c: 1 }<br \/>  coffee&gt; actor.zcast(() -&gt; console.log \u00abhello\u00bb)<br \/>  1<br \/>  coffee&gt; hello<br \/>  coffee&gt; actor.get()<br \/>  { a: 1, b: 1, c: 1 }<br \/>  coffee&gt; global_var = {foo: \u00abbar\u00bb}<br \/>  { foo: &#8216;bar&#8217; }<br \/>  coffee&gt; actor.cast((_) -&gt; global_var)<br \/>  1<br \/>  coffee&gt; actor.get()<br \/>  { foo: &#8216;bar&#8217; }<br \/>  coffee&gt; global_var.baz = \u00abbaf\u00bb<br \/>  &#8216;baf&#8217;<br \/>  coffee&gt; global_var<br \/>  { foo: &#8216;bar&#8217;, baz: &#8216;baf&#8217; }<br \/>  coffee&gt; actor.get()<br \/>  { foo: &#8216;bar&#8217; }<br \/>  &#171;`<\/p>\n<p>  \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f state \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 cast. \u041a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u00ab\u0447\u0438\u0441\u0442\u043e\u043c\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 state \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u043a\u0442\u043e\u0440\u0430, \u0447\u0442\u043e \u0431\u044b \u043c\u044b \u043d\u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u043d\u0438\u043c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 get (\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u0435\u0440\u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043c\u0438\u0440\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 cast). \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0440\u043b\u0430\u043d\u0433\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 js. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0451\u043c state \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0435-\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u0439\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0430\u043a\u0442\u043e\u0440\u0430 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c state. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (\u0435\u0441\u043b\u0438 \u043c\u0435\u043d\u044f\u0442\u044c state \u0441\u0442\u0440\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0430\u043a\u0442\u043e\u0440) \u043f\u0440\u0438\u0435\u043c\u043b\u0438\u043c \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0411\u044b\u043b\u0430 \u0435\u0449\u0451 \u043c\u044b\u0441\u043b\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438, \u0430 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0441\u043c\u044b\u0441\u043b\u0435 \u0434\u0430\u0436\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u043d\u0435 \u043e\u0434\u043d\u0443 \u043b\u044f\u043c\u0431\u0434\u0443, \u0430 \u0442\u0440\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u044d\u043a\u0441\u0435\u043f\u0448\u043d\u043e\u0432 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445).<\/p>\n<p>  &#171;`<br \/>  actor.cast(<br \/>   {<br \/>   prepare: (state) -&gt; prepare_process()<br \/>   apply: (state, args) -&gt; do_work(state, args)<br \/>   rollback: (state, args) -&gt; do_rollback(state, args, error)<br \/>   })<\/p>\n<p>  &#171;`<\/p>\n<p>  \u041d\u043e \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0447\u0442\u043e \u0432\u043e\u0442 \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0433\u0438\u0431, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0432 \u043d\u044b\u043d\u0435\u0448\u043d\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c <br \/>  &#171;`<br \/>  actor.cast((state) -&gt;<br \/>   args = init_args(state)<br \/>   try<br \/>   do_work(state, args)<br \/>   catch error<br \/>   rollback(state, args, error))<br \/>  &#171;`<br \/>  \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430.<\/p>\n<p>  Js \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0435 \u0442\u0430\u043a \u0431\u0435\u0437\u043d\u0430\u0434\u0451\u0436\u0435\u043d \u043a\u0430\u043a \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u0417\u0430 \u0435\u0433\u043e \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0449\u044c \u0438 \u043f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043d\u043e\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e-\u0442\u0430\u043a\u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u0442\u0438\u043b\u0435. \u0418 \u043d\u0430 \u0437\u0430\u043a\u0443\u0441\u043a\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043a\u0442\u043e\u0440\u043e\u0432 + react + jade + sass + bullet (\u044d\u0440\u043b\u0430\u043d\u0433\u043e\u0432\u0441\u043a\u0438\u0435 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442\u044b). Stay functional, stay web!     \t<\/p>\n<div class=\"clear\"><\/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=\"http:\/\/habrahabr.ru\/post\/260961\/\"> http:\/\/habrahabr.ru\/post\/260961\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u042f \u043b\u044e\u0431\u043b\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u0437\u0430 \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u044f\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c. \u041f\u0438\u0448\u0443 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430 Elixir \/ Erlang \/ OTP, \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438, \u043d\u043e Erlang \u0441 \u0435\u0433\u043e \u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u043e\u043a\u0430 \u043c\u043d\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043b\u0438\u0436\u0435 \u0447\u0435\u043c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Lisp \u0438\u043b\u0438 Haskell. \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e Erlang == web, \u0430 \u0443 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0432\u0435\u0431\u0430 \u043f\u043e\u0440\u043e\u0439 \u0431\u044b\u0432\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: html, css, js \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u0423\u0432\u044b js \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0431\u0430, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u0434 \u043b\u044e\u0431\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438, \u0434\u0430 \u0438 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u0435\u043d js. \u0421\u043f\u0435\u0440\u0432\u0430 \u043c\u043d\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u043e\u0441\u044c \u00ab\u041b\u044f\u043c\u0431\u0434\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0435\u0441\u0442\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 js \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u044b\u0443\u0447\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u0431\u0443\u0434\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u043f\u0438\u0448\u0443 \u0432 Erlang\/Lisp\/Haskell\u00bb. \u041a\u0430\u043a \u0436\u0435 \u044f \u043e\u0448\u0438\u0431\u0430\u043b\u0441\u044f.  <\/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-259931","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/259931","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=259931"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/259931\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=259931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=259931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=259931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}