Mục đích của câu hỏi của tôi không phải là bắt đầu một cuộc chiến nảy lửa, mà là để xác định xem mỗi ngôn ngữ là "công cụ tốt nhất cho công việc trong hoàn cảnh nào."
Tôi đã đọc một số cuốn sách về Clojure (Clojure lập trình , Clojure thực tế , Niềm vui của Clojure và ấn bản Manning Early Access của Clojure in Action ), và tôi nghĩ đó là một ngôn ngữ tuyệt vời. Tôi hiện đang đọc Let Over Lambda , phần lớn liên quan đến các macro Lisp chung, và nó cũng là một ngôn ngữ rất thú vị.
Tôi không phải là một chuyên gia về Lisp (nhiều người mới học), nhưng họ ngôn ngữ này làm tôi mê mẩn, cũng như lập trình hàm nói chung.
Ưu điểm của Clojure (và nhược điểm của "những người khác"):
Chạy trên JVM.
JVM là một môi trường ngôn ngữ rất ổn định, hiệu suất cao, đáp ứng khá tốt ước mơ "Viết một lần, chạy [hầu như] ở bất cứ đâu" của Sun. Tôi có thể viết mã trên Macbook Pro của mình, biên dịch nó thành tệp JAR có thể thực thi và sau đó chạy nó trên Linux và Microsoft Windows với một ít thử nghiệm bổ sung.
JVM (Điểm phát sóng và các dịch vụ khác) hỗ trợ thu thập rác chất lượng cao, biên dịch và tối ưu hóa chỉ trong thời gian rất hiệu quả. Nơi mà chỉ vài năm trước, tôi đã viết mọi thứ phải chạy nhanh bằng C, bây giờ tôi không ngần ngại làm như vậy bằng Java.
Mô hình tiêu chuẩn, đơn giản, đa luồng. Common Lisp có gói đa luồng tiêu chuẩn không?
Breaks lên sự đơn điệu của tất cả những dấu ngoặc đơn với
[]
,{}
và#{}
, mặc dù các chuyên gia Common Lisp có thể sẽ nói với tôi rằng với các macro đọc, bạn có thể thêm những để CL.
Nhược điểm của Clojure :
- Chạy trên JVM.
- Không có đệ quy đuôi hoặc liên tục. Common Lisp có hỗ trợ liên tục không? Tôi tin rằng chương trình yêu cầu hỗ trợ cho cả hai.
Ưu điểm của những người khác (đặc biệt là Lisp thông thường) (và nhược điểm của Clojure):
Macro trình đọc do người dùng xác định.
Những lợi thế khác?
Suy nghĩ? Sự khác biệt khác?