Описание тега clojure
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)
Ресурсы:
Веб-сайты
- Домашняя страница Clojure
- Документация Clojure
- ClojureDocs
- Репозиторий с открытым исходным кодом сообщества Clojars
- Репозитории Clojure Github
- Архивы группы Google Clojure
- Руководство по стилю Clojure
- Clojure / con
- Ссылки и чит-сайты
- ClojureScript
- ClojureCLR
- Веб-фреймворки
инструменты
- Leiningen и ряд плагинов
- Поддержка возвышенного текста
- Плагин Cursive IntelliJ
- Плагин LaClojure
- Плагин Eclipse против часовой стрелки
- Подключаемый модуль Netbeans Enclosure
- Атом с Паринфером
- Emacs с clojure-mode и CIDER
- Редактор светового стола
- Панель инструментов Clojure
Книги
- О'Рейли
- Комплектование
- APress
- Прагматическая книжная полка
- PaktPub
- Закрытие без крахмала для смелых и честных
- Постный паб
- Другие
Статьи
- InfoQ
- Планета Clojure
- Раскрытие
- Clojure на Reddit
- Истории успеха
- Кто использует Clojure?
- Clojure at Scale от Walmart
- 60000% роста с использованием Clojure и AWS по ключу комнаты
- Разблокировка систем, управляемых данными, с помощью отчетов потребителей
- Beanstalk + Clojure = Любовь (и производительность в 20 раз выше)
- Clojure в газете
- Уроки, извлеченные из внедрения Clojure
- Призматический: Ом сладкий Ом: (высокофункциональная) разработка интерфейса с помощью ClojureScript и React
- Сониан: БЕЗОПАСНОСТЬ: основа для приложений Clojure
Видео
- ClojureTV
- InfoQ
- RESTful Clojure
- Clojure и Интернет
- Что отстой в Clojure... и почему он вам все равно понравится
- Clojure после медового месяца
- Вниз по кроличьей норе Clojure
- Введение в Clojure и ClojureScript
- Актуальность ClojureScript
- Почему Prismatic работает быстрее с Clojure
- Clojure core.async
- Параллелизм в Clojure
- Clojure решение проблемы выражения
- Clojure: искусство абстракции
- Пространства имен, переменные и символы (о, боже!)
- Clojure в поле
- Непрерывное тестирование в Clojure
- Leiningen 2 - Гуманное управление сборкой для Clojure
- Макросы: почему, когда и как?
- Постоянные структуры данных и управляемые ссылки, Рич Хики
- Рич Хики о протоколах и Clojure 1.3
- Рич Хики о функциях и реализации Clojure
- Clojure
- Мы уже на месте?
- Постоянные структуры данных и управляемые ссылки
- Стюарт Хэллоуэй о Clojure и функциональном программировании
- Канал 9
- Vimeo
Упражнения
Тренинги
- PluralSight
- Сафари / О'Рейли