Для чого корисний Clojure? [зачинено]


100

Для яких реальних програм користуються люди, які використовують Clojure?

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

Я не є експертом Groovy чи фанатом будь-яких способів, але мені вражає, що він має кращу підтримку, інструменти та багато мовних конструкцій (закриття, функціональне програмування). Те саме можна сказати і для Скали.

Чи може бути, що її майбутнє є мовою, вбудованою в інші системи?


23
Все, крім того, щоб зробити мені сендвіч.
пшениці

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

3
Чому б ви також не використовували Clojure для "великих систем"? ISTM, що, будучи менш багатослівним, ніж Java, вашим системам не потрібно буде бути настільки великими в Clojure. :-)
Кен

2
Дивлячись на відповіді - я здогадуюсь, що люди використовують це для якихось крутих речей. Цікаво, скільки підприємств обиратимуть це для довгострокового розвитку?
Fortyrunner

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

Відповіді:


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: Помста Ліспа". Це була дивовижна розмова!
Amogh Talpallikar

1
// Що ви маєте на увазі під "розумінням кращих мовних конструкцій для правильної організації програмного забезпечення"? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Натан Басанес

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

1
@dnolen Дякуємо, що знайшли час для відповіді. Я новий ентузіаст клоджура, і це займає приблизно 20 секунд, коли я намагаюся запустити створений вами файл jar з lein uberjar. Я на OS X, Macbook з ядром i5 та 16 Гб оперативної пам’яті. Чи використовуєте ви якісь спеціальні оптимізації?
masnun

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


18

Clojure широко використовується для обробки великих обсягів даних. Він дуже добре підходить для видобутку даних / комерційних AI (тобто: Runa) та широкомасштабних прогнозів (він же WeatherBill). Історія кон'юнктури Clojure дійсно допомагає у цих важких областях, де паралельна обробка є єдиною відповіддю.


13

Ну, на це складне питання відповісти. Що ти хочеш робити? Існує не так багато, що Clojure насправді не підходить. Я маю на увазі, що це не дуже добре для одноразових скриптів командного рядка через час запуску JVM (якщо ви не використовуєте кек чи щось подібне), але це можна сказати для будь-якої мови JVM.

Clojure особливо підходить для одночасних завдань. Він був побудований з нуля, щоб бути приголомшливою мовою для одночасності, і ця система STM є фантастичною. Якщо вам потрібно зробити якісь хардкор-паралельні речі, Clojure може бути особливо підходящим для цього завдання.

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

Clojure був розроблений як фантастична мова сама по собі, і не обов'язково мова для клею. Ви можете створювати системи з нуля в Clojure, не торкаючись жодного коду Java. Не те, що це не робить приємною мовою клею, я знаю, що багато людей використовували її як таку.

Якщо ви щось маєте на увазі, найкраще зробити - розглянути, як виглядатиме рішення на будь-яких мовах, які є варіантами. Якщо в Groovy виглядає / почувається краще, ідіть з Groovy. Вони обидві докорінно різні мови, і обидві мають свої цілі.


Вже тоді я виявив, що пишуть сценарії CLI Clojure, просто тому, що мені здалося, що мова приємна для написання, і не заперечував час запуску в моєму випадку.
Nha

7

Ви можете використовувати Clojure в будь-якому місці, де ви б використовували Groovy або java. Чому б ти хотів це зробити? Деяким люблять lisp. Ті вибиратимуть кложур над Groovy. Деякі люди не люблять ляскати. Ті вибиратимуть Groovy.


2
Це не лише матерія вибору, у clojure є безліч особливостей, яких не має інша мова) якимось чином ніхто нічого не згадував, я ледве пам’ятаю розмови на конференціях, тому я не зможу написати належної відповіді тут
заперечує
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.