{"id":251239,"date":"2015-02-23T23:06:03","date_gmt":"2015-02-23T19:06:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=251239"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=251239","title":{"rendered":"<span class=\"post_title\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u0443\u0440\u0441\u0430 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e Scala<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<p>  \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432\u0430\u0447 \u0418\u0432\u0430\u043d, \u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u044e\u0449\u0438\u0439 Java Tech Lead \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 10+ \u043b\u0435\u0442 (Java EE, J2ME, C, C++, M-language, Delphi), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043d\u0430 Scala.<\/p>\n<p>  \u042f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e (<a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/215275\/\">Java Core + Junior Java Developer<\/a>), \u0442\u0430\u043a \u0438 \u0441\u043f\u0435\u0446\u043a\u0443\u0440\u0441\u044b (Multicore Programming for JVM (<a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/217051\/\">\u0440\u0430\u0437<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/231755\/\">\u0434\u0432\u0430<\/a>)).<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e \u0441\u043f\u0435\u0446\u043a\u0443\u0440\u0441 \u043f\u043e Scala \u0438 \u0432 \u044d\u0442\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0430\u0448\u0435\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438\/\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 (\u043a\u0443\u0440\u0441 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043e\u0434\u0430).<br \/>  <a name=\"habracut\"><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#0\"><b>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u0443\u0440\u0441\u0430<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#1_1\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: \u00ab\u0420\u0430\u0437\u043d\u043e\u0435\u00bb<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#1_2\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Object Oriented Programming in Scala<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#1_3\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Functional Programming in Scala<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#2_2\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Higher kinded types<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#2_3\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Parser combinators<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#2_4\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Metaprogramming \/ Reflection<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#2_5\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Metaprogramming \/ Macroses<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#3_1\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Scalaz<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#4_1\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Netty<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#4_2\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Akka<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#4_3\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Finagle<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#4_4\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Zookeeper<\/b><\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/#4_5\"><b>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 FP \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043e\u0442\u0440\u0430\u0441\u043b\u0438<\/b><\/a><\/p>\n<p>  <a name=\"0\"><\/a>  <\/p>\n<h2>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u0443\u0440\u0441\u0430<\/h2>\n<p>  \u0421\u043f\u0435\u0446\u043a\u0443\u0440\u0441 \u043f\u043e Scala \u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0432\u043e\u0438\u043c\u0438 \u0446\u0435\u043b\u044f\u043c\u0438<br \/>  1. \u0413\u043b\u0443\u0431\u043e\u043a\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u044f\u0437\u044b\u043a, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0430\u043a\u0438\u0435 \u00ab\u0442\u0435\u043c\u043d\u044b\u0435 \u0443\u0433\u043e\u043b\u043a\u0438\u00bb \u043a\u0430\u043a macroses, path dependent types, generics of higher kind. \u041d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 DSL. \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043e\u0442\u0440\u0430\u0441\u043b\u0438 \u0442\u0430\u043a \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  2. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0438 \u043d\u0430 Scala \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438) \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a \u0430\u043b\u0433\u0435\u0431\u0440\u0435 \u0438 \u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.<br \/>  3. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u044b (\u0442\u0438\u043f\u0430 Twitter \u0438 LinkedIn) \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0438\u0448\u0443\u0442 \u0441\u0432\u043e\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430 Scala. <\/p>\n<p>  \u0421\u043f\u0435\u0446\u043a\u0443\u0440\u0441 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 27 \u0444\u0435\u0432\u0440\u0430\u043b\u044f 2015 \u0433\u043e\u0434\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 16 \u0432\u0435\u0431\u0438\u043d\u0430\u0440\u043e\u0432 \u043f\u043e 2-2.5 \u0447\u0430\u0441\u0430. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 3 \u043c\u0435\u0441\u044f\u0446\u0430 (1-2 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043d\u0435\u0434\u0435\u043b\u044e). \u0412\u0441\u0435 \u043b\u0435\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f\u043c. \u0412\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u042f \u043e\u0442\u0432\u0435\u0447\u0430\u044e \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043a\u0430\u043a \u0432 \u0445\u043e\u0434\u0435 \u0432\u0435\u0431\u0438\u043d\u0430\u0440\u043e\u0432, \u0442\u0430\u043a \u0438 \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412\u044b \u0438\u043c\u0435\u0435\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 15-20 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u044e\u0442 Scala.<\/p>\n<ul>\n<li><b><u>\u041c\u043e\u0434\u0443\u043b\u044c #1 (4 \u043b\u0435\u043a\u0446\u0438\u0438): \u0411\u0430\u0437\u043e\u0432\u0430\u044f Scala<\/u><\/b><br \/>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u00ab\u0431\u044b\u0442\u043e\u0432\u044b\u0445\u00bb \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 Scala<br \/> \n<ul>\n<li><b>\u00ab\u0420\u0430\u0437\u043d\u043e\u0435\u00bb<\/b><br \/> \n<ul>\n<li>Local Type Inference, unified types<\/li>\n<li>Structural types, tuples<\/li>\n<li>Generics: variance, upper\/lower bounds, existential types<\/li>\n<li>Lazy values, DelayedInit trait, App \/ Application<\/li>\n<li>Implicits, view, view bounds<\/li>\n<li>Sequence \u0441omprehensions<\/li>\n<li>Annotations, Exceptions<\/li>\n<li>Work with XML<\/li>\n<li>Scala\u2019s Collections Library, Arrays<\/li>\n<\/ul>\n<p>  <\/li>\n<li><b>Object Oriented Programming<\/b><br \/> \n<ul>\n<li>Classes, objects, traits<\/li>\n<li>Type members, abstract types<\/li>\n<li>Explicitly Typed Self References<\/li>\n<li>Mixin class composition, compound types, hierarchy linearization<\/li>\n<li>Cake Pattern<\/li>\n<\/ul>\n<p>  <\/li>\n<li><b>Functional Programming<\/b><br \/> \n<ul>\n<li>Functional types, anonymous functions, nested functions, curring, partial application<\/li>\n<li>Methods \/ Functions, Operators (prefix, infix, postfix; associativity), \u0431\u0435\u0441\u0441\u043a\u043e\u0431\u043e\u0447\u043d\u0430\u044f + \u0431\u0435\u0441\u0442\u043e\u0447\u0435\u0447\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c<\/li>\n<li>Call-by-name \/ call-by-value, named and default params<\/li>\n<li>Pattern matching, case classes, extractor objects<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <\/li>\n<li><b><u>\u041c\u043e\u0434\u0443\u043b\u044c #2 (4 \u043b\u0435\u043a\u0446\u0438\u0438): \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f Scala<\/u><\/b><br \/>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 Scala, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 Java. <br \/> \n<ul>\n<li><b>Dependent Types<\/b><\/li>\n<li><b>Higher kinded types<\/b><\/li>\n<li><b>Parser combinators<\/b><\/li>\n<li><b>Metaprogramming = Reflection + Macros<\/b><\/li>\n<\/ul>\n<p>  <\/li>\n<li><b><u>\u041c\u043e\u0434\u0443\u043b\u044c #3 (4 \u043b\u0435\u043a\u0446\u0438\u0438): Type-acrobatic libraries in Scala<\/u><\/b><br \/>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044f\u0437\u044b\u043a\u0430), \u043a\u0430\u043a \u043e\u043d\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, \u0447\u0442\u043e \u043d\u0430 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<br \/> \n<ul>\n<li><b>Scalaz<\/b> \u2014 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 (\u043c\u043e\u043d\u0430\u0434\u0430, \u0430\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0442\u043e\u0440, \u043a\u0430\u0442\u0430\u043c\u043e\u0440\u0444\u0438\u0437\u043c, &#8230;)<\/li>\n<li><b>Shapeless<\/b> \u2014 a type class and dependent type based generic programming library<\/li>\n<li><b>Algebird<\/b> \u2014 \u0438\u043b\u0438 \u043a\u0430\u043a \u0432 Twitter \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0430\u043b\u0433\u0435\u0431\u0440\u0443 (\u043c\u043e\u043d\u043e\u0438\u0434, \u0433\u0440\u0443\u043f\u043f\u0430, \u043f\u043e\u043b\u0443\u043a\u043e\u043b\u044c\u0446\u043e, &#8230;)<\/li>\n<\/ul>\n<p>  <\/li>\n<li><b><u>\u041c\u043e\u0434\u0443\u043b\u044c #4 (4 \u043b\u0435\u043a\u0446\u0438\u0438): \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0435, \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/u><\/b><br \/>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0434\u043b\u044f JVM \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u00ab\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438\u00bb \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 Twitter \u043f\u0438\u0448\u0443\u0442 \u043d\u0430 Scala.<br \/> \n<ul>\n<li><b>Netty<\/b><\/li>\n<li><b>Akka<\/b><\/li>\n<li><b>Finagle<\/b><\/li>\n<li><b>Zookeeper<\/b><\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <a name=\"1_1\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: \u00ab\u0420\u0430\u0437\u043d\u043e\u0435\u00bb<\/h2>\n<h4>\u0412\u0432\u043e\u0434\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e Scala<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u0440\u0430\u0442\u043a\u0438\u0435 \u043e\u0431\u0437\u043e\u0440\u044b \u044f\u0437\u044b\u043a\u0430 (15-20 \u0441\u0442\u0440\u0430\u043d\u0438\u0446). \u041d\u043e\u0441\u044f\u0442 \u0441\u043a\u043e\u0440\u0435\u0435 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439\/\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u2014 \u043a\u0430\u043a \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 (\u041e\u0434\u0435\u0440\u0441\u043a\u0438\u0439) \u0432\u0438\u0434\u0438\u0442 \u0441\u0432\u043e\u0435 \u0434\u0435\u0442\u0438\u0449\u0435, \u0447\u0442\u043e \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u043c \u0432\u0430\u0436\u043d\u044b\u043c\/\u043e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\/\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u043c.  <\/p>\n<ul>\n<li><a href=\"http:\/\/www.scala-lang.org\/docu\/files\/ScalaTour-1.6.pdf\">A Tour of the Scala Programming Language&quot;<\/a>, Odersky + &#8230;<\/li>\n<li><a href=\"http:\/\/www.cse.unt.edu\/~tarau\/teaching\/ScalaCourse\/ScalaPapers\/ScalaOverview.pdf\">\u00abAn Overview of the Scala Programming Language\u00bb<\/a>, 2ed, Odersky + &#8230;<\/li>\n<li><a href=\"http:\/\/scala-lang.org\/docu\/files\/ScalaTutorial.pdf\">\u00abA Scala Tutorial for Java programmers\u00bb<\/a>, Michel Schinz, Philipp Haller<\/li>\n<\/ul>\n<h4>Scala Style Guide<\/h4>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/paypal\/scala-style-guide\">PayPal Style Guide<\/a><\/li>\n<li><a href=\"http:\/\/twitter.github.io\/effectivescala\/\">Twitter.com: \u00abEffective Scala\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/style\/\">scala-lang.org: Style Guide<\/a><\/li>\n<\/ul>\n<h4>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e Scala<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0441\u0432\u0435\u0449\u0430\u044e\u0442 \u0438 \u043f\u0440\u043e\u044f\u0441\u043d\u044f\u044e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u044f\u0437\u044b\u043a\u0430. <\/p>\n<ul>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/64423\/files\/ScalableComponent.pdf\">\u00abScalable Component Abstractions\u00bb<\/a>, Odersky +\u2026. We identify three programming language abstractions for the construction of reusable components: <b>abstract type members<\/b>, <b>explicit selftypes<\/b> and <b>modular mixin composition<\/b>. Together, these abstractions enable us to transform an arbitrary assembly of static program parts with hard references between them into a system of reusable components.\u2026 We demonstrate this approach in two case studies, a subject\/observer framework and a compiler front-end.<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/150280\/files\/TypeClasses.pdf\">\u00abType classes as objects and implicits\u00bb<\/a>, Odersky +\u2026, <b>Type classes<\/b> were originally developed in Haskell as a disciplined alternative to ad-hoc polymorphism. Type classes have been shown to provide a type-safe solution to important challenges in software engineering and programming languages such as, for example, <b>retroactive extension<\/b> of programs. They are also recognized as a good mechanism for <b>concept-based generic programming<\/b> and, more recently, have evolved into a <b>mechanism for type-level computation<\/b>. This paper presents a lightweight approach to type classes in object-oriented (OO) languages with generics using the <b>CONCEPT pattern<\/b> and <b>implicits<\/b> (a type-directed implicit parameter passing mechanism).<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/98468\/files\/MatchingObjectsWithPatterns-TR.pdf\">\u00abMatching Objects With Patterns\u00bb<\/a>, Odersky + &#8230;, <b>Pattern Matching<\/b> \u0432\u043e \u0432\u0441\u0435\u0439 \u043a\u0440\u0430\u0441\u0435 \u0441 <b>Case classes<\/b> \/ <b>Extractors<\/b> + \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 (<b>Visitor<\/b>, <b>Type-Test\/Type-Cast<\/b>, &#8230;)<\/li>\n<\/ul>\n<h4>\u041a\u0443\u0440\u0441\u044b\/\u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0438 \u043f\u043e Scala<\/h4>\n<p>  \u041e\u0445\u0432\u0430\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043a\u043d\u0438\u0433\u0443, \u043d\u043e \u043d\u0435 \u043a\u043d\u0438\u0433\u0438. \u041e\u0442 \u00ab\u043a\u043b\u0430\u0441\u0441\u0438\u043a\u043e\u0432\u00bb.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.scala-lang.org\/node\/1305\">\u00abLearning Scala\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/matt.might.net\/articles\/learning-scala-in-small-bites\/\">\u00abLearning Scala in Small Bites\u00bb<\/a><\/li>\n<li><a href=\"https:\/\/twitter.github.io\/scala_school\/\">Twitter.com: Scala School!<\/a><\/li>\n<li><a href=\"https:\/\/www.coursera.org\/course\/progfun\">Odersky + Coursera = \u00abFunctional Programming Principles in Scala\u00bb<\/a><\/li>\n<li><a href=\"https:\/\/www.coursera.org\/course\/reactive\">Odersky + Coursera = \u00abPrinciples of Reactive Programming\u00bb<\/a><\/li>\n<\/ul>\n<p>  \u0414\u0430, <a href=\"https:\/\/tech.coursera.org\/blog\/2014\/02\/18\/why-we-love-scala-at-coursera\/\">\u0441\u0430\u043c\u0430 Coursera \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Scala<\/a>.<\/p>\n<h4>\u041a\u043d\u0438\u0433\u0438<\/h4>\n<p>  \u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043d\u0438\u0433 (\u043f\u043e\u0440\u044f\u0434\u043a\u0430 20) \u043f\u043e Scala, \u043d\u043e \u043c\u043d\u0435 \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 4  <\/p>\n<ul>\n<li><a href=\"http:\/\/www.amazon.com\/Programming-Scala-Comprehensive-Step---Step\/dp\/0981531644\/\">\u00abProgramming in Scala. 2ed\u00bb<\/a> \u2014 \u043a\u043d\u0438\u0433\u0430 \u043e\u0442 \u041e\u0434\u0435\u0440\u0441\u043a\u043e\u0433\u043e, \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044e<\/li>\n<li><a href=\"http:\/\/www.amazon.com\/Scala-Impatient-Cay-S-Horstmann\/dp\/0321774094\">\u00abScala for the Impatient\u00bb<\/a> \u2014 \u0442\u043e\u0432\u0430\u0440\u0438\u0449 \u0425\u043e\u0440\u0441\u0442\u043c\u0430\u043d \u0438 \u0442\u0443\u0442 \u0443\u0441\u043f\u0435\u043b. \u0415\u0441\u043b\u0438 \u0412\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0435\u0433\u043e \u0434\u0432\u0443\u0445\u0442\u043e\u043c\u043d\u0438\u043a \u043f\u043e Java, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438 \u044d\u0442\u043e<\/li>\n<li><a href=\"http:\/\/www.amazon.com\/Scala-Depth-Joshua-D-Suereth\/dp\/1935182706\">\u00abScala in Depth\u00bb<\/a> \u2014 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043e\u0445\u0432\u0430\u0442: \u043e\u0442 \u043e\u0441\u043d\u043e\u0432 \u0434\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432<\/li>\n<li><a href=\"http:\/\/www.amazon.com\/DSLs-Action-Debasish-Ghosh\/dp\/1935182455\/\">\u00abDSLs in Action\u00bb<\/a> \u2014 \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 DSL \u043d\u0430 Scala<\/li>\n<\/ul>\n<p>  <a name=\"1_2\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Object Oriented Programming in Scala<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/52625\/files\/IC_TECH_REPORT_200433.pdf\">\u00abIndependently Extensible Solutions to the Expression Problem\u00bb<\/a>, Odersky +\u2026. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f Scala-\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u00ab\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439\u00bb Expression Problem. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439) \u0438 \u0448\u0430\u0431\u043b\u043e\u043d Visitor (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439), \u043e\u0434\u043d\u0430\u043a\u043e \u041e\u0434\u0435\u0440\u0441\u043a\u0438\u0439 \u0440\u0435\u0448\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/li>\n<li><a href=\"http:\/\/www.artima.com\/scalazine\/articles\/selfless_trait_pattern.html\">\u00abScala&#8217;s Selfless Trait Pattern\u00bb<\/a>, Bill Venners \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Scala<\/li>\n<li><a href=\"http:\/\/www.artima.com\/scalazine\/articles\/stackable_trait_pattern.html\">\u00abScala&#8217;s Stackable Trait Pattern\u00bb<\/a>, Bill Venners \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Scala<\/li>\n<\/ul>\n<p>  <a name=\"1_3\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Functional Programming in Scala<\/h2>\n<p>  <a href=\"http:\/\/www.amazon.com\/Functional-Programming-Scala-Paul-Chiusano\/dp\/1617290653\/\">\u00abFunctional Programming in Scala\u00bb<\/a> \u2014 \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044e\u0442\u043e\u0440\u043e\u0432 \u0432 Scalaz.<\/p>\n<p>  <a name=\"2_2\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Higher kinded types<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/drops.dagstuhl.de\/opus\/volltexte\/2009\/2338\/pdf\/09005.OderskyM.2338.pdf\">\u00abFighting Bit Rot with Types\u00bb<\/a>, Odersky +\u2026 \u2014 \u043e\u043f\u0438\u0441\u0430\u043d \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 Scala \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 2.8 \u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0432 <b>higher-kind types<\/b>, <b>implicit parameters<\/b> \u0438 <b>implicit conversions<\/b><\/li>\n<\/ul>\n<p>  <a name=\"2_3\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Parser combinators<\/h2>\n<p>  \u0412 Scala \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u0430\u043a\u0435\u0442 (<a href=\"http:\/\/www.scala-lang.org\/api\/2.10.2\/index.html#scala.util.parsing.package\">scala.util.parsing<\/a>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 External DSL \u043d\u0430 Scala \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u043c \u043a EBNF. \u0422.\u0435. \u044d\u0442\u043e \u00ab\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 DSL\u00bb \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u0445 DSL\u00bb. <\/p>\n<p>  In Scala, parsers are implemented as monads \u2014 hence defining combinators for parsers are just monadic transformations implementing sequencing, alternation or any other composition operations. <\/p>\n<p>  \u0412 \u0440\u044f\u0434\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c API \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432) \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u044b). \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u044f\u0434\u0440\u0435 \u044f\u0437\u044b\u043a\u0430 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 DSL.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.cs.kuleuven.be\/publicaties\/rapporten\/cw\/CW491.pdf\">\u00abParser Combinators in Scala\u00bb<\/a>, Odersky + &#8230;, \u2014 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Parser Combinators \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 scala.util.parsing. \u0421\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0434\u043b\u044f simple arithmetic expressions, xml, lambda calculus that tracks variable binding<\/li>\n<li><a href=\"http:\/\/www.artima.com\/pins1ed\/combinator-parsing.html\">\u00abCombinator Parsing, Chapter 31 of Programming in Scala, First Edition\u00bb<\/a> \u2014 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0443\u0447\u0435\u0431\u043d\u0438\u043a \u043e\u0442 Martin Odersky, Lex Spoon, and Bill Venners. \u0421\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0434\u043b\u044f arithmetic expressions, json,. \u0415\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u0435, \u043d\u043e \u043e\u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435.<\/li>\n<li><a href=\"http:\/\/eprints.nottingham.ac.uk\/237\/1\/monparsing.pdf\">\u00abMonadic Parser Combinators\u00bb<\/a>, Hutton + Meijer<br \/>   \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0442\u0430\u0442\u0435\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u041e\u0434\u0435\u0440\u0441\u043a\u0438\u0439 \u0441 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430\u043c\u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 parser combinators \u0434\u043b\u044f Scala<\/li>\n<li><a href=\"https:\/\/rkrishnan.org\/files\/wadler-1985.pdf\">\u00abHow to replace failure by a list of successes: A method for exception handling, backtracking, and pattern matching in lazy functional languages<\/a>, Wadler<\/li>\n<li><a href=\"http:\/\/eprints.nottingham.ac.uk\/221\/1\/parsing.pdf\">\u00bbHigher-order functions for parsing&quot;<\/a>, Hutton<\/li>\n<li><a href=\"http:\/\/roman-dushkin.narod.ru\/files\/fp__jeroen_fokker_001.pdf\">\u00abFunctional parsers\u00bb<\/a>, Fokker<\/li>\n<li><a href=\"https:\/\/karczmarczuk.users.greyc.fr\/TEACH\/Doc\/det_parsers.pdf\">\u00abDeterministic, Error-Correcting Combinator Parsers\u00bb<\/a>, Swierstra + Duponcheel<\/li>\n<li><a href=\"http:\/\/dspace.library.uu.nl\/bitstream\/handle\/1874\/2535\/2001-35.pdf\">\u00abParsec: Direct Style Monadic Parser Combinators: For The Real World\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/www.brynosaurus.com\/pub\/lang\/packrat-icfp02.pdf\">\u00abPackrat Parsing: Simple, Powerful, Lazy, Linear Time\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/www.cs.nott.ac.uk\/~gmh\/pearl.pdf\">\u00abMonadic Parsing in Haskell\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/research.microsoft.com\/pubs\/64036\/picklercombinators.pdf\">\u00abPickler Combinators (functional Pearl)\u00bb<\/a> \u2014 pickler-\u0430\u043c\u0438 \u0432 Haskell \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u00ab\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b\u00bb, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 pic\u043aler-\u043e\u043c \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 pickler-\u043e\u0432 \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. This pearl was practically motivated: an SML version of the pickler library is used inside the SML.NET compiler. The essential new ingredient of pickler combinators is the tying together of the pickling and unpickling actions in a single value.<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/187787\/files\/oopsla-pickling_1.pdf\">\u00abInstant Pickles: Generating Object-Oriented Pickler Combinators for Fast and Extensible Serialization\u00bb<\/a> Miller, Haller, Burmako, Odersky \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 (\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435) \u0434\u043b\u044f Scala<\/li>\n<li><a href=\"http:\/\/www.westpoint.edu\/eecs\/SiteAssets\/SitePages\/Faculty%20Publication%20Documents\/Okasaki\/jfp98sixth.pdf\">\u00abEven Higher-Order Functions for Parsing or Why Would Anyone Ever Want To Use a Sixth-Order Function? (functional pearl)\u00bb<\/a>, Chris Okasaki \u2014 \u043f\u0430\u0440\u0441\u0435\u0440 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043a \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u044b \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 (\u043f\u0430\u0440\u0441\u0435\u0440\u044b) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 (\u043f\u0430\u0440\u0441\u0435\u0440\u044b). \u041a\u0440\u0438\u0441 \u041e\u043a\u0430\u0441\u0430\u043a\u0438 \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0440\u0430\u0437\u0443\u043c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>\u0448\u0435\u0441\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430!!!<\/b> \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u043f\u0430\u0440\u0441\u0435\u0440\u0430\u043c\u0438.<\/li>\n<\/ul>\n<p>  <a name=\"2_4\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Metaprogramming \/ Reflection<\/h2>\n<p>  A particularly interesting aspect of macros is that they are based on the same API used also for Scala\u2019s runtime reflection, provided in package scala.reflect.api. This enables the sharing of generic code between macros and implementations that utilize runtime reflection.<\/p>\n<p>  Until 2.10, Scala has not had any reflection capabilities of its own. Instead, one could use part of the Java reflection API, namely that dealing with providing the ability to dynamically inspect classes and objects and access their members. However, many Scala-specific elements are unrecoverable under standalone Java reflection, which only exposes Java elements (no functions, no traits) and types (no existential, higher-kinded, path-dependent and abstract types). In addition, Java reflection is also unable to recover runtime type info of Java types that are generic at compile-time; a restriction that carried through to runtime reflection on generic types in Scala.<\/p>\n<p>  In Scala 2.10, a new reflection library was introduced not only to address the shortcomings of Java\u2019s runtime reflection on Scala-specific and generic types, but to also add a more powerful toolkit of general reflective capabilities to Scala.\u2026 with full-featured runtime reflection for Scala types and generics\u2026  <\/p>\n<ul>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/reflection\/overview.html\">\u00abscala-lang.org: Reflection: Overview\u00bb<\/a> Miller, Burmako, Haller<\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/reflection\/environment-universes-mirrors.html\">\u00abscala-lang.org: Reflection: Environment, Universes, and Mirrors\u00bb<\/a> Miller, Burmako, Haller<\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/reflection\/symbols-trees-types.html\">\u00abscala-lang.org: Reflection: Symbols, Trees, and Types\u00bb<\/a> Miller, Burmako, Haller<\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/reflection\/annotations-names-scopes.html\">\u00abscala-lang.org: Reflection: Annotations, Names, Scopes, and More\u00bb<\/a> Miller, Burmako, Haller<\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/reflection\/typetags-manifests.html\">\u00abscala-lang.org: Reflection: TypeTags and Manifests\u00bb<\/a> Miller, Burmako, Haller<\/li>\n<\/ul>\n<p>  <a name=\"2_5\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Metaprogramming \/ Macroses<\/h2>\n<p>  A particularly interesting aspect of macros is that they are based on the same API used also for Scala\u2019s runtime reflection, provided in package scala.reflect.api. This enables the sharing of generic code between macros and implementations that utilize runtime reflection.<\/p>\n<p>  Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C\/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala. [<a href=\"http:\/\/scalamacros.org\/index.html\">here<\/a>]<\/p>\n<p>  Macros are functions that are called by the compiler during compilation. Within these functions the programmer has access to compiler APIs. For example, it is possible to generate, analyze and typecheck code. You can learn more about macros from documentation. [<a href=\"http:\/\/scalamacros.org\/index.html\">here<\/a>]<\/p>\n<p>  <b>Def macros<\/b> are shipped as an <b>experimental feature<\/b> of Scala since version <b>2.10.0<\/b>. A subset of def macros, pending a thorough specification, is tentatively scheduled to become stable in one of the future versions of Scala.<\/p>\n<p>  <b>Experimental feature<\/b> \u2014 Also note that macros are considered an experimental and advanced feature, so in order to write macros you need to enable them. Do that either with import scala.language.experimental.macros on per-file basis or with -language:experimental.macros (providing a compiler switch) on per-compilation basis. Your users, however, don\u2019t need to enable anything \u2014 macros look like normal methods and can be used as normal methods, without any compiler switches or additional configurations.  <\/p>\n<ul>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/macros\/overview.html\">\u00abscala-lang.org: Def Macros\u00bb<\/a> Burmako \u2014 \u043e\u0431\u0437\u043e\u0440 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 scala-lang.org<\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/quasiquotes\/intro.html\">\u00abscala-lang.org: Quasiquotes\u00bb<\/a> Shabalin \u2014 \u043e\u0431\u0437\u043e\u0440 \u00ab\u043a\u0432\u0430\u0437\u0438\u0446\u0438\u0442\u0430\u0442\u00bb<\/li>\n<li><a href=\"http:\/\/docs.scala-lang.org\/overviews\/macros\/bundles.html\">\u00abscala-lang.org: Macro Bundles\u00bb<\/a> Burmako \u2014 \u043e\u0431\u0437\u043e\u0440 macro bundles<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/183862\/files\/2012-07-09-MetaPaper.pdf\">\u00abScala Macros, a Technical Report\u00bb<\/a>, Burmako + Odersky<\/li>\n<li><a href=\"http:\/\/scalamacros.org\/paperstalks\/2014-02-04-WhatAreMacrosGoodFor.pdf\">\u00abWhat Are Macros Good For?\u00bb<\/a>, Burmako \u2014 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0445\u043e\u0440\u043e\u0448\u0438 \u0434\u043b\u044f Code generation, Static checks, Domain-specific languages<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/186844\/files\/2013-04-22-LetOurPowersCombine.pdf\">\u00abScala Macros: Let Our Powers Combine! On How Rich Syntax and Static Types Work with Metaprogramming\u00bb<\/a> Burmako<\/li>\n<li><a href=\"https:\/\/github.com\/scalamacros\/scalamacros.github.com\/blob\/master\/paperstalks\/2012-07-09-MetaPaper.pdf\">\u00abScala Macros, a Technical Report\u00bb<\/a> Burmako, Odersky<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/185242\">\u00abQuasiquotes for Scala, a Technical Report\u00bb<\/a> Shabalin, Burmako, Odersky \u2014 introduce quasiquotes for the Scala programming language, which solve the problem of manual tree construction and deconstruction. Included case studies show that quasiquotes indeed are easier to work with than existing tools for tree construction. When limitations of current implementation are lifted quasiquotes will become the ultimate tool for the tree manipulation.<\/li>\n<li><a href=\"http:\/\/infoscience.epfl.ch\/record\/203432\/files\/p73-jovanovic.pdf\">\u00abYin-Yang: Concealing the Deep Embedding of DSLs\u00bb<\/a> Jovanovic, Shaikhha, Stucki, Koch, Odersky, Nikolaev \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Yin-Yang, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u00abdeeply embedded domain-specific languages\u00bb \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432<\/li>\n<\/ul>\n<p>  <a name=\"3_1\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Scalaz<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/eed3si9n.com\/learning-scalaz\/\">\u00ablearning Scalaz\u00bb<\/a> \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 online-\u0443\u0447\u0435\u0431\u043d\u0438\u043a \u0438\u0437 22 \u0443\u0440\u043e\u043a\u043e\u0432.<\/li>\n<li><a href=\"http:\/\/hacking-scala.org\/post\/49050104489\/scalaz-resources-for-beginners\">\u00abScalaz \u2014 Resources For Beginners\u00bb<\/a> \u2014 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e Scalaz<\/li>\n<li><a href=\"https:\/\/hseeberger.wordpress.com\/2010\/11\/25\/introduction-to-category-theory-in-scala\/\">\u00abIntroduction to Category Theory in Scala\u00bb<\/a><\/li>\n<li><a href=\"https:\/\/hseeberger.wordpress.com\/2011\/01\/31\/applicatives-are-generalized-functors\/\">\u00abApplicatives are generalized functors\u00bb<\/a><\/li>\n<li><a href=\"https:\/\/apocalisp.wordpress.com\/\">Apocalisp blog<\/a> \u2014 OLD blog of \u00abFunctional Programming Scala\u00bb author<\/li>\n<li><a href=\"http:\/\/blog.higher-order.com\/\">Higher Order. Philosophy and functional programming.<\/a> \u2014 NEW blog of \u00abFunctional Programming Scala\u00bb author<\/li>\n<li><a href=\"http:\/\/arosien.github.io\/scalaz-base-talk-201208\/#slide1\">\u00abScalaz: For the Rest of Us\u00bb<\/a> \u2014 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 Scalaz \u0411\u0415\u0417 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439<\/li>\n<\/ul>\n<p>  <a name=\"4_1\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Netty<\/h2>\n<p>  <b><a href=\"http:\/\/netty.io\">Netty<\/a><\/b> \u2014 an asynchronious and event-driven network application framework for rapid development of maintanable high performance protocol servers and clients. Netty \u2014 \u044d\u0442\u043e de fakto \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f java.net.*, NIO \u0438 NIO.2 (Akka \u0438 Finagle \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb Netty, Zookeeper \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e NIO\/NIO.2). \u0425\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 <a href=\"http:\/\/www.dre.vanderbilt.edu\/~schmidt\/PDF\/reactor-siemens.pdf\">Reactor<\/a> \/ <a href=\"http:\/\/www.cs.wustl.edu\/~schmidt\/PDF\/proactor.pdf\">Proactor<\/a> \/ <a href=\"https:\/\/www.dre.vanderbilt.edu\/~schmidt\/PDF\/ACT.pdf\">Asynchronous Completion Token<\/a> \/ <a href=\"http:\/\/www.cs.wustl.edu\/~schmidt\/PDF\/Acc-Con.pdf\">Acceptor-Connector<\/a> \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c Netty \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0438 \u0442\u043e, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 (http, ftp, smtp, websockets, &#8230;).  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/netty\/netty\/tree\/master\/example\/src\/main\/java\/io\/netty\/example\/echo\">Full code of example: io.netty.example.echo.*<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 echo-\u043a\u043b\u0438\u0435\u043d\u0442 \u0438 echo-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 Netty<\/li>\n<li><a href=\"https:\/\/github.com\/netty\/netty\/tree\/master\/example\/src\/main\/java\/io\/netty\/example\/telnet\">Full code of example: io.netty.example.telnet.*<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 telnet-\u043a\u043b\u0438\u0435\u043d\u0442 \u0438 telnet-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 Netty<\/li>\n<li><a href=\"https:\/\/github.com\/netty\/netty\/tree\/master\/example\/src\/main\/java\/io\/netty\/example\/factorial\">Full code of example: io.netty.example.factorial.*<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/netty\/netty\/tree\/master\/example\/src\/main\/java\/io\/netty\/example\/http\">Full code of example: io.netty.example.http.*<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 http-\u043a\u043b\u0438\u0435\u043d\u0442 \u0438 http-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 Netty<\/li>\n<li><a href=\"https:\/\/github.com\/netty\/netty\/tree\/master\/example\/src\/main\/java\/io\/netty\/example\/socksproxy\">Full code of example: io.netty.example.socksproxy.*<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 SOCKS5-\u043f\u0440\u043e\u043a\u0441\u0438 \u043d\u0430 Netty<\/li>\n<li><a href=\"http:\/\/normanmaurer.me\/presentations\/2014-facebook-eng-netty\/slides.html#1.0\">\u00abNetty Best Practices\u00bb<\/a> \u2014 \u0441\u043e\u0432\u0435\u0442\u044b \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u00abNetty in Action\u00bb<\/li>\n<li><a href=\"https:\/\/blog.twitter.com\/2013\/netty-4-at-twitter-reduced-gc-overhead\">Netty 4 at Twitter: Reduced GC Overhead<\/a><\/li>\n<li><a href=\"http:\/\/netty.io\/wiki\/related-articles.html\">Related articles<\/a> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 100 \u0441\u0442\u0430\u0442\u0435\u0439, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 Netty<\/li>\n<\/ul>\n<p>  <a name=\"4_2\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Akka<\/h2>\n<p>  <b><a href=\"http:\/\/akka.io\">Akka<\/a><\/b> \u2014 de facto \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 framework-\u0430 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0445 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f JVM. <a href=\"http:\/\/docs.scala-lang.org\/overviews\/core\/actors-migration-guide.html\">\u041d\u0430\u0447\u0438\u043d\u0430\u044f c \u0432\u0435\u0440\u0441\u0438\u0438 Scala 2.10.0 Akka \u0432\u044b\u0442\u0435\u0441\u043d\u0438\u043b\u0430 \u00ab\u0440\u043e\u0434\u043d\u0443\u044e\u00bb \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043a\u0442\u043e\u0440\u043e\u0432<\/a>.  <\/p>\n<ul>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/terminology.html\">Terminology, Concepts<\/a> \u2014 Concurrency vs. Parallelism, Asynchronous vs. Synchronous, Non-blocking vs. Blocking, Deadlock vs. Starvation vs. Live-lock, Race Condition, Non-blocking Guarantees (Progress Conditions)<\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/actor-systems.html\">Actor Systems<\/a> \u2014 Hierarchical Structure, Configuration Container, Actor Best Practices<\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/actors.html\">What is an Actor?<\/a> \u2014 Actor Reference, State, Behavior, Mailbox, Children, Supervisor Strategy<\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/supervision.html\">Supervision and Monitoring<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/addressing.html\">Actor References, Paths and Addresses<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/jmm.html\">Akka and the Java Memory Model<\/a> \u2014 The Java Memory Model, Actors and the Java Memory Model, Futures and the Java Memory Model, STM and the Java Memory Model, Actors and shared mutable state<\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/general\/message-delivery-guarantees.html\">Message Delivery Guarantees<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/actors.html\">Scala API: Actors<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/typed-actors.html\">Scala API: Typed Actors<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/event-bus.html\">Scala API: Event Bus<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/scheduler.html\">Scala API: Scheduler<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/futures.html\">Scala API: Futures<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/dataflow.html\">Scala API: Dataflow Concurrency<\/a><\/li>\n<li><a href=\"http:\/\/doc.akka.io\/docs\/akka\/2.1.4\/scala\/fault-tolerance.html\">Scala API: Fault Tolerance<\/a><\/li>\n<\/ul>\n<p>  <a name=\"4_3\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Finagle<\/h2>\n<p>  <b><a href=\"https:\/\/twitter.github.io\/finagle\/\">Finagle<\/a><\/b> \u2014 A Protocol-Agnostic extensible RPC System for the JVM, used to construct high-concurrency servers. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 twitter.com. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u2014 <a href=\"http:\/\/monkey.org\/~marius\/talks\/twittersystems\/#9\">\u00abWe must program locally, communicate globally\u00bb<\/a>. \u0427\u0430\u0441\u0442\u044c <a href=\"http:\/\/blog.oskarsson.nu\/post\/40196324612\/the-twitter-stack\">Twitter-\u0441\u0442\u0435\u043a\u0430<\/a> (\u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Ostrich, Zipkin, Mesos, Iago, ZooKeeper, Scalding). Finagle \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, connection pooling, \u0432\u044b\u0437\u043e\u0432 \u0441 timeout-\u043e\u043c, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, \u0441\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438.  <\/p>\n<ul>\n<li>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Finagle: \u2014 <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/Protocols.html\">Protocols<\/a>, <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/Futures.html\">Futures<\/a>, <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/ServicesAndFilters.html\">Services &#038; Filters<\/a>, <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/Servers.html\">Servers<\/a>, <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/Clients.html\">Clients<\/a>, <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/Names.html\">Names<\/a>, <a href=\"http:\/\/twitter.github.io\/finagle\/guide\/Metrics.html\">Metrics<\/a><\/li>\n<li><a href=\"https:\/\/blog.twitter.com\/2011\/finagle-a-protocol-agnostic-rpc-system\">\u00abFinagle: A Protocol-Agnostic RPC System\u00bb<\/a> \u2014 \u043f\u043e\u0441\u0442 \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Twitter-\u0430 \u043e Finagle<\/li>\n<li><a href=\"http:\/\/twitter.github.io\/scala_school\/searchbird.html\">\u00abHow to build a simple distributed search engine using Scala and Finagle framework\u00bb<\/a> \u2014 \u043b\u0435\u043a\u0446\u0438\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Twitter.com \/ Scala school.<\/li>\n<li><a href=\"http:\/\/thrift.apache.org\/static\/files\/thrift-20070401.pdf\">\u00abThrift: Scalable Cross-Language Services Implementation\u00bb<\/a> \u2014 \u043e\u043f\u043e\u0440\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 Thrift. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u00ab\u043d\u0435\u0441\u0443\u0449\u0438\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c\u00bb \u0434\u043b\u044f Finagle<\/li>\n<\/ul>\n<p>  <a name=\"4_4\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: Zookeeper<\/h2>\n<p>  <b><a href=\"http:\/\/zookeeper.apache.org\/\">Zookeeper<\/a><\/b> \u2014 fail-safe \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c <a href=\"http:\/\/blog.oskarsson.nu\/post\/40196324612\/the-twitter-stack\">Twitter-\u0441\u0442\u0435\u043a\u0430<\/a>. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u044b\u0445) \u2014 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a, \u0431\u0430\u0440\u044c\u0435\u0440\u043e\u0432. \u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043a\u0430\u043a two-phase-commit, \u0432\u044b\u0431\u043e\u0440\u044b \u043b\u0438\u0434\u0435\u0440\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445.  <\/p>\n<ul>\n<li><a href=\"http:\/\/zookeeper.apache.org\/doc\/trunk\/zookeeperProgrammers.html\">\u00abZooKeeper Programmer&#8217;s Guide\u00bb<\/a> \u2014 \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 (Data Model, Sessions, Watches, access control, Consistency Guarantees, Common Problems and Troubleshooting).<\/li>\n<li><a href=\"http:\/\/zookeeper.apache.org\/doc\/trunk\/zookeeperTutorial.html\">\u00abProgramming with ZooKeeper \u2014 A basic tutorial\u00bb<\/a> \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0440\u044c\u0435\u0440\u043e\u0432 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c-\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c.<\/li>\n<li><a href=\"http:\/\/zookeeper.apache.org\/doc\/trunk\/zookeeperInternals.html\">\u00abZooKeeper Internals\u00bb<\/a> \u2014 Atomic Broadcast, Leader Activation, Quorums<\/li>\n<li><a href=\"http:\/\/zookeeper.apache.org\/doc\/current\/recipes.html\">\u00abZooKeeper Recipes and Solutions\u00bb<\/a> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Zookeeper \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u0440\u044c\u0435\u0440, \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443. \u0414\u0435\u043b\u0430\u0435\u043c two-phase-commit \u0438 leader election.<\/li>\n<li><a href=\"http:\/\/static.usenix.org\/events\/osdi06\/tech\/full_papers\/burrows\/burrows_html\/\">\u00abThe Chubby lock service for loosely coupled distributed systems\u00bb<\/a> \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0442 Google. Zookeeper \u0434\u0435\u043b\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u043f\u043e\u0447\u0435\u0440\u043f\u043d\u0443\u0442\u0443\u044e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/li>\n<li><a href=\"http:\/\/www-leland.stanford.edu\/class\/cs347\/reading\/zab.pdf\">\u00abZab: High-performance broadcast for primary-backup systems\u00bb<\/a> \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 Zab, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 Zookeeper.<\/li>\n<li><a href=\"https:\/\/www.usenix.org\/legacy\/event\/usenix10\/tech\/full_papers\/Hunt.pdf\">\u00abZooKeeper: Wait-free Coordination for Internet-scale Systems.\u00bb<\/a> \u2014 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0442 Yahoo (\u0430 Zookeeper \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0442\u0430\u043c \u0434\u043b\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0438 HDFS\/Hadoop-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430).<\/li>\n<li><a href=\"http:\/\/highscalability.com\/blog\/2008\/7\/15\/zookeeper-a-reliable-scalable-distributed-coordination-syste.html\">\u00abZooKeeper \u2014 A Reliable, Scalable Distributed Coordination System\u00bb<\/a> \u2014 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 infoq.com<\/li>\n<\/ul>\n<p>  <a name=\"4_5\"><\/a>  <\/p>\n<h2>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 FP \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043e\u0442\u0440\u0430\u0441\u043b\u0438<\/h2>\n<p>  \u041f\u043e \u0440\u044f\u0434\u0443 \u043f\u0440\u0438\u0447\u0438\u043d (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u0432) \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043e\u0442\u0440\u0430\u0441\u043b\u0438, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043f\u0440\u043e\u0441 \u043d\u0430 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u0432\u00bb \u0432 \u041d\u044c\u044e-\u0419\u043e\u0440\u043a\u0435 \u0438 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. <\/p>\n<ul>\n<li><a href=\"http:\/\/www.cs.uu.nl\/docs\/vakken\/ia\/stof\/compcontracts.pdf\">\u00abComposing Contracts: An Adventure in Financial Engineering\u00bb<\/a>, Simon Peyton Jones +\u2026 \u2014 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Haskell \u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 Haskell. \u00abWe introduce a combinator library that allows us to describe such contracts precisely, and a compositional denotational semantics that says what such contracts are worth. We sketch an implementation of our combinator library in Haskell. Interestingly, lazy evaluation plays a crucial role\u00bb. \u00abThe finance industry has an enormous vocabulary of jargon for typical combinations of financial contracts (swaps, futures, caps, oors, swaptions, spreads, straddles, captions, European options, American options, &#8230;the list goes on)\u00bb. \u00abOur combinators can be used to describe a contract, but we also want to process a contract. Notably, we want to be able to find the value of a contract. In Section 4 we describe how to give an abstract valuation semantics to our combinators. A fundamentally-important property of this semantics is that it is compositional; that is, the value of a compound contract is given by combining the values of its sub-contracts.\u00bb<\/li>\n<li><a href=\"http:\/\/www.spinellis.gr\/pubs\/jrnl\/2008-JFP-ExoticTrades\/html\/FSNB08.pdf\">\u00abCommercial Uses: Going functional on exotic trades\u00bb<\/a> \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 DSL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0432 Barclays \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 (Haskell). \u00abThe Functional Payout Framework (fpf) is a Haskell application that uses an embedded domain-specific functional language to represent and process exotic financial derivatives. Whereas scripting languages for pricing exotic derivatives are common in banking, fpf uses multiple interpretations to not only price such trades, but also to analyse the scripts to provide lifecycle support and more\u00bb<\/li>\n<li><a href=\"http:\/\/vimeo.com\/6702641\">\u00abScala at EDF Trading. Implementing a Domain-Specific Language for Derivative Pricing with Scala.\u00bb<\/a> \u2014 \u00abDIESEL is a language for representing energy derivatives to facilitate Monte Carlo pricing and analytics. The DSL consists of a combinator parser libary and algebraic data types with case classes.\u00bb<\/li>\n<li><a href=\"http:\/\/www.itu.dk\/~elsborg\/sttt06.pdf\">\u00abCompositional specification of commercial contracts\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/www.st.ewi.tudelft.nl\/~arie\/papers\/risla95\/risla95.pdf\">\u00abAn Algebraic Specification of a Language for Describing Financial Products\u00bb<\/a> \u2014 \u00abWe report on the use of formal methods and supporting tools during the development of a language applied in a banking environment. This language, called RISLA, is used to define the nature of the interest products offered by a bank. A RISLA description fixes the cash flows (amounts of money coming in or going out on particular dates) resulting from a product\u2026. The language has been developed with the use of algebraic specifications, the role of which is discussed.\u00bb<\/li>\n<li><a href=\"http:\/\/www.st.ewi.tudelft.nl\/~arie\/papers\/stja97.pdf\">\u00abDomain-Specific Languages versus Object-Oriented Frameworks: A Financial Engineering Case Study\u00bb<\/a> \u2014 \u00abThe use of a domain-specific language can help to develop readable and maintainable applications in that domain with little effort. Alternatively, the same aims can be achieved by setting up an object-oriented framework. For the domain of financial engineering, independently both an objectoriented framework and a domain-specific language have been developed. We use this opportunity to contrast these two, to highlight the differences and to discuss opportunities for mutual benefits.\u00bb<\/li>\n<li><a href=\"https:\/\/falconair.github.io\/2015\/01\/30\/composingcontracts.html\">\u00abAdventures in financial and software engineering\u00bb<\/a><\/li>\n<li><a href=\"http:\/\/dslfin.org\/resources.html\">\u00abFinancial Domain-Specific Language Listing <\/a> \u2014 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 API \/ DSL \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438<\/li>\n<\/ul>\n<p>  P.S. \u041d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u0438\u043c \u043f\u043e<br \/>  skype: GolovachCourses<br \/>  email: GolovachCourses@gmail.com    \t\t\t\t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041a\u0430\u043a\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \/ \u043a\u0430\u043a\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0412\u044b \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \/ \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0440\u0435\u0437\u044e\u043c\u0435?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"251239\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"13215\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65345\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65345\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65345\">Play<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65347\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65347\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65347\">Lift<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65349\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65349\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65349\">Scalatra<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65355\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65355\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65355\">ScalaTest<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65357\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65357\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65357\">Specs2<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65359\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65359\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65359\">Slick<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65361\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65361\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65361\">Anorm<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65363\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65363\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65363\">Squeryl<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65365\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65365\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65365\">Activate<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65367\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65367\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65367\">SORM<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65369\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65369\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65369\">Scalding<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65371\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65371\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65371\">Spark<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65373\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65373\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65373\">Finagle<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65375\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65375\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65375\">Scalaz<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65377\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65377\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65377\">Algebird<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65379\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65379\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65379\">Shapeless<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv65381\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"65381\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv65381\">Spire<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u043e 18 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u043e\u0441\u044c 9 \u0447\u0435\u043b\u043e\u0432\u0435\u043a.<\/p>\n<\/p><\/form>\n<p class=\"for_users_only_msg\">\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 href=\"https:\/\/habrahabr.ru\/auth\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<\/p><\/div>\n<div class=\"clear\"><\/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=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/\"> http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<p>  \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432\u0430\u0447 \u0418\u0432\u0430\u043d, \u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u044e\u0449\u0438\u0439 Java Tech Lead \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 10+ \u043b\u0435\u0442 (Java EE, J2ME, C, C++, M-language, Delphi), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043d\u0430 Scala.<\/p>\n<p>  \u042f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e (<a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/215275\/\">Java Core + Junior Java Developer<\/a>), \u0442\u0430\u043a \u0438 \u0441\u043f\u0435\u0446\u043a\u0443\u0440\u0441\u044b (Multicore Programming for JVM (<a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/217051\/\">\u0440\u0430\u0437<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/231755\/\">\u0434\u0432\u0430<\/a>)).<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e \u0441\u043f\u0435\u0446\u043a\u0443\u0440\u0441 \u043f\u043e Scala \u0438 \u0432 \u044d\u0442\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0430\u0448\u0435\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438\/\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 (\u043a\u0443\u0440\u0441 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043e\u0434\u0430).  <\/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-251239","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/251239","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=251239"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/251239\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=251239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=251239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=251239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}