Maksud dari pertanyaan saya bukanlah untuk memulai perang api, melainkan untuk menentukan dalam situasi apa setiap bahasa adalah "alat terbaik untuk pekerjaan itu".
Saya telah membaca beberapa buku tentang Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure , dan Manning Early Access edisi Clojure in Action ), dan menurut saya itu adalah bahasa yang fantastis. Saat ini saya membaca Let Over Lambda yang sebagian besar berhubungan dengan makro Common Lisp, dan, itu juga, merupakan bahasa yang sangat menarik.
Saya bukan ahli Lisp (lebih dari seorang pemula), tetapi keluarga bahasa ini membuat saya terpesona, seperti halnya pemrograman fungsional, pada umumnya.
Keuntungan dari Clojure (dan kerugian dari "orang lain"):
Berjalan di JVM.
JVM adalah lingkungan bahasa berperforma tinggi yang sangat stabil yang memenuhi impian Sun tentang "Menulis sekali, jalankan [hampir] di mana saja". Saya dapat menulis kode di Macbook Pro saya, mengkompilasinya menjadi file JAR yang dapat dieksekusi, dan kemudian menjalankannya di Linux dan Microsoft Windows dengan sedikit pengujian tambahan.
JVM (Hotspot, dan lainnya) mendukung pengumpulan sampah berkualitas tinggi serta kompilasi dan pengoptimalan just-in-time yang sangat baik. Dimana hanya beberapa tahun yang lalu, saya menulis semua yang harus berjalan cepat di C, sekarang saya tidak ragu melakukannya di Java.
Model standar, sederhana, multithreading. Apakah Common Lisp memiliki paket multithreading standar?
Hancurkan monoton dari semua tanda kurung itu dengan
[]
,,{}
dan#{}
, meskipun pakar Common Lisp mungkin akan memberi tahu saya bahwa dengan makro pembaca, Anda dapat menambahkannya ke CL.
Kerugian dari Clojure :
- Berjalan di JVM.
- Tidak ada rekursi atau kelanjutan ekor. Apakah Common Lisp mendukung kelanjutan? Skema membutuhkan dukungan untuk keduanya, saya yakin.
Keuntungan Orang Lain (Lisp Umum, khususnya) (dan kerugian Clojure):
Makro pembaca yang dapat ditentukan pengguna.
Keunggulan lainnya?
Pikiran? Perbedaan lainnya?