clojure учебник
Начало работы с clojure
Поиск…
замечания
Clojure - динамически типизированный язык программирования общего назначения с синтаксисом Lisp.
Его функции поддерживают функциональный стиль программирования с первоклассными функциями и неизменяемыми значениями по умолчанию. Использование переназначаемых переменных не так просто в Clojure, как и во многих основных языках, поскольку переменные должны быть созданы и обновлены как объекты контейнера. Это поощряет использование чистых ценностей, которые останутся такими, какими они были в тот момент, когда их видели в последний раз. Это обычно делает код гораздо более предсказуемым, проверяемым и совместимым с параллелизмом. Это также работает для коллекций, поскольку встроенные структуры данных Clojure являются постоянными.
Для производительности Clojure поддерживает тип-намек, чтобы устранить ненужное отражение там, где это возможно. Кроме того, группы изменений в постоянных коллекциях могут быть сделаны для переходных версий, что уменьшает количество задействованных объектов. Это не обязательно в большинстве случаев, поскольку постоянные коллекции быстро копируются, поскольку они делят большую часть своих данных. Их гарантии эффективности находятся недалеко от их изменчивых коллег.
Среди других возможностей Clojure также имеет:
- программная транзакционная память (STM)
- несколько примитивов параллелизма, не включающих ручную блокировку (атом, агент)
- сменные преобразователи последовательности (преобразователи),
- функциональные средства для обработки дерева (молнии)
Благодаря простому синтаксису и высокой расширяемости (с помощью макросов, реализации основных интерфейсов и отражения) в Clojure с библиотеками могут быть добавлены некоторые известные функции языка. Например, core.typed
предоставляет статический тип checker, core.async
предоставляет простые механизмы параллелизма на основе каналов, core.logic
приносит логическое программирование.
Разработанный как размещенный язык, он может взаимодействовать с платформой, на которой он работает. В то время как основной целью является JVM и вся экосистема за Java, альтернативные реализации могут выполняться и в других средах, таких как ClojureCLR, работающие на среде Common Language Runtime или ClojureScript, работающие на время работы JavaScript (включая веб-браузеры). Хотя в альтернативных реализациях может отсутствовать некоторые функции из версии JVM, они по-прежнему считаются одним семейством языков.
Версии
Версия | Журнал изменений | Дата выхода |
---|---|---|
1,8 | Последний журнал изменений | 2016-01-19 |
1,7 | Журнал изменений 1.7 | 2015-06-30 |
1,6 | Журнал изменений 1.6 | 2014-03-25 |
1.5.1 | Журнал изменений 1.5.1 | 2013-03-10 |
1.4 | Журнал изменений 1.4 | 2012-04-15 |
1,3 | Журнал изменений 1.3 | 2011-09-23 |
1.2.1 | 2011-03-25 | |
1.2 | 2010-08-19 | |
1,1 | 2010-01-04 | |
1,0 | 2009-05-04 |
Установка и настройка
Вариант 1: Leiningen
Требуется JDK 6 или новее.
Самый простой способ начать работу с Clojure - загрузить и установить Leiningen, фактический стандартный инструмент для управления проектами Clojure, а затем запустить lein repl
чтобы открыть REPL .
Linux
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein export PATH=$PATH:~/bin chmod 755 ~/bin/lein
OS X
Следуйте инструкциям по Linux выше или установите с помощью менеджеров пакетов macOS.
Установить с помощью Homebrew
brew install leiningen
Установить с помощью MacPorts
Сначала установите Clojure
sudo port -R install clojure
Установите Leiningen
, инструмент сборки для Clojure
sudo port -R install leiningen
lein self-install
Windows
См. Официальную документацию .
Вариант 2: официальное распространение
Требуется JRE 6 или новее.
Релизы Clojure публикуются как простые файлы JAR для запуска на JVM. Это то, что обычно происходит внутри инструментов сборки Clojure.
Перейдите на сайт http://clojure.org и загрузите последний архив Clojure
Извлеките загруженный ZIP- файл в каталог по вашему выбору
Запустите
java -cp clojure-1.8.0.jar clojure.main
в этом каталогеВозможно, вам придется подставить
clojure-1.8.0.jar
в этой команде для имени загруженного вами файла JAR.Для лучшего использования REPL в командной строке (например, с помощью ваших предыдущих команд) вы можете установить
rlwrap
:rlwrap java -cp clojure-1.8.0.jar clojure.main
Вариант 3: загрузка
Требуется JDK 7 или новее.
Boot - многоцелевой инструмент построения Clojure. Понимание этого требует некоторых знаний о Clojure, поэтому, возможно, это не лучший вариант для новичков. См. Веб-сайт (нажмите « Начало работы» ) для инструкций по установке.
Как только он будет установлен, и в вашем PATH
, вы можете запустить boot repl
где угодно, чтобы запустить Clojure REPL.
"Привет, мир!" в REPL
Сообщество Clojure уделяет большое внимание интерактивному развитию, поэтому довольно много взаимодействия с Clojure происходит в REPL (read-eval-print-loop) . Когда вы вводите в него выражение, Clojure читает его, оценивает и распечатывает результат оценки, все в цикле .
Теперь вы можете запустить Clojure REPL. Если вы не знаете, как это сделать, следуйте разделу « Установка и настройка » в этом разделе. После того, как вы его запустили, введите в него следующее:
(println "Hello, world!")
Затем нажмите Enter . Это должно распечатать Hello, world!
, за которым следует возвращаемое значение этого выражения, nil
.
Если вы хотите запустить некоторый clojure сразу, попробуйте выполнить онлайн REPL. Например, http://www.tryclj.com/ .
Создать новое приложение
Следуя приведенным выше инструкциям и установкой Leiningen, запустите новый проект, запустив:
lein new <project-name>
Это установит проект Clojure с шаблоном Leiningen по умолчанию в папке <project-name>
. Для Leiningen существует несколько шаблонов, которые влияют на структуру проекта. Чаще всего используется шаблон «приложение», который добавляет основную функцию и подготавливает проект для упаковки в jar-файл (основная функция которого является точкой входа приложения). Это может быть достигнуто с помощью:
lein new app <project-name>
Предполагая, что вы использовали шаблон приложения для создания нового приложения, вы можете проверить, что все было настроено правильно, введя созданный каталог и запустив приложение, используя:
lein run
Если вы видите Hello, World!
на консоли вы все готовы и готовы приступить к созданию своего приложения.
Вы можете упаковать это простое приложение в два jar-файла со следующей командой:
lein uberjar
"Привет, мир!" используя загрузку
Примечание. Перед тем, как попробовать этот пример, вам нужно установить Boot. См. Раздел « Установка и настройка », если вы еще не установили его.
Boot позволяет создавать исполняемые файлы Clojure с помощью строки shebang (#!). Поместите следующий текст в файл по вашему выбору (в этом примере предполагается, что он находится в «текущем рабочем каталоге» и называется hello.clj
).
#!/usr/bin/env boot
(defn -main [& args]
(println "Hello, world!"))
Затем пометьте его как исполняемый файл (если применимо, обычно, запустив chmod +x hello.clj
).
... и запустите его ( ./hello.clj
).
Программа должна выводить «Привет, мир!». и закончить.
Создайте новое приложение (с загрузкой)
boot -d seancorfield/boot-new new -t app -n <appname>
Эта команда сообщит boot, чтобы захватить задачу boot-new
с https://github.com/seancorfield/boot-new и выполнить задачу с шаблоном app
(см. Ссылку для других шаблонов). Задача создаст новый каталог с именем <appname>
с типичной структурой приложения Clojure. Для получения дополнительной информации см. Созданный README.
Запуск приложения: boot run
. Другие команды указаны в build.boot
и описаны в README.