В последнее время я взглянул на Clojure и наткнулся на этот пост о Stackoverflow, в котором рассказывается о некоторых проектах, которые следуют лучшим рекомендациям, и в целом о хорошем коде Clojure. Я хотел разобраться с языком после прочтения некоторых основных уроков, поэтому я взглянул на некоторые "реальные" проекты.
Посмотрев на ClojureScript и Compojure (два вышеупомянутых «хороших» проекта), я просто чувствую, что Clojure - это шутка. Я не понимаю, почему кто-то выбрал бы Clojure, скажем, Ruby или Python, два языка, которые мне нравятся, и которые имеют такой чистый синтаксис, и его очень легко подобрать, тогда как Clojure использует так много скобок и символов везде, что это портит читабельность меня.
Я думаю, что Ruby и Python красивы, читаемы и элегантны. Их легко читать даже для тех, кто не знает язык наизнанку. Однако Clojure для меня непрозрачен, и я чувствую, что должен знать каждую мелочь о реализации языка, чтобы понимать любой код.
Так что, пожалуйста, просветите меня!
- Что хорошего в Clojure?
- Каков абсолютный минимум, который я должен знать о языке, чтобы оценить его?
I don't understand why someone would pick Clojure over say, Ruby or Python
- он работает на JVM и может использовать всю библиотеку Java.... have such a clean syntax
возможно, функциональные языки, похожие на lisp, имеют очень чистый синтаксис и структуру, к которой большинство людей не привыкли.few
символы вне скобок по сравнению со многими языками, и почти нет зарезервированных слов. Причина, по которой вы находите это нечитабельным, заключается в том, что это совершенно новая парадигма, и она работает совершенно иначе, чем типичный объектно-ориентированный язык. Дайте ему немного времени и энергии.Ответы:
Для фона вы дали, если можно перефразировать:
... Я думаю, что лучшим ответом является чтение книги Clojure Programming Эмерика, Карпера и Гранда. Книга содержит множество явных сравнений кода с Python, Ruby и Java, а также содержит текстовые пояснения к кодировщикам из этих языков. Лично я пришел в Clojure после создания проектов хорошего размера с Python и некоторого опыта в Lisp; чтение этой книги помогло мне начать использовать Clojure не только в сторонних проектах, но и в профессиональных целях.
Чтобы ответить на два ваших вопроса напрямую:
Дополнительные предложения: элегантность и мощь Lisp отчасти обусловлены его минималистским и совершенно непротиворечивым синтаксисом. Это гораздо проще оценить с помощью хорошего редактора, например, Emacs с clojure-mode и ParEdit. По мере знакомства с ним синтаксис исчезает, и вы «видите» семантику, намерения и краткие абстракции. Во-вторых, не начинайте с чтения исходного кода для ClojureScript или Compojure, это слишком много за один раз; попробуйте некоторые проблемы 4clojure.org и сравните решения с лучшими программистами. Если вы видите 4-6 других решений, неизменно кто-то будет писать действительно идиоматичное, сжатое решение в стиле FP, которое вы можете сравнить с неуклюжим, многословным и излишне сложным решением в императивном стиле.
источник
Диалекты Лисп имеют уникальную нишу благодаря простому синтаксису. Этот простой синтаксис делает метапрограммирование с помощью макросов очень простым. Это позволяет вам смоделировать язык в соответствии с вашей проблемной областью, а не моделировать, чтобы приспособить вашу проблемную область к вашему языку. Это действительно круто, когда вы обдумываете это, и это позволяет вам легко делать много вещей, что очень сложно на других языках.
Недостатком является то, что, поскольку каждая программа на Лиспе по сути определяет свой собственный язык, вам действительно нужно хорошо разбираться в вещах, чтобы понять, что происходит.
Теперь, чтобы ответить на ваши вопросы ...
Clojure - это современный диалект Lisp, который работает в JVM / CLR. Это позволяет легко использовать преимущества Lisp в существующей инфраструктуре.
Важно понимать, как использовать макросы для сборки Lisp в вашем проблемном домене, чтобы оценить его использование. Я действительно понял это только после реализации среды выполнения Lisp, когда обнаружил, что большинство функций языка ядра могут быть легко реализованы в самом Lisp. Требуется проект достаточного размера, чтобы получить это.
Помимо его плюсов, хотя программировать в них весело, лично у меня не так много случаев, когда я обращался бы к нему за повседневными проблемами. Это очень хороший инструмент для расширения сознания, и после правильного изучения Lisp стало намного естественнее использовать возможности метапрограммирования на других языках.
Простой синтаксис упрощает интерпретацию компьютерами (что позволяет использовать такие простые мощные макросы), но очень затрудняет быстрый анализ сложных выражений человеком.
источник
Сильные стороны Clojure неоднократно подчеркивались, и, безусловно, создают очень мощный язык, поэтому я не буду повторять их здесь снова.
Я всегда любил шепот, начиная с первых дней, и я был очень взволнован, когда обнаружил Clojure (возможно, шанс использовать лисп за пределами академических кругов наконец!). Однако, как только я начал учиться, я начал ощущать неприятное чувство, хотя я не могу точно определить, что мне не нравится. Прежде всего, я бы сказал, что программирование на Common lisp было легко и весело для меня, но у Clojure есть более крутая кривая обучения. У Клиспа была определенная красота и элегантность. Я не уверен, что получу такое же чувство от Clojure. Мне интересно, исчезнет ли это чувство, когда я получу больше опыта.
У меня есть еще одна догадка для моего таинственного легкого отвращения. Я думаю, что это может быть его большая гибкость. Например, у вас могут быть структуры, которые являются наполовину векторными и наполовину отображаемыми, и с помощью нескольких символов кода вы можете принимать их в качестве параметров, разбирать их и правильно обрабатывать. Да, он удаляет весь шаблон, но почему-то это не так. Как будто вы никогда не очень хорошо знаете правила в скобках, двоеточия, браслеты и т. Д. Действуют.
Для меня я все еще люблю язык за все его преимущества (прежде всего, запуск в JVM и упрощение параллелизма, будучи гораздо более мощным и лаконичным, чем Java, и с менее очевидными недостатками дизайна), но до сих пор не решено, что-то мог бы быть улучшен.
источник