Seberapa independenkah Clojure dari Jawa?

13

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?

Andrea
sumber
ClojureCLR adalah port Clojure ke framework .Net.
SL Barth - Reinstate Monica
1
Untuk seleraku, terlalu banyak inti Clojure diimplementasikan di Jawa, itu tidak bootstrap dengan benar.
SK-logic
@Arth: Saya tahu port ke platform lain ada, tetapi ini tidak memberi tahu banyak tentang pertanyaan itu. Itu bisa berjalan di CLR dan masih belum memiliki perpustakaan sendiri.
Andrea
1
@JeremyHeiler, tentu saja siapa pun yang berakal sehat akan berusaha mencapai tujuan tersebut. Pertanyaannya adalah - mengapa Clojure tidak diimplementasikan dengan cara ini sejak awal? Ini jauh lebih mudah daripada pengkodean kompiler di Jawa.
SK-logic
1
@ SK-logic, Dari apa yang bisa saya katakan, fitur-fitur yang diinginkan Rich Hickey untuk bootstrap Clojure dengan benar telah mengambil waktu untuk membuahkan hasil. Artinya, dia tidak ingin terburu-buru membuat keputusan desain yang dapat mempengaruhi bahasa, keputusan yang berpotensi menghasilkan hasil yang lebih baik jika lebih banyak waktu dihabiskan untuk memikirkan bagaimana fitur tertentu dapat bekerja. Mungkin saya benar-benar tidak aktif, tetapi itu adalah pendapat saya tentang masalah ini.
Jeremy Heiler

Jawaban:

2

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/

wespiserA
sumber
Saya telah memilih jawaban ini berkat tautan ke repositori perpustakaan Clojure murni.
Andrea
7

Saya pikir adil untuk mengatakan bahwa Clojure dirancang sebagai bahasa yang di-host dan sekarang memiliki tiga implementasi:

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

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.

Sean Corfield
sumber
2

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.

Martijn Verburg
sumber