вторник, 22 февраля 2011 г.

Использование Clojure из Java


«You know Lisp* is great, I know Lisp is great, so why isn’t everyone using Lisp?» На этот вопрос пытается найти ответ автор статьи Why Isn’t Everyone Using Lisp?

Если коротко, то автор выделяет три причины:
  • Отсутствие большого числа свободно доступных библиотек, особенно для web-a.
  • Наличие нескольких диалектов лиспа, рассредотачивающих усилия разработчиков; 
  • Отсутствие нормальной IDE
Эта пессимистичная статья написана в 2006-м году, а уже через год ситуация круто изменилась с появлением Clojure. Язык Clojure – единственный действительно стоящий лисп на jvm. Понятно, что тесная интеграция Clojure и Java моментально решила все три проблемы непопулярности лиспа, и теперь, видимо, мы станем свидетелями, как Clojure завоюет галактику.

Первый шаг на пути к завоеванию – внедрение исходника на Clojure в исходники на Java. Лично я считаю, что построение слоя презентации с использованием библиотеки Swing проще делать именно на Java, особенно в такой IDE, как Netbeans.

Создадим проект Clojure в Leiningen:
  1. lein new ga
  2. добавить в project.clj строку :namespaces [ga.core], чтобы указать, какие неймспейсы компилировать.
Реализуем класс Processor. У меня он выглядит так:


Чтобы скомпилировать класс нужно выполнить команду lein compile. После компиляции в каталоге classes появится java-класс ga.core.Processor. Leiningen может собрать и jar-ку, если выполнить команду lein jar, но для ее использования нужно в classpath добавить jar-ки clojure и clojure-contrib. Ну а если и это лень, то команда lein uberjar скомпилирует файлы clojure, соберет все в jar-ку и добавить clojure.jar и clojure-contrib.jar туда же.

Очень удобно использовать этот uberjar прямо в проекте на java. Скомпилированный класс на Clojure доступен в Java как обычный java-класс; в нем доступно обычное автодополнение кода.




А вот так выглядит результат выполнения программы на Java, вызывающей код на Clojure.





Комментариев нет:

Отправить комментарий