Я совершенно новичок в мире Clojure. Я ценю тот факт, что каждый имеет легкий доступ ко всем библиотекам Java с помощью функций взаимодействия Clojure, но мне было интересно, насколько Clojure стоит на своих ногах.
Конечно, есть некоторые платформы, такие как Android, где совместимость с Java всегда будет требоваться, потому что основные библиотеки написаны или представлены на Java. Более того, поскольку строки Clojure являются строками Java, я ожидаю, что библиотеки для работы со строками станут оберткой для методов Java String.
Но для других задач я не вижу причин, по которым не могут быть разработаны нативные библиотеки Clojure. Подумайте о Http, манипулировании датами, разборе XML, шаблонах, сериализации и десериализации JSON, OAuth, математических библиотеках и так далее.
Итак, мой вопрос:
Как далеко Clojure стал независимым от экосистемы Java? Есть ли у него свои идиоматические библиотеки для большинства из этих и других задач?
Ответы:
Clojure становится все более независимым от библиотек Java, поскольку его кодовая база растет и естественным образом диверсифицируется. Основным преимуществом Clojure является то, что он может вызывать Java, поэтому маловероятно, чтобы в будущем можно было увидеть код Clojure, не использующий Java. Тем не менее, я проделал большую часть разработки без вызова Java-библиотек (аргументы командной строки, базовая минипуляция текста и т. Д.). Вот список чистых библиотек clojure: http://www.clojure-toolbox.com/
источник
Я думаю, что было бы справедливо сказать, что Clojure разработан как размещенный язык, и теперь у него есть три реализации:
Поскольку он спроектирован как размещенный язык, идиома состоит в том, чтобы использовать библиотеки базовой платформы там, где это имеет смысл, а также предоставлять набор «базовых» библиотек, которые являются переносимыми (из pov использования, не обязательно на уровне кода). Я ожидаю, что со временем мы увидим гораздо больше библиотек Clojure, работающих на всех трех платформах, где это имеет смысл.
Я поддерживаю clojure.java.jdbc и clj-time (обертку вокруг JodaTime), поэтому не имеет смысла использовать их в версиях * CLR или * Script, но API-совместимые библиотеки в разных пространствах имен могут быть возможны.
Многие из «чистых» библиотек Clojure должны быть простыми для использования в версиях * CLR или * Script.
На вопрос ОП: «Clojure-the-language» довольно переносим, но «Clojure-the-реализация» намеренно привязана к экосистеме Java, как ClojureCLR для .NET и ClojureScript для JavaScript.
источник
Поскольку Clojure продолжает развиваться, он, безусловно, будет создавать все больше и больше своих собственных библиотек, что позволит упростить порты для других виртуальных машин. Что касается Clojure в JVM, я полагаю, что долгосрочная цель будет состоять в том, чтобы заменить большинство библиотек альтернативами Clojure (таким образом, имея эту неизменность по умолчанию, STM и т. Д.), Снизив уровень взаимодействия Java до самого низкого уровня примитивов и базы. такие объекты, как String. Это будет особенно актуально, когда платформа Java будет модульной с Jigsaw / OSGi в Java 8 (2013)
Тем не менее, я полагаю, что Clojure все еще захочет попробовать воспользоваться invokedynamic (введенным как инструкция байт-кода в Java 7) и примет довольно прагматичный подход к вопросу о том, какие библиотеки заменять, когда (если у Java очень хорошая библиотека, почему поменяй рано).
ПРИМЕЧАНИЕ: я не глубоко вовлечен в сообщество Clojure, так что это частично слухи / догадки.
источник