Установка, Leiningen, deps.edn и первый REPL
Ставим инструменты и запускаем REPL — место, где живёт настоящая разработка на Clojure.
REPL (Read-Eval-Print Loop) — интерактивная среда, которая читает выражение, вычисляет его, печатает результат и ждёт следующего.
Что нужно установить
Так как Clojure работает на JVM, первым делом нужна Java (JDK 11 или новее). Дальше есть два главных способа управлять проектами и зависимостями: Leiningen и официальный Clojure CLI с deps.edn.
# Проверяем, что Java установлена
java -version
# macOS: ставим Clojure CLI и Leiningen через Homebrew
brew install clojure/tools/clojure
brew install leiningenLeiningen против deps.edn
Оба инструмента решают похожие задачи, но по-разному.
| Leiningen | deps.edn (CLI) | |
| Файл проекта | project.clj | deps.edn |
| Стиль | «всё в одном», много плагинов | минималистичный, композируемый |
| Возраст | старше, очень распространён | официальный, новее |
| Кому подойдёт | привычным проектам, шаблонам | тем, кто любит явность |
Файл deps.edn — это просто отображение (map) в формате EDN, где вы перечисляете зависимости:
{:deps {org.clojure/clojure {:mvn/version "1.11.1"}}}Запускаем REPL
REPL — сердце разработки на Clojure. Запустить его можно так:
# Через Clojure CLI
clj
# Через Leiningen
lein replВнутри REPL вы вводите выражения и сразу видите результат:
user=> (+ 1 2 3)
6
user=> (println "Работает!")
Работает!
nil
user=> (def x 10)
#'user/x
user=> (* x x)
100Почему REPL — это культура
В большинстве языков цикл такой: написал код → собрал → запустил → посмотрел результат → исправил. В Clojure всё иначе: вы держите REPL запущенным часами и «выращиваете» программу выражение за выражением. Подключённая к редактору REPL-сессия позволяет отправлять функцию прямо из кода и тут же её пробовать, не перезапуская приложение.
Этот стиль — «REPL-driven development» — экономит огромное количество времени и формирует особое мышление: вы постоянно проверяете маленькие гипотезы вместо того, чтобы писать большой кусок и надеяться.
Как работает под капотом
REPL — не игрушка для опытов, а полноценный интерфейс к работающему процессу JVM. Каждое выражение читается reader-ом, компилируется в байт-код и исполняется в той же JVM, где живут все ваши определения. Поэтому новое определение функции тут же доступно остальной программе — состояние процесса сохраняется между вводами.
Частые ошибки
- Забыть про Java. Без JDK ни Leiningen, ни CLI не запустятся.
- Смешивать project.clj и deps.edn. Выберите один инструмент на проект, чтобы не путать зависимости.
- Не пользоваться REPL. Писать Clojure «как Java», правя файл и перезапуская всё целиком, — значит терять главное преимущество языка.
Итоги
- Нужна Java (JDK 11+), затем Leiningen или Clojure CLI с deps.edn.
- project.clj и deps.edn — два способа описывать зависимости; выберите один.
- REPL читает, вычисляет и печатает выражения по одному.
- REPL-driven development — ядро культуры Clojure: программу выращивают интерактивно.