Tôi không chắc liệu điều này có thuộc về StackOverflow hay trong nhóm Clojure Google hay không. Nhưng nhóm có vẻ bận rộn thảo luận numeric improvements for Clojure 1.2, vì vậy tôi sẽ thử tại đây:Hiệu suất ngắt số clojure
http://shootout.alioth.debian.org/ có một số điểm chuẩn hiệu suất cho các ngôn ngữ khác nhau.
Tôi nhận thấy rằng Clojure bị thiếu, vì vậy tôi đã tạo phiên bản Clojure của n-body problem.
Mã nhanh nhất tôi đã có thể sản xuất có thể found here, và benchmark nó dường như được nói rằng cho số crunching Clojure là
- yếu tố ~ 10 nhanh hơn Python/Ruby/Perl
- yếu tố ~ 4 chậm hơn so với C/Java/Scala/Ada
- xấp xỉ ngang bằng với OCaml, Erlang và Go
tôi khá hài lòng với mức độ của hiệu suất.
Câu hỏi của tôi để các bậc thầy Clojure là
- Có những cải tiến rõ ràng tôi đã bỏ lỡ, hoặc là về tốc độ hay về mã ngắn gọn hoặc dễ đọc (không có tốc độ hy sinh)?
- Bạn có cho rằng đây là đại diện cho hiệu suất Clojure so với Python/Ruby/Perl trên một mặt và Java/C ở mặt khác không?
Cập nhật
More Clojure 1.1 chương trình benchmark cho loạt đá luân lưu here, bao gồm các vấn đề n thân.
Tôi phải tưởng tượng JVM sẽ đóng vai trò lớn ở đây. Bạn đang sử dụng JVM nào? Bạn đang sử dụng cùng một như loạt đá luân lưu? –
Java 1.6.0, java tiêu chuẩn đi kèm với OS X 10.6. Đó là khoảng cùng một JVM (tôi: 1.6.0_20, loạt đá luân lưu: 1.6.0_18) nhưng máy tính khác so với loạt đá luân lưu. Tôi chạy cả Clojure và triển khai thực hiện shootout Java cục bộ. Tôi ước tính hiệu suất tương đối bằng cách sử dụng Java làm cơ sở và mở rộng kết quả loạt đá luân lưu cho phù hợp. –
Mã của bạn trông khá tốt. Với những cải tiến nguyên thủy trong 1.2 tôi hy vọng bạn có thể nhận được khá gần với thời gian Java. Bạn đã thử chạy nó thông qua một hồ sơ? Nghi ngờ của tôi là một cái gì đó ở đâu đó là thêm một đấm bốc hoặc chức năng cuộc gọi trên đó là làm tổn thương bạn. – mikera