Clojure는 Java와 얼마나 독립적입니까?


13

나는 Clojure 세계에 새로운 사람입니다. Clojure interop 기능을 통해 모든 Java 라이브러리에 쉽게 액세스 할 수 있다는 사실에 감사하지만 Clojure가 자신의 다리에 얼마나 많은지 궁금합니다.

물론 핵심 라이브러리는 Java로 작성되거나 공개되기 때문에 Java와의 상호 운용성이 항상 필요한 Android와 같은 일부 플랫폼이 있습니다. 또한 Clojure 문자열은 Java 문자열이므로 문자열 조작 라이브러리가 Java 문자열 메소드의 랩퍼가 될 것으로 예상합니다.

그러나 다른 작업의 경우 네이티브 Clojure 라이브러리를 개발할 수없는 이유가 없습니다. Http, 날짜 조작, XML 파싱, 템플릿, JSON 직렬화 및 역 직렬화, OAuth, 수학 라이브러리 등을 생각하십시오.

그래서 내 질문은 :

Clojure가 Java 생태계와 얼마나 독립적이 되었습니까? 대부분의 이러한 작업과 다른 작업을위한 고유 한 관용 라이브러리가 있습니까?


ClojureCLR 은 .Net 프레임 워크에 대한 Clojure 포트입니다.
SL Barth-복원 모니카

1
필자의 취향에 따라 너무 많은 Clojure 코어가 Java로 구현되어 제대로 부트 스트랩되지 않았습니다.
SK-logic

@Barth : 다른 플랫폼으로의 포트가 있다는 것을 알고 있지만 질문에 대해서는별로 설명하지 않습니다. CLR에서 실행될 수 있으며 여전히 자체 라이브러리가 없습니다.
Andrea

1
@JeremyHeiler는 물론 건전한 정신을 가진 사람이라면 누구나 그러한 목표를 달성하려고 노력할 것입니다. 문제는 왜 Clojure가 처음부터 이런 식으로 구현되지 않았습니까? Java로 컴파일러를 코딩하는 것보다 훨씬 쉽습니다.
SK-logic

1
@ SK-logic, 내가 말할 수있는 것으로부터, Clojure를 올바르게 부트 스트랩하기 위해 Rich Hickey가 원했던 기능이 실현되기까지 시간이 걸렸습니다. 즉, 그는 언어에 부정적인 영향을 줄 수있는 디자인 결정, 특정 기능의 작동 방식에 대해 더 많은 시간을 소비 할 경우 더 나은 결과를 얻을 수있는 결정을 서두르고 싶지 않았습니다. 어쩌면 나는 완전히 벗어 났지만 그것은 주제에 대한 나의 취향입니다.
Jeremy Heiler

답변:


2

코드베이스가 커지고 자연스럽게 다양 해짐에 따라 Clojure는 Java 라이브러리와 점점 더 독립적이되고 있습니다. Clojure의 주요 강점은 Java를 호출 할 수 있다는 점입니다. 따라서 앞으로 Java를 사용하지 않는 Clojure 코드를 볼 수 없을 것입니다. 즉, Java libs (명령 줄 인수, 기본 텍스트 축소 등)를 호출하지 않고 많은 개발을 수행했습니다. 순수 클로저 라이브러리 목록은 다음과 같습니다. http://www.clojure-toolbox.com/


순수한 Clojure 라이브러리의 저장소에 대한 링크 덕분 에이 답변을 선택했습니다.
Andrea

7

Clojure가 호스팅 언어로 설계되었으며 이제 세 가지 구현이 있다고 말하는 것이 공정하다고 생각합니다.

  • JVM의 Clojure
  • .NET의 ClojureCLR
  • JavaScript의 ClojureScript

이 언어는 호스팅 된 언어로 설계되었으므로 기본 플랫폼의 라이브러리를 이해하는 것이 좋으며 이식 가능한 (핵심 수준의 코드가 아닌) 사용 가능한 "핵심"라이브러리 세트를 제공해야합니다. 시간이 지남에 따라 우리는 세 가지 플랫폼 모두에서 더 많은 Clojure 라이브러리가 실행되는 것을 보게 될 것으로 예상합니다.

clojure.java.jdbc 및 clj-time (JodaTime을 감싸는 래퍼)을 유지하므로 * CLR 또는 * Script 버전의 라이브러리를 사용하는 것이 타당하지 않지만 다른 네임 스페이스의 API 호환 라이브러리가 가능할 수 있습니다.

많은 "순수한"Clojure 라이브러리는 * CLR 또는 * Script 버전에서 이미 사용하기 간단해야합니다.

OP의 질문에 따르면 : "Clojure-the-language"는 이식성이 뛰어나지 만 "Clojure-the-implementation"은 의도적으로 Java 생태계와 밀접한 관련이 있습니다. ClojureCLR은 .NET, ClojureScript는 JavaScript입니다.


2

Clojure가 계속 발전함에 따라 점점 더 많은 자체 라이브러리를 구축하여 다른 VM으로 쉽게 포트를 제공 할 수 있습니다. JVM의 Clojure에 관한 한 장기 목표는 대부분의 라이브러리를 Clojure 대안으로 대체하여 (기본적으로 STM 등의 불변성을 갖음) Java interop 계층을 가장 낮은 수준의 프리미티브 및 기본으로 가져 오는 것입니다 String과 같은 객체. Java 8 (2013)에서 Java 플랫폼이 퍼즐 / OSGi로 모듈화되면 특히 그렇습니다.

그러나 Clojure는 여전히 Java 7의 바이트 코드 명령으로 도입 된 invokedynamic을 활용하려고 시도 할 때 (Java가 완벽하게 좋은 라이브러리를 가지고 있다면) 라이브러리를 대체 할 실질적인 접근 방식을 취할 것이라고 믿습니다. 일찍 변경).

참고 : 저는 Clojure 커뮤니티에 깊이 관여하지 않았기 때문에 이것은 부분적으로 의견이나 추측입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.