Saya cukup baru di dunia Clojure. Saya menghargai kenyataan bahwa seseorang memiliki akses yang mudah ke semua perpustakaan Java melalui fitur interlo Clojure, tapi saya bertanya-tanya berapa banyak Clojure berdiri di atas kakinya sendiri.
Tentu saja ada beberapa platform, seperti Android, di mana interoperabilitas dengan Java akan selalu diperlukan, karena perpustakaan inti ditulis atau diekspos di Jawa. Selain itu, karena string Clojure adalah string Java, saya berharap perpustakaan manipulasi string menjadi pembungkus pada metode Java String.
Tetapi untuk tugas-tugas lain saya tidak melihat alasan mengapa perpustakaan Clojure asli tidak dapat dikembangkan. Pikirkan Http, manipulasi tanggal, parsing XML, templating, serialisasi dan deserialisasi JSON, OAuth, perpustakaan matematika dan sebagainya.
Jadi pertanyaan saya adalah:
Sejauh mana Clojure menjadi mandiri dari ekosistem Jawa? Apakah ia memiliki perpustakaan idiomatik sendiri untuk sebagian besar dari ini dan tugas-tugas lain?
Jawaban:
Clojure menjadi semakin independen dari perpustakaan Java saat basis kodenya tumbuh dan terdiversifikasi secara alami. Kekuatan utama Clojure adalah ia dapat memanggil Java, jadi untuk melihat kode Clojure di masa depan yang tidak menggunakan java tidak mungkin. Yang sedang berkata, saya telah melakukan banyak pengembangan tanpa memanggil Java libs (argumen baris perintah, minupulasi teks dasar, dll). Berikut daftar pustaka clojure murni: http://www.clojure-toolbox.com/
sumber
Saya pikir adil untuk mengatakan bahwa Clojure dirancang sebagai bahasa yang di-host dan sekarang memiliki tiga implementasi:
Karena dirancang sebagai bahasa yang di-host, idiomnya adalah untuk memanfaatkan pustaka platform yang mendasari di mana masuk akal tetapi juga menyediakan satu set pustaka "inti" yang portabel (dari pov penggunaan, tidak harus pada tingkat kode). Saya berharap dari waktu ke waktu kita akan melihat lebih banyak perpustakaan Clojure berjalan di ketiga platform, di mana masuk akal.
Saya memelihara clojure.java.jdbc dan clj-time (pembungkus di sekitar JodaTime) sehingga tidak masuk akal untuk menggunakan yang ada di versi * CLR atau * Script tetapi pustaka yang kompatibel dengan API di ruang nama yang berbeda mungkin merupakan suatu kemungkinan.
Banyak pustaka Clojure "murni" harus langsung digunakan pada versi * CLR atau * Script.
Untuk pertanyaan OP: "Clojure-the-language" cukup portabel tetapi "Clojure-the-implementasi" sengaja terikat ke ekosistem Java, seperti ClojureCLR ke .NET dan ClojureScript ke JavaScript.
sumber
Ketika Clojure terus berevolusi, ia akan membangun lebih banyak perpustakaannya sendiri, memungkinkan port yang lebih mudah ke VM lain. Sejauh Clojure pada JVM yang bersangkutan saya percaya tujuan jangka panjang akan menggantikan sebagian besar libs dengan alternatif Clojure (dengan demikian memiliki kekekalan itu secara default, STM dll), membawa lapisan Java interop ke tingkat primitif dan basis terendah. benda seperti String. Ini akan benar terutama setelah platform Java dimodulasi dengan jigsaw / OSGi di Java 8 (2013)
Namun, saya percaya bahwa Clojure masih ingin mencoba dan memanfaatkan invokedynamic (diperkenalkan sebagai instruksi bytecode di Java 7) dan akan mengambil pendekatan yang cukup pragmatis tentang perpustakaan mana yang akan diganti ketika (jika Jawa memiliki lib yang sangat bagus, lalu mengapa ubah lebih awal).
CATATAN: Saya tidak terlibat secara mendalam dalam komunitas Clojure, jadi ini sebagian kabar angin / tebakan.
sumber