ClojureはJavaからどれだけ独立していますか?


13

私はClojureの世界には全く新しいです。Clojureの相互運用機能を介してすべてのJavaライブラリに簡単にアクセスできるという事実に感謝していますが、Clojureがどれだけ独立しているのか疑問に思っていました。

もちろん、コアライブラリはJavaで記述または公開されているため、Javaなどの相互運用性が常に必要となるAndroidなどのプラットフォームもあります。さらに、Clojureの文字列はJavaの文字列なので、文字列操作ライブラリがJavaのStringメソッドのラッパーになると期待しています。

しかし、他のタスクについては、ネイティブのClojureライブラリーを開発できなかった理由はわかりません。Http、日付操作、XML解析、テンプレート、JSONのシリアル化と逆シリアル化、OAuth、数学ライブラリなどを考えてください。

だから私の質問は:

ClojureはJavaエコシステムからどの程度独立しましたか?これらのタスクやその他のタスクのほとんどに独自の慣用的なライブラリがありますか?


ClojureCLRは、.NetフレームワークへのClojureポートです。
SLバース-モニカの復活

1
私の好みでは、Clojureコアの多くがJavaで実装されており、適切にブートストラップされていません。
SKロジック

@Barth:他のプラットフォームへのポートが存在することは知っていますが、これは質問についてあまり語っていません。CLRで実行できますが、独自のライブラリはまだありません。
アンドレア

1
@JeremyHeiler、もちろん健全な心の誰もがそのような目標を達成しようとします。問題は、なぜClojureが最初からこのように実装されなかったのかということです。Javaでコンパイラをコーディングするよりもはるかに簡単です。
SKロジック

1
@ SK-logic、私が言えることから、Clojureを適切にブートストラップするためにRich Hickeyが望んでいた機能は、成果を上げるのに時間がかかりました。つまり、彼は言語に悪影響を与える可能性のある設計決定、特定の機能がどのように機能するかを考えるのにより多くの時間が費やされる場合により良い結果をもたらす可能性のある決定を急ぎたくありませんでした。たぶん私は完全にオフになっていますが、それはこのテーマに関する私の見解です。
ジェレミーハイラー

回答:


2

Clojureは、そのコードベースが成長し、自然に多様化するにつれて、Javaライブラリからますます独立しています。Clojureの主な強みはJavaを呼び出すことができることです。したがって、将来Javaを使用しないClojureコードを見る可能性は低いでしょう。そうは言っても、Java libsを呼び出すことなく(コマンドライン引数、基本的なテキストの最小化など)、多くの開発を行ってきました。純粋なclojureライブラリのリストは次のとおりです。http://www.clojure-toolbox.com/


この答えを選んだのは、純粋なClojureライブラリのリポジトリへのリンクのおかげです。
アンドレア

7

Clojureはホスト言語として設計されており、現在3つの実装があります。

  • JVMでのClojure
  • .NET上のClojureCLR
  • JavaScriptでのClojureScript

ホストされた言語として設計されているため、イディオムは理にかなっている基盤となるプラットフォームのライブラリを活用するだけでなく、(コードレベルではなく使用法povから)移植可能な「コア」ライブラリのセットも提供します。時間が経つにつれて、3つのプラットフォームすべてで実行される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相互運用層をプリミティブとベースの最低レベルに下げることだと思いますStringなどのオブジェクト。これは、JavaプラットフォームがJava 8(2013)のjigsaw / OSGiでモジュール化されると特に当てはまります。

ただし、Clojureは、invokedynamic(Java 7でバイトコード命令として導入された)を引き続き活用しようとし、どのライブラリをいつ置き換えるか(Javaが完全に優れたライブラリである場合、なぜ早めに変更してください)。

注:私はClojureコミュニティに深く関わっていないので、これは部分的に伝聞/推測です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.