Erlang vs Clojure

OCaml может чморить всех кроме Haskell и Scala.
Erlang и Clojure могут чморить всех кроме Haskell, Scala, OCaml.
Я помню когда и из института молодой зеленый устроился на работу писать ORM на .NET и автоматические генераторы форм для документооборота. Там я познакомился с двумя лисперами, один из который был Примадонной а второй реально-упоротым мне чуваком казался. Он постоянно говорил что ООП хуйня, вы гавно, пишете хуйню, сам все задачи на Delphi делал за пол часа, а все остальное время писал робота игры Го. Естественно он долго не протянул, ушел создал свою компанию и пишет какой-то банковский софт на лиспе для бритов. Но, что меня удивляет с перспективы сегоднешнего дня (сейчас то я и сам могу накинуть с три ведра на ООП, ОРМ и GoF), так это то что он голосовал за зека на выборах 2004 года. Казалоось бы, что общего у Лиспа и Януковича. Это был первый звоночек связаный с лиспом для меня :-)
Второй чувак в компании был Пиля. Он конечно вроде как и пытался упростить C# лапшу которая была у нас в коде, но получалось только хуже. Но самое интересное началось когда мы начали писать свой ЛИСП для .NET и на нем скриптовать формы (я на тот момент уже написал пару компиляторов), позже мы работали в другой компании и там Пиля пытался создавать целый свой мир на LISP на .NET. Все это было намного сложнее чем просто накидать пару форм на WPF. Сейчас Пиля пишет на JavaScript и посматривает в сторону Эрланг.
Вообще говоря по-поповоду лисперов я начитался много хуйни. Этот весь ANSI CL, там есть все. СLOS, CLIM, с которого мы черпали идеи при построении UI все это мне казалось довольно переусложненным. И я с болшим интересом смотрел на Scheme мне казалось что сама суть ЛИСПА там больше выражена:
Есть только один язык который может соревноваться с LISP в этом плане -- это Erlang. Хотя он и вышел из Пролога, Армстрон при его разработке руководствовался именно этими правилами. Это 4 столпа технологии с которой я вряд ли уйду на что-то другое, и минимилизм и простоту я потеряю на ML-языках. Есть у меня запасной вариант правда свою систему типов для Erlang сделать, но это зарелизится не в этом году.
Много ли я знаю лисперов которые используют Лисп в этом стиле, да нет. Все пишут обычный гавнокод на лиспе. Я теперь вообще думаю, что это не связано с языком а связано с уровнем просветления, сколько кода генерирует человек. Да, на джаве все равно получается лапша, но некторые умудряются и на ней писать компактно без все этой хуйни GoF. Но это обычно люди которые знают Хаскель, Лисп как минимум, а как максимум видели и другие языки.
Дисклеймер: я счас буду набрасывать на лисперов которых я видел, так я сразу хочу сказать, что это не относится к чувакам



Сами лисперы, обычно CL, обладают другой хуйней, они почему что считают что они обладаю каким-то уникальным знанием. Например когда им говорят, что серьезные приложения не построишь и нужна система типов, они с упоростью начинают генерировать какие-то core.typed, Qi, забывают иногда о 4 принципах на которых покоится лисп и начинают генерировать тонны кода, так рождаются всякие CLOS, CLIM. Я не знаю, кто сильно желает работать с лисперами но у нас тут считается что лучше уже уйти в лямбда-бомжи и учить теоркат на выходное пособие, чем сесть на лисп :-) Ни один чувак с улицы не придет и не начнет писать на лиспе, нужно именно сильно упороться что бы писать в открытом AST. Быть хорошим лиспером -- это как постоянно курсировать по лезвию бритвы, всегда нужно оглядываться не поехала ли у тебя крыша и не размываются ли гриницы адекватности.
С эрлангом намного проще, каждый кто написал 10 строк на Эрланге врубается сразу и пишет у себя в резюме Distributed Systems, High-Load Projects, Pi-calculus и Concurrency Master. После Эрланга становися сразу ясно почему Akka, Okku, Quazar, Kilim, Go, Итераты вместе с Клауд Хаскелем сосут прричмокивая. То где другим языкам нужно написать 100 кб кода для определения стратегии yied в скедюлер (memory/message threshold), в Эрланге делает одним условием
Вот что такое соблюдение принципов простоты в дизайне VM. И такая хуйня была в ЛИСП мире долго. Пока Рич Хики не взялся давать пизды всем этим упоротым лисперам и не начал напоминать им, что писать компактно БЕЗ ХУЙНИ -- это самая суть. Так появились мемы Хуяк Хуяк и в продакшин и начался ренесанс Лиспа в виде Clojure с новыми холиварами и новыми упоротыми. И тут началось все че-то уверовали, что лисп это потолок. Никакой это не потолок -- это язык для быстрого прототипировать и создания минималистических программ. У вас два выбора если вас устраивает JVM или есть бабки на Azul и устраивюат скобочки вы пишете на Clojure, если вы олдфаг упоролись по бинарным протоколам и вы делаете свой Xen Cloud и не идете на компромисы вы выбираете Эрланг.
Теперь перейдем к содержательной части поста. Приведем пример нашего продакшин Erlang стека который полностью совместим с Xen уже сегодня:
Project | Size (KB) | LOC |
Emacs-like Editor | 170 | 5600 |
N2O (Web Framework) | 148 | 3329 |
KAI Amazon Dynamo Impl | 80 | 2100 |
KVS (DB: Riak/Mnesia/Kai) | 80 | 2000 |
CI Server | 40 | 1000 |
MQS (RabbitMQ lib) | 28 | 500 |
AVZ (FB/G+/TW/GH/MS) | 20 | 400 |
Erlang JavaScript | 10 | 150 |
toy_leader (Echo Task) | 4.8 | 70 |
Сравните это со своими проектами на Clojure :-) Как видно полноценная имплементация Амазон Динамо на Эрланге занимает 80КБ, Jenkins можно заменить 40 килобайтами, веб фреймворк похожий на Lift, Meteor, можно заменить 3 тысячами строк и 150КБ, а поддержать все виды KV Баз с секондари индексами обойдется вам в продакшине в 80КБ. При большое желании этот код можно выучить наизуть, так его мало. Самый масшбатный проект который я делал когда-либо на Эрланге -- это текстовый Emacs-like редактор, он занял аж 170КБ и занимает чуть меньше 6000 строк. Мой Erlang JavaScript компилятор занимает 10КБ и этого уже достаточно что бы реализовать язык необходимый для компиляции наших серверных страниц на стороне клиента, для сравнения core.cljs занимает 220КБ.
Если у вас есть цифры, которые показывают лучше принцип Хуяк Хуяк и в Продакшин я хочу их увидеь.
Цель Этого поста вовсе не показать что Эрланг лучше соотвествует принципам минимализма, быстроты прототипирования, управляемости и простоты, это и так очевидно, к тому же вы можете набрать ПХП-бомжей которые вам будут делать сайты, как это делаем мы. Целью даного поста было показать, что даже если на своем пути встретите упоротого лиспера, который отобьет у вас желание писать на лиспе, не реагируйте на него. Это не повод изучить Clojure есть у вас хоть как-то сердце бьется в резонанс со скобочками. Я хоть и писал на лиспе, но скобочки вот не принял. Зато теперь на Xen деплоюсь :-)
Говорите открыто и смело прямо в лицо: МИНИМАЛИЗМ, БЫСТРОТА ПРОТОТИПИРОВАНИЯ, УПРАВЛЯЕМОСТЬ, ПРОСТОТА.
|
</> |