Чем полезен Clojure? [закрыто]


100

Для каких реальных приложений люди используют Clojure?

Я использую Groovy для склейки, Java для больших систем, скрипты Python / Perl для синтаксического анализа и склейки. Я мог представить, как вызываю Clojure из Java, но не вижу, где бы я использовал его отдельно. Мне кажется, было бы проще использовать практически любой язык сценариев для специальных задач.

Я ни в коем случае не являюсь экспертом по Groovy или фанатом, но меня поражает, что у него лучшая структура поддержки, инструменты и множество языковых конструкций (замыкания, функциональное программирование). То же самое можно сказать и о Scala.

Может ли быть, что его будущее - это язык, встроенный в другие системы?


23
Все, кроме бутерброда.
Wheaties

12
@wheaties: Вы пробовали (sandwich me BLT)?
FrustratedWithFormsDesigner

3
Почему бы вам не использовать Clojure и для «больших систем»? ISTM, что, будучи менее подробным, чем Java, ваши системы не должны быть такими большими в Clojure. :-)
Кен

2
Глядя на ответы, я думаю, что люди используют его для каких-то интересных вещей. Интересно, сколько предприятий выберут его для долгосрочной разработки?
Fortyrunner

1
Я знаю, что прошло много времени, но для программирования на функциональном языке требуется острый ум. Острые умы обходятся дорого, поэтому я не знаю о потенциале Clojure LTD с точки зрения бизнеса - до тех пор, пока он не станет гораздо более распространенным, чем даже сегодня (пять лет спустя).
Шон Оллред,

Ответы:


93

Я использовал Clojure для:

  1. Парсинг веб-страниц
  2. Скрипты оболочки
  3. Создание сайтов
  4. Играем с OpenGL
  5. Написание асинхронных веб-серверов
  6. HTML шаблоны
  7. Выполнение параллельных задач (получение нескольких URL-адресов и параллельная обработка)
  8. Игра со звуком в реальном времени
  9. Симуляторы

Это практичный / забавный материал.

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

Личное мнение, но Clojure предлагает более качественные языковые конструкции для правильной организации программного обеспечения (не причиняя чрезмерной боли работающему программисту) из всех языков, которые я использовал до сих пор в академической и профессиональной сфере - C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Это не означает, что Clojure идеален. Но мне кажется, что он построен на лучшем фундаменте, чем большинство других вещей.


Вы Дэвид Нолен? парень, который выступал с докладом на тему "Clojurescript: Lisp's Revenge". Это был потрясающий разговор!
Amogh Talpallikar

1
// Что вы имеете в виду под «предоставляет лучшие языковые конструкции для правильной организации программного обеспечения»? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Натан Басанезе,

2
@maSnun на современном оборудовании время запуска составляет около 1 секунды или меньше. Это нормально для сценариев оболочки.
dnolen 05

1
@dnolen Спасибо, что нашли время ответить. Я новый энтузиаст clojure, и когда я пытаюсь запустить файл jar, созданный с помощью lein uberjar, мне требуется около 20 секунд. Я использую OS X, Macbook с ядром i5 и 16 ГБ ОЗУ. Вы используете какие-то специальные оптимизации?
masnun 05

5
@maSnun uberjars не для сценариев оболочки, они предназначены для развертывания приложений. Оптимизация приложений - это общий вопрос JVM, не относящийся к Clojure. Вы можете писать сценарии оболочки hash bang с помощью Clojure так же легко, как и на любом другом языке сценариев, и это то, что я рекомендую.
dnolen


18

Clojure широко используется для обработки больших объемов данных. Он очень хорошо подходит для интеллектуального анализа данных / коммерческого ИИ (например, Runa) и крупномасштабных прогнозов (также известного как WeatherBill). История параллелизма в Clojure действительно помогает в этих областях с большим объемом данных, где параллельная обработка - просто единственный ответ.


13

Что ж, это сложный вопрос. Что ты хочешь делать? Не так уж много Clojure действительно подходит. Я имею в виду, что это не очень хорошо для отдельных сценариев командной строки из-за времени запуска JVM (если вы не используете торт или что-то подобное), но это можно сказать для любого языка JVM.

Clojure особенно подходит для задач параллелизма. Он был создан с нуля, чтобы стать отличным языком для параллелизма, и его система STM просто фантастическая. Если вам нужно сделать некоторые хардкорные вещи, связанные с параллелизмом, Clojure может быть особенно подходящим для этой задачи.

Однако следует помнить, что Clojure - это язык общего назначения. Он подходит не только для определенных ниш, но и может быть полезен для многих или всех вещей, для которых могут подходить другие языки JVM.

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

Если у вас есть что-то в голове, лучше всего подумать, как будет выглядеть решение на любых языках, которые являются вариантами. Если в Groovy все выглядит лучше, выбирайте Groovy. Это два совершенно разных языка, и у обоих есть свои цели.


Даже тогда я обнаружил, что пишу сценарии CLI Clojure просто потому, что мне нравится писать на этом языке, и я не возражал против времени запуска в моем случае.
nha

7

Вы можете использовать Clojure везде, где бы вы ни использовали Groovy или java. Почему вы хотите это сделать ? Некоторым нравится шепелявить. Они выберут закрытие вместо Groovy. Некоторым людям не нравится шепелявость. Они выберут Groovy.


2
Это не только вопрос выбора, clojure имеет множество функций, которых нет в других языках) почему-то никто ничего не упоминал, я почти не помню разговоры на конференциях, поэтому я не смогу написать здесь правильный ответ
Holms
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.