metaclass (metaclass) wrote,
metaclass
metaclass

функциональщина-срач

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-ом на клиент" и пошел пилить на нем со страшной скоростью.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 55 comments