Застосування зразка Clojure середнього розміру?


96

Чи існує середня програма-зразок Clojure, яка може бути використана як приклад "найкращих практик", і хороший спосіб побачити, як така програма буде виглядати з точки зору коду та організації коду? Веб-додаток був би для мене особливо цікавим, але найголовніше, щоб програма робила щось загально корисне (наприклад, блог, відстеження помилок, CMS), а не щось математичне, що мені ніколи не доводилося реалізовувати в реальному житті світу (вирішення проблеми N-королеви, моделювання життя, генерування послідовностей Фібоначчі та такі звичайні тарифи функціональних мов програмування).

Дякую!


Я збирався задати саме це питання. Це змушує мене задуматися, наскільки це практично в "реальному світі"
ScArcher2,

5
Люди занадто задухи у цьому "реальному світі"
Рейн,

Я створив з ним IRC-бота, це ідеальна мова для цього (продуктивність не проблема, плагіни із гарячою заміною, вихід тривіально пов'язаний із введенням - функцією). Для більшості інших застосувань це не дуже добре. Занадто багато витрачання процесора і особливо занадто багато використання пам’яті, збивання пам’яті, помилки кешу.
RokL

Відповіді:


42

Я рекомендую коров'ячий блог Брайана Карпера. За словами автора, це було написано з урахуванням вашої мети.


Станом на 2018 рік, корова-блог не збирається, дотримуючись інструкцій. lein depsне вдається з цим повідомленням: `` Отримання gaka / gaka / 0.1.0 / gaka-0.1.0.pom із клоярів Спробовано використовувати незахищений репозиторій HTTP без TLS. Це майже напевно помилка; однак у рідкісних випадках, коли це навмисно, зверніться lein help faqдо подробиць. Спробували використовувати незахищений репозиторій HTTP без TLS. Це майже напевно помилка; однак у рідкісних випадках, коли це навмисно, будь ласка, зверніться lein help faqдо подробиць. ``
Теодор

19

Якщо ви переглядаєте вихідний код clojure-contrib, ви можете побачити, як бібліотеки реалізовані в clojure.

Ви також можете замовити " ClojureScript " під тим самим деревом джерел.

Дозволяє автоматично перекладати код, написаний дуже маленькою підмножиною Clojure, у JavaScript.

Перекладач ClojureScript - це повноцінна програма Clojure.

Я також рекомендую перевірити Порт практичних загальних зразків Стюарта Хеллоуея в Clojure, якщо ви цього ще не зробили.


Монолітна бібліотека Clojure Contrib застаріла на користь набору нових модульних бібліотек contrib, які можна знайти тут: dev.clojure.org/display/doc/Clojure+Contrib (зауважте, що Clojure перемістився зі сховища richhickey на Github до офіційне сховище клоджуре)
Шон Корфілд,

15

Погляньте на Compojure . Це веб-фреймворк, написаний на Clojure, тому він дозволяє вам писати та запускати (на вбудованому Jetty) корисні веб-програми в Clojure, а також служить хорошим прикладом значної частини реального коду Clojure.

Він активно розробляється і має корисну групу Google .


1
Оскільки більша частина коду відсутня від Compojure Ring, можливо, це місце, де зараз слід шукати.
mac

Багато коду HTML, що генерує Compojure, тепер є частиною Hiccup, я вважаю ( github.com/weavejester/hiccup )
mikera

10

Ознайомтеся з демонстрацією мурах, написаною автором Clojure, Річем Хікі:

http://clojure.googlegroups.com/web/ants.clj

Ось декілька приємних інструкцій щодо його налаштування разом із середовищем розробки emacs:

http://riddell.us/clojure

Також перегляньте презентацію Річа, яка йде разом із цим кодом:

http://blip.tv/file/812787


1
Я намагаюся перенаправляти, коли намагаюся переглянути джерело. Як не дивно, але я також не можу знайти його через Google.
AnnanFay

Схоже, посилання blip.tv зараз знаходиться на youtube.com/watch?v=dGVqrGmwOAw, і я думаю, що опис коду починається приблизно через 1 годину 24 хвилини від презентації.
Роджер Аллен

7

Сам Clojure є хорошим прикладом найкращих практик Clojure. Прочитайте внизу Core.clj, хороший матеріал.



5

Я думаю, що Compojure - це, мабуть, найкращий спосіб піти за прикладом. Я сумніваюся, що це "середній" приклад, але, мабуть, є його невеликі підрозділи, які могли б працювати. Принаймні, це буде мій підхід. посміхається

Також перевірте

http://github.com/technomancy/mire/tree/master

це невеликий прототип грязьового клієнта, вбудований в clojure, перевага полягає в тому, що він повністю автономний і, мабуть, досить простий, включаючи задіяні концепції. Документація, так, це добре, але концепції коду дуже тісно пов’язані з елементами дії MUD, яка працює легко.


5

Ми пройшли два роки від цього питання, і хоча це ще на початку циклу для мови, Clojure, безумовно, використовується для серйозних виробничих робіт. У World Singles у нас є кілька тисяч ліній Clojure, які виконують всілякі загальні завдання на нашій веб-платформі - я писав про це в своєму серіалі Clojure Real World .

Для деяких досить великих проектів з відкритим кодом - не зовсім додатків, а гучної інфраструктури - ви можете подивитися Storm з Twitter та Cascalog з BackType (нині частина Twitter). 4clojure.com згадується як веб-програма з відкритим кодом, і це теж варто подивитися, але зверніть увагу на нове репозиторій github для 4clojure .


3

Позитивний знак: на InfoQ є стаття про "одне з перших опублікованих звітів про те, що Clojure використовується у масштабному виробництві". Здається, він не відкритий, але принаймні це ознака того, що Clojure використовується в критично важливих додатках у реальному виробничому світі. Великий крок для громади Clojure.




1

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


1

edge - це програма середнього розміру, що демонструє структурування програми з Clojure, ClojureScript, Component, Yada, Aero та Boot.


0

Clojure все ще занадто молодий і рухається мішенню, щоб поки мати середні програми з доступним вихідним кодом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.