Установка, 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 leiningen

Leiningen против deps.edn

Оба инструмента решают похожие задачи, но по-разному.

Leiningendeps.edn (CLI)
Файл проектаproject.cljdeps.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: программу выращивают интерактивно.
Проверьте себя
1. Что обязательно нужно установить перед Clojure?
APython
BNode.js
CJava (JDK)
DDocker
2. Что расшифровывается как REPL?
ARun-Edit-Print-Load
BRead-Eval-Print-Loop
CRepository-Engine-Package-Linker
DRemote-Execution-Protocol-Layer
3. В каком файле описываются зависимости в подходе Clojure CLI?
Aproject.clj
Bdeps.edn
Cpackage.json
Dpom.xml