Clojure-это диалект Лиспа, который привлек последователей среди программистов, которые хотят принять функциональный подход. Версия 1.6 содержит новые и улучшенные функции, улучшения производительности, печати, строк документации и сообщений об ошибках, а также исправления ошибок.
Первоначально разработанный Ричом Хики для JVM, Clojure с тех пор был перенесен в CLR (clojure-clr), и еще одна вилка привела к компилятору Clojure для JavaScript, ClojureScript.
Согласно описанию на clojure.org:
Он разработан как язык общего назначения, сочетающий доступность и интерактивную разработку языка сценариев с эффективной и надежной инфраструктурой для многопоточного программирования. [Он] разделяет с Lisp философию кода как данных и мощную макросистему, является преимущественно функциональным языком программирования и имеет богатый набор неизменяемых, постоянных структур данных. Когда требуется изменяемое состояние, Clojure предлагает программную систему транзакционной памяти и систему реактивных агентов, которые обеспечивают чистые, правильные многопоточные проекты.
Новый выпуск предоставляет Java API, состоящий из:
- clojure.java.api.Clojure
- clojure.lang.IFn
Это обеспечивает минимальный интерфейс для начальной загрузки Clojure доступа с других языков JVM. Он делает это, предоставляя: возможность использовать пространства имен Clojure для поиска произвольного var, возвращая var clojure.lang.Интерфейс IFn и метод чтения для чтения данных с помощью edn-считывателя Clojure. IFN предоставляют полный доступ к API Clojure. Вы также можете получить доступ к любой другой библиотеке, написанной в Clojure, после добавления ее исходной или скомпилированной формы в путь к классу.
Он предоставляет новые алгоритмы хеширования для примитивов и коллекций, доступные через IHashEq/hasheq (в Java) или функцию clojure.core/hash (в Clojure). В целом, эти изменения должны быть прозрачными для пользователей, за исключением того, что хэш-коды, используемые внутри хэшированных коллекций, таких как карты и наборы, будут иметь лучшие свойства.
Он также вводит «некоторые» операции, условные функции, которые дополняют true и false, когда вы хотите проверить «не нильность».Были добавлены три функции:
- некоторые? — то же самое, что (не (ноль? x))
- если-некоторые — как если-пусть, но проверяет (некоторые? тест) вместо теста
- когда-некоторые — любят, когда-пусть, но проверяет (некоторые? тест) вместо теста
Обновление для отображения деструктурирования с помощью :keys и :syms mot позволяет им сопоставлять ключи пространства имен и привязываться к локальной переменной на основе ее имени.
Обновление Clojure приветствуется, но введение Java 8 и поддержка lambdas заставили одного или двух программистов задаться вопросом, является ли Clojure хорошим вариантом. Конечно, это так, если вы ищете очень динамичный функциональный язык, Clojure по-прежнему является хорошим выбором, но если раньше вы были просто немного раздражены поддержкой Java той или иной функции, то, возможно, пришло время придерживаться Java 8.