функциональщина-срач
Feb. 28th, 2012 08:14 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
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
Date: 2012-02-28 05:27 am (UTC)no subject
Date: 2012-02-28 06:05 am (UTC)no subject
Date: 2012-02-28 06:36 am (UTC)(no subject)
From:no subject
Date: 2012-03-01 07:15 am (UTC)no subject
Date: 2012-02-28 06:15 am (UTC)no subject
Date: 2012-02-28 06:26 am (UTC)Far для редактирования, leiningen для зависимостей-сборки-запуска-repl (и то - разобрался как запускать руками и наделал батников для этих целей)
no subject
Date: 2012-02-28 06:41 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 07:09 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 06:23 am (UTC)no subject
Date: 2012-02-28 06:26 am (UTC)no subject
Date: 2012-02-28 06:55 am (UTC)no subject
Date: 2012-02-28 07:33 am (UTC)При использовании того же ребара (хотя можно и руками то же изобразить) весь деплой сводится к upgrade.sh VNS1 (для сборки релиза), затем scp proga-VSN2 hostX:/release_path плюс ./proga admin upgrade VSN2 на hostX (ес-но при желании можно в скрипт из 3 строчек запихать, если прям сильно хочется в одно действие, лучше, конечно, релиз тестировать на "препроде")
Касательно дат пользовался https://github.com/daleharvey/dh_date (правда хитрожопых операций не требовалось, ну и таймзон вроде как нет)
no subject
Date: 2012-02-28 07:35 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 06:55 am (UTC)no subject
Date: 2012-02-28 07:02 am (UTC)> за 15 минут (не зная языка!) добился "веб-сервер выполняет запрос к БД и отвечает json-ом на клиент" и пошел пилить на нем со страшной скоростью.
закрывает вопрос немногим менее чем полностью. :)
no subject
Date: 2012-02-28 07:08 am (UTC)no subject
Date: 2012-02-28 07:10 am (UTC)И самое основное - мое руководство вопрос "где искать специалистов" вообще не рассматривает, несмотря на мои неоднократные объяснения, чем грозит использование не-мейнстримных языков. Поэтому я использую то, что наиболее удобно/хорошо подходит под предметку, вне зависимости от мейнстримности.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 07:45 am (UTC)no subject
Date: 2012-02-28 07:56 am (UTC)няяяя!!!
а про руби в этом списке ничего нет (
no subject
Date: 2012-02-28 08:03 am (UTC)(no subject)
From: (Anonymous) - Date: 2012-02-28 08:14 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 08:02 am (UTC)раз "поправить чужие косяки в кложур - дело недолгое", то этой проблемы нет, получается?
(так вот вопрос, а почему не взлетел в своё время лисп? я хз кого спрашивать, и кто из умных и старых людей это всё застал. или вот какой-нить смолтолк - что с ним случилось?)
no subject
Date: 2012-02-28 08:05 am (UTC)Оно и так хорошо более чем.
А лисп взлетел, просто он взлетел ну очень давно, сугубо в специфических областях, например, GUI я на нем писать наверно не буду, разве что код на дельфи генерить из него :)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 08:04 am (UTC)no subject
Date: 2012-02-28 08:17 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-28 10:16 am (UTC)