суббота, 29 мая 2010 г.

Начало работы

Установка

Clojure можно найти на Google Code. Репозитарий исходников находится на GitHub. Там же находится порт на CLR. Совместная разработка ведется на Assembla.


Замечания и обсуждение идет на Clojure Google Group. Пожалуйста присоединяйтесь!

Документацию и советы от сообщества пользователей можно почитать на Wiki. Вы можете свободно принимать участие в написании.

Clojure распространяется как zip файл с clojure.jar, readme, текстом лицензии EPL и исходниками в папке src. Язык использует библиотеку байткода ASM 3.0 и она включена в дистрибутив. Для работы требуется Java 1.5 или выше.


Быстрое начало
В папке, в которую вы разархивировали clojure.zip, наберите команду:
java -cp clojure.jar clojure.main
После чего появится read-eval-print (REPL). Большая часть Clojure написана на ней самой (в файле core.clj, который находится в папке src), который автоматически загружается, когда стартует Clojure  из .jar архива. 

Когда core.clj будет загружен, то Clojure будет в вашем полном распоряжении.
Попробуйте напечатать:
user=> (+ 1 2 3)
6
user=> (. javax.swing.JOptionPane (showMessageDialog nil "Hello World"))
В REPL можно осуществлять только базовое редактирование. Для большего удобства попробуйте запустится через JLine ConsoleRunner:
java -cp jline-0.9.91.jar:clojure.jar jline.ConsoleRunner clojure.main
После чего появится возможность навигации по клавишам левый/правый и листать историю ввода по клавишам вверх/вниз.

Редактирование
Редактировать код на Clojure удобнее всего в каком-нибудь редакторе с поддержкой соответствия скобок. Свежую информацию о таком инструментарии (Netbeans, Eclipse, IntelliJ Idea, Emacs, Vim и другие) можно найти на странице Getting Started в Clojure Assembla. Так же Sean Devlin сделал серию скринкастов, о том как можно настроить редактирование кода на Clojure. Всем спасибо!


Отладка
Я успешно отлаживал код на Clojure с помощью JSwat версии 3.16 на Mac OS X. Вы можете запустить Clojure под JSwat, но возможности редактирования будут ограничены. Лучше присоединить JSwat к работающему Clojure. Вы должны запустить Java с этими флагами, чтобы проводить удаленную отладку:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n ...

Когда Clojure запустится, он напечатает что-то типа этого:
Listening for transport dt_socket at address: 63657
Clojure
user=>
Потом в JSwat выберите Attach... и введите localhost в поле Host и адрес сокета в Port. В JSwat откройте файл Clojure, который вы загрузили (включая boot.clj) и можете ставить брейкпойнты в коды на Clojure. Брейкпойнты, стек вызова, локальные переменные и пошаговая отладка (в Сlojure коде, и вызовах с Clojure на Java и обратно) будут работать. Вы также можете подключить запущенный Clojure как inferior Lisp в Emacs. Если вы поменяли .clj, то лучше всего перезагрузить его в, JSwat обнаружить изменения в файле и вы сможете ставить брейкпойнты в коде даже без его перезапуска.

Профайлинг
Профилирование кода на Clojure можно осуществлять с любым профайлером для Java. Я успешно использовал YourKit Java Profiler, лицензии для которого были щедро предоставлены YourKit.

Так YourKit поддерживает open source проекты, любезно обеспечивая их профайлером. YourKit, LLC является создателем инновационных и продвинутых инструментов для профилирования кода в приложениях для Java и .NET. Вы можете найти продукты этой компании на:
YourKit Java Profiler и
YourKit .NET Profiler


Copyright 2008-2010 Rich Hickey

понедельник, 10 мая 2010 г.

Clojure (перевод с clojure.org)

Clojure - это динамический язык, который работает на виртуальной машине Java (Virtual Machine)  и and CLR. Он является языком общего назначения, комбинирует в себе доступность и интерактивную разработку динамических языков с эффективной и гибкой инфраструктурой для многопоточного программирования. Clojure является компилируемым в JVM байткод, и в то же время остается динамическим. Любая возможость, поддерживаемая Clojure, доступна во время рантайма. Clojure обеспечивает легкий доступ к  Java фреймворкам, с использованием опционального вывода типов и других средств работы с типами, чтобы эти обращения не использовали рефлексию.

Clojure являетя диалектом Lisp, и использует лисповскую философию единства кода и данных и мощную систему макросов. Clojure является функциональным языком программирования и везде, где это только возможно, старается использовать неизменяемые структуры данных. Когда же вам необходимы изменяемые данные Clojure предлагает software transactional memory и систему Agent, которые позволяют построить понятный, правильный и многопоточный дизайн.

Я надеюсь вы найдете предоставляемые Clojure возможности элегантными, мощными, практичными и вам понравиться их использовать.

Основное обсуждение Clojure идет в Google Group - присоединяйтесь!

Rich Hickey