четверг, 27 декабря 2012 г.

Clojure пропаганда

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

11 комментариев:

  1. Побуду адвокатом дьявола.
    Кложура динамически типизированна. А значит компилятор нам ошибки не отловит. В среднем медленней чем Java. STM в Java есть, но в виде библиотеки. Путаницу вызовут не только структуры данных но и всякие цитати, квазицитаты и тд. Я так понимаю вы единственный человек, который пишет в ваше компании на кложуре, поэтому bus factor просто зашкаливает.

    Ну и последний поинт: "Clojure -- язык очень простой, изучить его можно легко и достаточно быстро." Я бы сказал "синтаксис" очень простой. Сам язык и его примитивы (например всякие agents, Var'ы и как они биндятся и другие понятия) не очень просты для восприятия программистов на java.

    ОтветитьУдалить
    Ответы
    1. Предлагаю отказываться от всего что "не очень просты для восприятия программиста на java". Они же ранимые, эти ваши жава программисты. Их же жалеть надо.

      Удалить
    2. Ну а я побуду адвокатом кложуры :-)
      Джава -- не хаскель, в джаве тоже есть кое-какие вещи от динамических языков. Например, нисходящее приведение типов вроде (Child)Parent черевато теми же ошибками, что и ошибки типизации в динамических языках. Вспомним еще хотя бы повсеместное использование DI фреймворков, таких, как Spring, JEE, Guice. Они все так или иначе добавляют в java то, на что она не способна: динамическую типизацию. Поэтому динамичность Clojure не такой уж большой её недостаток даже для любителей джавы.

      Открою еще один секрет: Clojure -- это вам не Perl. В Clojure присутствует такая же строгая типизация, как и в Java там, где она нужна. В моем документе полно примеров, где я указываю строгие типы, и они будут соблюдаться во время выполнения программы.

      Что до bus factor-а, то он директора тоже волнует. Поэтому мне предложили провести мастер-класс по кложуре и научить команду основам этого языка. Надо сказать, что это довольно просто сделать, учитывая, насколько прост этот язык в своей основе. Для того, чтобы начать писать на Clojure, вовсе не обязательно разбираться во всех тонкостях var-ов, полиморфизма в виде мультиметодов, протоколов и т.д. Вполне достаточно общей для всех лиспов основы, остальное -- дело опыта.

      Удалить
  2. STM в Java есть, но в виде библиотеки
    как Java-нуб спрошу - это java.util.concurent?

    ОтветитьУдалить
    Ответы
    1. знаю что в akka есть стм неплохой.

      Удалить
  3. Почему такой прекрасный бложег хостится на блоггере? Коменты писать - одна боль. Может стоит посмотреть на octopress например. Думаю есть скрипты для переноса в него контента из блоггера.

    ОтветитьУдалить
  4. Спасибо за документ. Будет теперь что показывать на товарищам, которые из-за спины регулярно вопрошают: "В скобочках не путаешься?" :)

    ОтветитьУдалить
  5. в примере с тредами лучше все-таки использовать send-off, иначе тредпул забьется :-)

    ОтветитьУдалить
  6. А каков результат пропаганды?(всмысле директор согласен/не согласен)
    А какая область разрабатываемого ПО?

    "Реализует .... концепции ..... метапрограммирование"

    Помоему это не совсем так. Сам язык метапрограммирования не реализует.
    Но даёт возможность относитьльно просто их реализовать.

    ОтветитьУдалить
  7. > А каков результат пропаганды?

    Ну официально пока не решено, но, думаю, результат положительный. Директор присматривается к Clojure, как к одному из инструментов. То, что нет резкого неприятия и жесткого отказа -- уже редкость. На моей прежней работе было лишь нерпиятие и непонимание "всех этих скобочек".

    Я немного схитрил, если честно, удочки закинул еще месяц назад. На тимбилдинге сделал доклад про Apache Hadoop. Для лучшего понимания этого фреймворка рассказал немного (совсем чуть-чуть) про ФП, показал немного лямбда исчисление, рассказал про map-reduce. После того, как народ вьехал в нотацию лямбда-исчисления, показывал исходники на Clojure -- неприятия не было. Понятно было всем.

    ОтветитьУдалить