Erlang vs Clojure

топ 100 блогов maxim21.09.2013
Haskell, Scala могут чморить всех.
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. Но это обычно люди которые знают Хаскель, Лисп как минимум, а как максимум видели и другие языки.

Дисклеймер: я счас буду набрасывать на лисперов которых я видел, так я сразу хочу сказать, что это не относится к чувакам Erlang vs Clojure si14, Erlang vs Clojure p1r4nh4, Erlang vs Clojure tonsky и другие чуваки которые пишут в том числе и на кложе.

Сами лисперы, обычно 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), в Эрланге делает одним условием

IF (REDUCTIONS > THRESHOLD) SWITCH;


Вот что такое соблюдение принципов простоты в дизайне 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 деплоюсь :-)

Говорите открыто и смело прямо в лицо: МИНИМАЛИЗМ, БЫСТРОТА ПРОТОТИПИРОВАНИЯ, УПРАВЛЯЕМОСТЬ, ПРОСТОТА.

Оставить комментарий

Архив записей в блогах:
...
Прошли тоталитарные времена, когда в Этой Стране появилась на свет крылатая фраза "два мира - два Шапиро". Теперь на дворе стоит криво построенное здание глобализации, и Шапиро в нём одна, Анной звать. Правда, выяснилось, что якобы отравленная по личному приказу Путина оппозиционэрка ...
Сначала я получил письмо: ========================== russian ========================== Добрый день! Сообщаем Вам, что в базе данных Регистратора Р01 была изменена информация по домену, который Вы поддерживаете или который передается Вам на обслуживание. Домен: domain: CHEB.RU ...
Обсуждая законопроект, некоторые депутаты Госдумы РФ сказали, что он ...
В одном магазине встретил. Интересно - это их собственная инициатива или же это по различным магазинам распространяется? Потому что рядом на полу виднелось еще несколько таких свернутых плакатов. http://www.exler.ru/blog/item/15385/ ...