функциональщина-срач
http://it-talk.org/post76648.html#p76648
Лень там регистрироваться и сраться некогда, все равно ничего нового там не скажут.
А насчет использования функциональных языков: лично у меня в хаскеле основной проблемой было отсутствие либ для интеграции с внешним миром (или наличие, например, на hackage 100500 вариантов для одной и той же цели, ну вот когда с этим разбираться?).
С Clojure все оказалось на порядки проще - там даже ORM не то, чтобы нужен - clojure.java.jdbc работает со свистом с жабским провайдером Firebird.
Мне, собственно говоря, от языка для серверной опердени требовалось следующее:
0) Немногословность. Т.е. чтобы было по крайней мере сравнимо с изготовлением того же на SQL/хранимых процедурах. Сразу языки вроде C# и Java отпадают - "многословные".
1) Наличие нормальных либ доступа к Firebird - есть Jaybird. Кривоват в плане обработки ошибок и кидаемых исключений - но все работает.
2) Наличие нормального низкоуровневого веб-сервера или фреймворка. Т.е. никаких страниц, скаффолдингов, генерации целых сайтов - только хендлеры "запрос-ответ" привязанные к роутам. compojure+ring - идеально. А, и чтобы сервер запускался отдельным приложением, без интеграции в IIS/Apache/чорта лысого.
3) Наличие нормального типа для денег. Чтобы для суммирования не нужно было кастить вдоль и поперек. BigDecimal, 100500.0M
4) Наличие нормальных типов для даты и времени. org.joda.time + clj-time
5) Чтобы при баге в либе я мог ее пофиксить или как минимум найти, не сломав себе глаза.
6) Наличие единообразного, общепринятого подхода. В хаскеле с этим, простите, пиздец. Кто в лес, кто по дрова - у кого вычисления на типах, у кого template haskell, кто-то кидает исключения, кто-то ErrorT, кто пихает IO во все поля, у кого-то это вынесено в параметры.
Из вариантов рассматривались: C#/Java/F#/Haskell/Python. А сделано все в итоге было на clojure. Наименее многословный, либы устроены ПРОСТО, удобно работать с БД, метапрограммирование, можно использовать всю жабью инфраструктуру.
C# - много мусорного синтаксиса, привязан строго к виндам. В mono я не верю. Адова интеграция в винды, GAC, бесит.
Java - проще оказалось посмотреть, как ее использует
artureg, разобраться сначала с инфраструктурой, а потом использовать из clojure. Потому как сам язык еще более отсталый чем C#. Зато инсталлируется в лоб.
F# - всем хорош, но ждать 3 версии, пока допилят type providers, некогда. И, внезапно(!), для моих задач в нем функции постоянно разрастались в количестве параметров, вплоть до нечитабельности. Вывод типов в нем не очень, много где нужно аннотировать, иначе не работают конструкции вида s.Trim() - он просто не может догадаться, что s это строка. Но тем не менее - используется сейчас в двух мелких проектах и еще в одном не сильно мелком внутреннем, для кодогенерации.
Haskell - нет либ доступа к FB, бардак ада на Hackage, кровавый матан в либах.
Python - сделал один проект на нем, но как следует не осилил.
Опять же - синтаксис "с отступами" по итогам - не совсем удобная вещь, т.к. код приходится располагать так как удобно компилятору, причем иногда бывают невнятные эффекты с этим (сталкивался в F# и хаскеле).
Clojure рассматривалась как единственный вариант с внятным метапрограммированием для совсем другого проекта, в прошлом году. Сделал несколько тестов, проверил что все работает с FB, проверил на предмет производительности и забросил. А сейчас, когда понадобилась срочная доработка опердени, причем с совсем дурной логикой, которую иначе как на декларативных языках описывать сложно - достал из загашника, случайно нашел веб-фреймворк под это дело, за 15 минут (не зная языка!) добился "веб-сервер выполняет запрос к БД и отвечает json-ом на клиент" и пошел пилить на нем со страшной скоростью.
Лень там регистрироваться и сраться некогда, все равно ничего нового там не скажут.
А насчет использования функциональных языков: лично у меня в хаскеле основной проблемой было отсутствие либ для интеграции с внешним миром (или наличие, например, на hackage 100500 вариантов для одной и той же цели, ну вот когда с этим разбираться?).
С Clojure все оказалось на порядки проще - там даже ORM не то, чтобы нужен - clojure.java.jdbc работает со свистом с жабским провайдером Firebird.
Мне, собственно говоря, от языка для серверной опердени требовалось следующее:
0) Немногословность. Т.е. чтобы было по крайней мере сравнимо с изготовлением того же на SQL/хранимых процедурах. Сразу языки вроде C# и Java отпадают - "многословные".
1) Наличие нормальных либ доступа к Firebird - есть Jaybird. Кривоват в плане обработки ошибок и кидаемых исключений - но все работает.
2) Наличие нормального низкоуровневого веб-сервера или фреймворка. Т.е. никаких страниц, скаффолдингов, генерации целых сайтов - только хендлеры "запрос-ответ" привязанные к роутам. compojure+ring - идеально. А, и чтобы сервер запускался отдельным приложением, без интеграции в IIS/Apache/чорта лысого.
3) Наличие нормального типа для денег. Чтобы для суммирования не нужно было кастить вдоль и поперек. BigDecimal, 100500.0M
4) Наличие нормальных типов для даты и времени. org.joda.time + clj-time
5) Чтобы при баге в либе я мог ее пофиксить или как минимум найти, не сломав себе глаза.
6) Наличие единообразного, общепринятого подхода. В хаскеле с этим, простите, пиздец. Кто в лес, кто по дрова - у кого вычисления на типах, у кого template haskell, кто-то кидает исключения, кто-то ErrorT, кто пихает IO во все поля, у кого-то это вынесено в параметры.
Из вариантов рассматривались: C#/Java/F#/Haskell/Python. А сделано все в итоге было на clojure. Наименее многословный, либы устроены ПРОСТО, удобно работать с БД, метапрограммирование, можно использовать всю жабью инфраструктуру.
C# - много мусорного синтаксиса, привязан строго к виндам. В mono я не верю. Адова интеграция в винды, GAC, бесит.
Java - проще оказалось посмотреть, как ее использует
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
F# - всем хорош, но ждать 3 версии, пока допилят type providers, некогда. И, внезапно(!), для моих задач в нем функции постоянно разрастались в количестве параметров, вплоть до нечитабельности. Вывод типов в нем не очень, много где нужно аннотировать, иначе не работают конструкции вида s.Trim() - он просто не может догадаться, что s это строка. Но тем не менее - используется сейчас в двух мелких проектах и еще в одном не сильно мелком внутреннем, для кодогенерации.
Haskell - нет либ доступа к FB, бардак ада на Hackage, кровавый матан в либах.
Python - сделал один проект на нем, но как следует не осилил.
Опять же - синтаксис "с отступами" по итогам - не совсем удобная вещь, т.к. код приходится располагать так как удобно компилятору, причем иногда бывают невнятные эффекты с этим (сталкивался в F# и хаскеле).
Clojure рассматривалась как единственный вариант с внятным метапрограммированием для совсем другого проекта, в прошлом году. Сделал несколько тестов, проверил что все работает с FB, проверил на предмет производительности и забросил. А сейчас, когда понадобилась срочная доработка опердени, причем с совсем дурной логикой, которую иначе как на декларативных языках описывать сложно - достал из загашника, случайно нашел веб-фреймворк под это дело, за 15 минут (не зная языка!) добился "веб-сервер выполняет запрос к БД и отвечает json-ом на клиент" и пошел пилить на нем со страшной скоростью.
no subject
Far для редактирования, leiningen для зависимостей-сборки-запуска-repl (и то - разобрался как запускать руками и наделал батников для этих целей)
no subject
no subject
Для clojure, говорят, распространение в таком виде не рекомендуется, типа все равно компилирует на ходу - но мне удобнее таким образом.
no subject
no subject
Проверил что вручную написанная на clojure имитация "select id,sum(total) from tbl group by id" на таблице из 400 тыщ записей работает достаточно быстро и все.
У меня основной боттлнек - база данных и i/o в ней.
no subject
no subject
no subject
no subject