[#] Clojure — трансдьюсеры, редьюсеры и прочая муть
habrabot(difrex,1) — All
2015-01-20 12:00:06


![][1] В последнее время определенную известность получили [transducers][2] — новая фишка из еще не вышедшей Clojure 1.7. На момент написания статьи актуальна Сlojure 1.7-alpha5, но уже успело появиться изрядное количество портов трансдьюсеров на разнообразные языки: [Python][3], [Ruby][4], [JavaScript][5], [PHP][6], [Java][7], [C++][8], [Lua][9], [Erlang][10]. И… это, по правде говоря, немного обескураживает. Ведь довольно давно (еще в Clojure 1.5) добавили библиотеку [reducers][11]. Так вот про редьюсеры никто особо не говорил, никуда ничего не портировал, хотя, вроде как, делают они схожие вещи… Или нет? Давайте разберемся, для чего нам в Clojure понадобились все эти reducers & transducers (они нам правда нужны?), как они работают, как их использовать… И выясним наконец, не пора ли выкидывать reducers на свалку. [Сворачиваемся...][12]

[1]: //habrastorage.org/files/ad6/d73/4fe/ad6d734fe68142f39603c9688b28f972.jpg
[2]: http://clojure.org/transducers
[3]: https://bitbucket.org/sixty-north/python-transducers
[4]: https://github.com/cognitect-labs/transducers-ruby
[5]: https://github.com/jlongster/transducers.js
[6]: https://github.com/mtdowling/transducers.php
[7]: https://github.com/cognitect-labs/transducers-java
[8]: https://github.com/kirkshoop/transducer
[9]: https://github.com/gordonbrander/transducers.lua
[10]: https://github.com/sfwc/erlang-transducers
[11]: http://clojure.org/reducers
[12]: http://habrahabr.ru/post/247889/#habracut