Хиповые трансдюсеры на Python
Хочу немного потоптаться по близкой мне теме Python, чтобы одновременно погутарить про загадочные трансдюсеры (transducers).
Тем, кто до сих пор программирует на Delphi, вероятно будет интересно сначала хотя бы кратко услышать про то, что это (трансдюсеры) ваще такое. Если редьюсеры — это свёртки (fold) в Хаскеле, то трансдюсеры — логическое продолжение развития концепции редьюсеров, внезапно ставшей мега-популярной. Так на данный момент доступно изрядное количество портов трансдьюсеров на самые разнообразные языки: Python, Ruby, JavaScript, PHP, Java, C++, Lua, Erlang и другие.
Про всю эту муть применительно к Python — под катом.
Зачем и почему Исторически ситуация развивалась таким образом: автор языка Clojure никак не может угомониться, в связи с чем придумал новую хиповую концепцию — трансдьюсеры. Ну, конечно же он их сразу впихнул в Clojure, хотя сама идея универсальна и вполне может использоваться в мирных целях быть воспроизведена в других языках.
Итак, кратко, зачем оно нужно:
Трансдьюсеры — это попытка переосмыслить операции над коллекциями, найти в них общую идею и принцип, научиться совмещать вместе несколько операций для их дальнейшего переиспользования.
Если вы ничего не поняли, выдаю под роспись эту именную ссылку со множеством примеров: Clojure — трансдьюсеры, редьюсеры и прочая муть.
Окей, теперь вы готовы к центральному видео поста: Трансдюсеры и Python (Максим Климишин)
[embedded content]
И пока вы ещё здесь, на всякий случай дам ссылку на давний, но актуальный до сих пор пост Слово о трансдюсерах.
Там не без холивара, конечно, но я лучше промолчу:
I asked @richhickey and he said «a transducer is just a pre-fused Kleisli arrows in the list monad.» #strangeloop— Bodil Stokke (@bodil) September 19, 2014
А вообще, если говорить предельно честно, покопавшись в теме трансдюсеров и не смея почем зря баламутить вкусы читателей, выскажу свое мнение завуалировано, осторожно.
После трансдюсеров мне чего-то сразу вспомнился Кырр из Кин-дза-дза со своим транклюкатором — уж более прогрессивно-противоричивой пушки (концепции) найти сложно:
Я скажу всем, до чего довел планету этот фигляр ПЖ!
Лично я рекомендую не увлекаться этими сомнительными новшествами чрезмерно, всегда помня о золотом правиле программиста:
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.— Tech-FAQ (@tech_faq) May 31, 2015
В догонку: Трансдьюсеры в JavaScript. Часть первая, часть вторая.