Описание тега clojure

Clojure - это современный диалект Лиспа для виртуальной машины Java (с версиями для CLR и JavaScript). Clojure - это больше, чем просто реализация Lisp на Java, он предоставляет доступ к классам и экосистеме Java.

Clojure - это диалект Лиспа для виртуальной машины Java (с версиями для CLR и JavaScript).

Clojure - это современный диалект Лиспа с упором на функциональное программирование (ленивое / нечистое), работающий на JVM с прозрачным доступом ко всем библиотекам Java, интерактивная среда разработки REPL, динамический полиморфизм времени выполнения, макро-метапрограммирование в стиле Lisp и параллельное программирование. возможности, поддерживаемые программной транзакционной памятью.

Ключевая особенность:

  • Наследие Лиспа - Clojure - полностью гомоиконный язык с поддержкой метапрограммирования на основе макросов. Все функции языка доступны во время компиляции, и можно манипулировать "кодом как данными". Эти механизмы часто используются для расширения самого языка или создания новых предметно-ориентированных языков.
  • Функциональное программирование - Clojure - это прежде всего функциональный язык. Он имеет неизменяемые структуры данных и ленивые последовательности. Как и многие другие Лиспы, он нетерпеливо оценивается (хотя могут быть введены ленивые последовательности, макросы и замыкания для получения ленивого поведения) и неочищен.
  • Параллельное программирование, поддерживаемое программной транзакционной памятью и предназначенное для многоядерных сред.
  • Динамический - Clojure - это динамический язык. Однако следует отметить, что он по-прежнему полностью скомпилирован, использует примитивные операции на JVM там, где это необходимо для повышения производительности, а также может поддерживать (необязательные) подсказки статического типа.
  • Размещено на JVM, что обеспечивает простой и прозрачный доступ к широкой экосистеме библиотек Java.
  • Открытый исходный код - Clojure работает как совместный проект с открытым исходным кодом ( размещенный на GitHub), и существует быстрорастущая экосистема библиотек с открытым исходным кодом для Clojure в дополнение ко всем инструментам с открытым исходным кодом, уже доступным для Java.
  • Переносимость - Clojure может работать на любой платформе, поддерживающей JVM, и версии Clojure также доступны для CLR ( ClojureCLR) и JavaScript ( ClojureScript).
  • Программная транзакционная память (STM), обеспечивающая управление многовариантным параллелизмом (MVCC) - ссылки Clojure обеспечивают безопасность потоков и преимущества параллелизма, не требуя явной блокировки со стороны программиста Clojure

Примеры кода:

Привет, мир прост:

  (println "Hello World!")

"Печально известные" скобки Lisp используются для применения функции, которая всегда является первым элементом в списке:

  (+ 1 2 3 4)
  => 10 

Функции могут быть легко определены и переданы функциям более высокого порядка, например map:

  (defn triple [x]
    (+ x x x))

  (map triple [1 2 3 4 5 10])
  => (3 6 9 12 15 30)

Полностью поддерживаются бесконечные ленивые последовательности:

  (take 7 (iterate (partial str "a") "b"))
  => ("b" "ab" "aab" "aaab" "aaaab" "aaaaab" "aaaaaab")

Вы даже можете выполнять мощные вычисления над бесконечными последовательностями, например, определять полный ряд Фибоначчи:

  (def fibonaccis
    (lazy-cat [0 1] (map + fibonaccis (rest fibonaccis))))

  (take 10 fibonaccis)
  => (0 1 1 2 3 5 8 13 21 34)

Ресурсы:

Веб-сайты

инструменты

Книги

Статьи

Видео

Упражнения

Тренинги