Насколько независим Clojure от Java?

13

Я совершенно новичок в мире Clojure. Я ценю тот факт, что каждый имеет легкий доступ ко всем библиотекам Java с помощью функций взаимодействия Clojure, но мне было интересно, насколько Clojure стоит на своих ногах.

Конечно, есть некоторые платформы, такие как Android, где совместимость с Java всегда будет требоваться, потому что основные библиотеки написаны или представлены на Java. Более того, поскольку строки Clojure являются строками Java, я ожидаю, что библиотеки для работы со строками станут оберткой для методов Java String.

Но для других задач я не вижу причин, по которым не могут быть разработаны нативные библиотеки Clojure. Подумайте о Http, манипулировании датами, разборе XML, шаблонах, сериализации и десериализации JSON, OAuth, математических библиотеках и так далее.

Итак, мой вопрос:

Как далеко Clojure стал независимым от экосистемы Java? Есть ли у него свои идиоматические библиотеки для большинства из этих и других задач?

Andrea
источник
ClojureCLR - это порт Clojure для платформы .Net.
SL Barth - Восстановить Монику
1
На мой вкус, слишком много ядра Clojure реализовано на Java, оно не загружено должным образом.
SK-logic
@ Барт: я знаю, что порты для других платформ существуют, но это мало что говорит по этому вопросу. Он может работать на CLR и при этом не иметь собственных библиотек.
Андреа
1
@ JeremyHeiler, конечно, любой здравомыслящий человек попытается достичь такой цели. Вопрос в том, почему Clojure не был реализован таким образом с самого начала? Это намного проще, чем кодировать компилятор в Java.
SK-logic
1
@ SK-logic, из того, что я могу сказать, функции, которые Рич Хикки хотел, чтобы правильно запустить Clojure, заняли время, чтобы воплотиться в жизнь. То есть он не хотел спешить с проектными решениями, которые могли бы неблагоприятно повлиять на язык, решениями, которые могли бы потенциально дать лучшие результаты, если бы больше времени было потрачено на размышления о том, как могут работать определенные функции. Может быть, я полностью выключен, но это мой взгляд на предмет.
Джереми Хейлер

Ответы:

2

Clojure становится все более независимым от библиотек Java, поскольку его кодовая база растет и естественным образом диверсифицируется. Основным преимуществом Clojure является то, что он может вызывать Java, поэтому маловероятно, чтобы в будущем можно было увидеть код Clojure, не использующий Java. Тем не менее, я проделал большую часть разработки без вызова Java-библиотек (аргументы командной строки, базовая минипуляция текста и т. Д.). Вот список чистых библиотек clojure: http://www.clojure-toolbox.com/

wespiserA
источник
Я выбрал этот ответ благодаря ссылке на репозиторий чистых библиотек Clojure.
Андреа
7

Я думаю, что было бы справедливо сказать, что Clojure разработан как размещенный язык, и теперь у него есть три реализации:

  • Clojure на JVM
  • ClojureCLR на .NET
  • ClojureScript на JavaScript

Поскольку он спроектирован как размещенный язык, идиома состоит в том, чтобы использовать библиотеки базовой платформы там, где это имеет смысл, а также предоставлять набор «базовых» библиотек, которые являются переносимыми (из pov использования, не обязательно на уровне кода). Я ожидаю, что со временем мы увидим гораздо больше библиотек Clojure, работающих на всех трех платформах, где это имеет смысл.

Я поддерживаю clojure.java.jdbc и clj-time (обертку вокруг JodaTime), поэтому не имеет смысла использовать их в версиях * CLR или * Script, но API-совместимые библиотеки в разных пространствах имен могут быть возможны.

Многие из «чистых» библиотек Clojure должны быть простыми для использования в версиях * CLR или * Script.

На вопрос ОП: «Clojure-the-language» довольно переносим, ​​но «Clojure-the-реализация» намеренно привязана к экосистеме Java, как ClojureCLR для .NET и ClojureScript для JavaScript.

Шон Корфилд
источник
2

Поскольку Clojure продолжает развиваться, он, безусловно, будет создавать все больше и больше своих собственных библиотек, что позволит упростить порты для других виртуальных машин. Что касается Clojure в JVM, я полагаю, что долгосрочная цель будет состоять в том, чтобы заменить большинство библиотек альтернативами Clojure (таким образом, имея эту неизменность по умолчанию, STM и т. Д.), Снизив уровень взаимодействия Java до самого низкого уровня примитивов и базы. такие объекты, как String. Это будет особенно актуально, когда платформа Java будет модульной с Jigsaw / OSGi в Java 8 (2013)

Тем не менее, я полагаю, что Clojure все еще захочет попробовать воспользоваться invokedynamic (введенным как инструкция байт-кода в Java 7) и примет довольно прагматичный подход к вопросу о том, какие библиотеки заменять, когда (если у Java очень хорошая библиотека, почему поменяй рано).

ПРИМЕЧАНИЕ: я не глубоко вовлечен в сообщество Clojure, так что это частично слухи / догадки.

Мартейн Вербург
источник