Наскільки незалежний Clojure від Java?


13

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

Звичайно, є деякі платформи, як-от Android, де сумісність з Java завжди буде потрібна, оскільки основні бібліотеки написані або відкриті на Java. Більше того, оскільки рядки Clojure - це рядки Java, я очікую, що бібліотеки маніпуляцій з рядками стануть обгорткою методів Java String.

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

Отже, моє питання:

Наскільки далеко Clojure став незалежним від екосистеми Java? Чи є в ньому власні ідіоматичні бібліотеки для більшості цих та інших завдань?



1
На мій смак, занадто багато ядра Clojure реалізовано на Java, воно не завантажується належним чином.
SK-логіка

@Barth: Я знаю, що порти на інших платформах існують, але це не дуже говорить про це. Він може працювати на CLR і не мати власних бібліотек.
Андреа

1
@ JeremyHeiler, звичайно, хтось із розумом намагатиметься досягти такої мети. Питання - чому Clojure не був реалізований таким чином з самого початку? Це набагато простіше, ніж кодування компілятора на Java.
SK-логіка

1
@ SK-логіка. З того, що я можу сказати, функції, які бажав Річ Хікі, щоб належним чином запустити Clojure, знадобився час, щоб здійснитися. Тобто він не хотів поспішати з дизайнерськими рішеннями, які можуть негативно вплинути на мову, рішеннями, які потенційно можуть дати кращі результати, якщо більше часу буде витрачено на роздуми про те, як певні функції можуть працювати. Можливо, я повністю відключений, але це моя позиція з цього приводу.
Джеремі Хайлер

Відповіді:


2

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


Я вибрав цю відповідь завдяки посиланням на сховище чистої бібліотеки Clojure.
Андреа

7

Я думаю, що справедливо сказати, що Clojure розроблений як розміщена мова і тепер він має три реалізації:

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

Оскільки вона розроблена як розміщена мова, ідіома полягає у використанні бібліотек базової платформи, де це має сенс, але також надавати набір "основних" бібліотек, які є портативними (від використання pov, не обов'язково на рівні коду). Я очікую, що з часом ми побачимо набагато більше бібліотек Clojure, що працюють на всіх трьох платформах, де це має сенс.

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

Багато "чистих" бібліотек Clojure повинні бути просто використані у версіях * CLR або * Script вже.

На питання ОП: "Мова Clojure" є досить портативною, але "Clojure-впровадження" навмисно пов'язана з екосистемою Java, як і ClojureCLR до .NET і ClojureScript до JavaScript.


2

У міру того, як Clojure продовжує розвиватися, він, безумовно, будуватиме все більше і більше власних бібліотек, дозволяючи спростити порти до інших віртуальних машин. Що стосується Clojure на JVM, я вважаю, що довгостроковою метою буде замінити більшість ліб альтернативами Clojure (тим самим маючи цю незмінність за замовчуванням, STM тощо), знижуючи рівень інтеропа Java на найнижчий рівень примітивів та бази такі об'єкти, як String. Це особливо актуально, коли платформа Java буде модульована за допомогою лобзика / OSGi в Java 8 (2013)

Однак я вважаю, що Clojure все ж захоче спробувати скористатись викликом динаміки (введений як Java-інструкція в Java 7) і застосувати досить прагматичний підхід щодо того, які бібліотеки потрібно замінити, коли (якщо Java має ідеально хороший зв'язок, то чому змінити її рано).

ПРИМІТКА: Я глибоко не задіяний у спільноті Clojure, тому це частково є чутками / здогадками.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.