пятница, 5 августа 2011 г.

Clojure в production

В последнее время наиболее интересная для меня тема -- кто, как и зачем использует Clojure  в реальных проектах. Хотя это язык общего назначения, не все типы приложений пишутся на нем так же легко, как на других языках. Зато кое-какие задачи решаются значительно легче, чем на тех же Java и Ruby. Ниже -- вольный перевод поста о том, как используют Clojure в одной из платформ для сайтов знакомств.

"Я работаю на компанию знакомств по интернету. У нас была платформа, разрабатывавшаяся более десяти лет (до того, как я присоединился), и чтобы написать новую версию с нуля, мы потратили более восемнадцати месяцев. Сложность платформы такова, что конкурентное выполнение кода -- большая проблема, так что я хотел получить более чистый код и простую конкурентность -- функциональное программирование с неизменяемыми данными прекрасно для этого подходит. Изначально я предложил Scala для кое-какой низкоуровневой инфраструктуры с неизменяемыми данными и конкурентностью на акторах. Проблема Scala в том, что это типичный "compile-deploy-debug-edit" язык, поэтому разработка шла довольно медленно (быстрее, чем на java, но все же это тот же "compile, deploy, restart, test, rinse, repeat" язык); система типов Scala сложна для понимания средним программистом. В конце-концов выяснилось, что Scala не очень хорошо подходит для нашей команды, так что я решил поискать другой функциональный язык на jvm. Оказалось, что Clojure подходит идеально: он динамически типизирован, у него есть REPL для исследования, он легко вызывается из java; предлагает неизменяемые данные, безопасные в конкурентном выполнении, а также изменяемые данные в безопасном окружении (STM).
Мы переписали наш низкоуровневый управляющий код, применив Clojure, так что теперь мы могли использовать его из других языков. Затем мы разработали маленький простой псевдо-ORM на Clojure, чтобы заменить некоторые из наших библиотек и позволить прозрачно менять RDBMS на NoSQL используя простые структуры данных: словари (maps). Мы поставили наш Clojure-код на production пару недель назад, и он доказал свою гранитную стабильность (пара ошибок была, но они были в нашем коде, не в Clojure!). Мы только что добавили пул соединений (всего пара строк на Clojure).
Думаю, что со временем количество нашего кода на Clojure будет расти. До сих пор наш опыт показывает, что код на Clojure проще раз в десять, и это чистый, простой, тестируемый код, который намного легче написать и использовать повторно.
А как вы используете Clojure?"

1 комментарий: