среда, 3 августа 2011 г.

Lisp в мэйнстриме

Love5an в своем блоге поднял важную тему о применимости лиспа для повседневных задач. Главный вывод из его статьи: в лиспе мало библиотек, по сравнению с мэйнстримными языками, поэтому разрабатывать с его помощью обычные приложения сложно. Эта мысль перекликается с тем, о чем я писал в предыдущем посте, где искал идеальные задачи для лиспа.
В принципе, я абсолютно и полностью согласен с love5an'ом: используя только лисповую инфраструктуру сделать настольное или веб-приложение довольно -- задача трудоемкая.
Но не с Clojure! Оговорюсь: не используйте различные обертки над библиотеками java, используйте ифраструктуру java. Ring, Compojure, etc -- все это довольно бедные библиотеки, которые не идут ни в какое сравнение с тем же j2ee. Seasaw хоть и скрывает частично Swing, но не заменит ее полностью. Можно продолжать долго, так что если знаете java -- то просто используйте java API напрямую, Clojure это позволяет.
Если обращаетесь к java API -- не используйте Emacs, возьмите IDE. Это действительно удобнее, т.к. IDE умеет делать интеллектуальное автодополнение кода. Самое лучшее, что я видел для Clojure, это Idea+LaClojure. Community-версия Idea бесплатна, так что скачать эту IDE легко.
Конечно, учитывая динамичность Clojure, интеллектуальное автодополнение не настолько точное, как для той же java, но, тем не менее, тоже значительно облегчает работу. По крайней мере не нужно постоянно обращаться к документации за элементарными вещами.
Чисто для эксперимента решил попробовать написать UI для простого настольного приложения.
С применением LaClojure+Idea это оказалось почти так же просто, как и на обычной java.
Таким образом, Clojure совмещает простоту и практичность Java с мощью и выразительностью Lisp-а.

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

  1. Насколько я помню LaClojure в Community версию не ставится.

    ОтветитьУдалить
  2. Осталось только понять, зачем писать на Clojure, когда можно сразу писать на Java ((

    ОтветитьУдалить
  3. :-) Андрей, ты превращаешься в большого и жирного тролля! Тебе ли объяснять преимущества лиспа? :-D

    ОтветитьУдалить
  4. Внезапно, в имаксе тоже есть интеллектуальное автодополнение кода.

    Писать на clojure, не используя "различные обертки", действительно смысла нет - иначе это получается джава с синтаксисом из смеси камелькейза и скобочек.

    ОтветитьУдалить
  5. > Внезапно, в имаксе тоже есть интеллектуальное автодополнение кода.

    Пытаюсь добиться этого от JDEE и Eclim -- пока не получается. А у тебя Intellisence как работает?

    > Писать на clojure, не используя "различные обертки", действительно смысла нет - иначе это получается джава с синтаксисом из смеси камелькейза и скобочек.

    Ну так заставь жависта писать на лиспе, он и на лиспе будет писать, как на жаве. Дай лисперу возможности jvm -- и не нужна будет жава.

    ОтветитьУдалить
  6. У меня стоит auto-complete, но емнип и из коробки все работало.

    Чтобы писать на clojure, как на clojure, вокруг джава-библиотек нужны обертки, т.к. clojure, например, функциональный язык, а джава - нет. Если их не использовать, то никаких преимуществ я тут не вижу (а неудобств - полно).

    ОтветитьУдалить
  7. Ну то, что ты описал, значительно слабее по функциональности intellisence в той же Idea/LaClojure. Так что для начинающих LaClojure, пожалуй, удобнее.

    Сам я пользуюсь штатными средствами Emacs, а также yasnippet-ом. Правда под рукой все время приходится держать открытой java api documentation.

    ОтветитьУдалить
  8. > Ну то, что ты описал, значительно слабее по функциональности intellisence в той же Idea/LaClojure.
    Интересно, в чем это выражается? Дополняет, документацию показывает - а больше вроде ничего и не требуется.

    > Так что для начинающих LaClojure, пожалуй, удобнее.
    Тогда уж eclipse+ccw.

    ОтветитьУдалить
  9. :-) Ну пользуйся, если тебе удобно. Я же говорю о тех, кто приходит из мира Java или C#, где без автодополнения по типу класса жить не могут. Для них LaClojure -- самый приемлемый вариант.

    ОтветитьУдалить
  10. Не совсем понимаю, о каком именно автодополнении идет речь, т.к. в clojure метод пишется перед экземпляром класса, а не после, как в джаве или шарпе. Поэтому я и спрашиваю, в чем выражается различие между имаксовым и, например, LaClojure'вым дополнением.

    ОтветитьУдалить
  11. Речь об автодополнении методов из java-библиотек.

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