Рассмотрите изучение его. Если ни по какой другой причине затем, потому что можно на самом деле использовать его в реальном проекте.
You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.
То, к чему Вы обращаетесь Lisp-1 по сравнению с Lisp-2, является вопросом того, совместно используют ли функции и переменные то же пространство имен. В Lisp-1 Шепелявит, как Scheme и Clojure, они делают. В Lisp-2 Шепелявит, как язык Common LISP, они не делают. Это - главным образом вопрос вкуса и/или удобства - это не влияет на питание языка программирования.
Как пример, в Clojure можно сделать это:
(defn my-apply [func arg1 arg2]
(func arg1 arg2))
Это - функция, которая берет функцию и два значения и применяет функцию к значениям. Например:
user=> (my-apply + 1 2)
3
В языке Common LISP, необходимо было бы записать это как
(defun my-apply (func arg1 arg2)
(funcall func arg1 arg2))
причина, Вам нужен "funcall", то, что, так как "func" находится в пространстве имен переменных, Вы не можете непосредственно использовать его в качестве функции, как Вы может в Clojure, который не делает это различие. Таким образом, необходимо сказать язык Common LISP, "интерпретируйте эту переменную как функцию и назовите ее с этими аргументами". Другое последствие этого - то, что для получения того же результата необходимо звонить, "мои - применяются" как это:
=> (my-apply #'+ 1 2)
3
Здесь проблема инвертируется: "+" функция, но Вы хотите передать ее как переменную, таким образом, необходимо "преобразовать" ее. "# '+" короток для" (функция +)", btw.
Clojure является диалектом LISP так, да, это столь же мощно как LISP.
Ни по какой другой причине, чем у нас теперь есть хороший инструмент LISP для JVM, мне нравится этот язык.
"Clojure имеет потенциал, чтобы сделать для ориентированного на параллелизм программирования, что Java сделал для объектно-ориентированного программирования десятилетие назад: сделайте более простым сделать правильно использование языка (или, в случае Clojure’s, “language environment”), который подобен тому, к чему уже привыкли программисты". - Bill Clementson
И люди, LISP состоит из семьи языков программирования. Существуют диалекты Lisp как язык Common LISP и Clojure. И вдобавок ко всему, существует много реализаций языка Common LISP или Схемы.
Мне нравится язык Common LISP лучше, чем Clojure, потому что синтаксис является более регулярным, и он не связывается с ужасным (по моему скромному мнению), API Java.
Для языка Common LISP у меня также есть выбор между несколькими превосходными и хорошо протестированными реализациями и сформировавшимся стандартом для доверия.
, Но если бы я должен был использовать Java для задания затем, я определенно рассмотрел бы использование Clojure. :)
то, что я подразумеваю "под Действительно ли Clojure, так же мощно, как LISP" то, что я читал где-нибудь здесь на stackoverflow, что язык Common LISP является шепелявостью 2, и Clojure является шепелявостью 1? (Я мог easly околачиваться здесь)...
, насколько параллелизм обеспокоен, что мне действительно нравится история Erlang с тех пор ее настолько легкий распределить приложения путем записи им в модели
Actor от создателя Clojure в http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1
"Даже с агентами, Clojure еще не будет иметь распределенной истории параллелизма, но я рассматриваю просто принятие оптовой торговли Erlang, с помощью Jinterface для Clojure<-> Clojure или даже Clojure<-> Erlang распределил процессы. Возможно, это будет похоже на Термита, когда он будет сделан. Останьтесь настроенными".
Я использовал Erlang в работе для согласованного сетевое нагрузочное тестирование, и оно идеально подходило для этого, потому что проблема была в пределах «сладкого места» Erlang - «правильного выполнения программного обеспечения, ориентированного на распределенные коммуникации». Я считаю, что Clojure НАМНОГО лучше подходит для кода, который должен делать что-то сложное в одном блоке с несколькими потоками (это более распространенный сценарий).
Вы на шаг впереди, потому что знаете Erlang, и это поможет вам выявить проблемы, в которых он действительно проявляет себя. Что вы думаете о Clojures "сладкое пятно"? есть?
Я использую Clojure, а не CL, потому что:
: wq
Clojure - это Lisp-1, да. Думайте об этом как о более хорошем Common Lisp без всего исторического багажа. Он также имеет несколько современных функций параллелизма, таких как STM и агенты (они решили не реализовывать модель акторов Erlang). Преимущество работы на JVM простое - для нее уже написано ТАКОЕ много библиотек (в основном на Java).
Clojure in Clojure - это постоянная попытка переписать компилятор Clojure в Clojure, чтобы сделать его более удобным. портативный и ремонтопригодный. Помимо core.clj, большая часть Clojure в настоящее время написана на Java. После этого перехода его можно будет перенести на МНОГО ВМ, включая Parrot.