Tôi cố gắng để chạy hai chức năng thừa với các thuật toán tương tự, một ở Scala, người kia trong Clojure:Sự khác nhau giữa Scala REPL và Clojure REPL - biên dịch tốc độ
// Scala:
def factorial(n:Int) = (1 to n).foldLeft(1: BigInt)(_*_)
-
;; Clojure:
(defn factorial [x]
(reduce * (range 1N (inc x))))
Lần đầu tiên tôi nhập hàm vào REPL, một hàm Clojure đánh giá (định nghĩa hàm, không tính giai thừa) mà không có bất kỳ sự chậm trễ đáng chú ý nào; trong khi scala chỉ dừng lại trong một thời gian ngắn. (Mặc dù rất, rất ngắn, vẫn đáng chú ý.)
Khi tôi áp dụng hàm để tính giai thừa, cả hai đều trả lại kết quả rất nhanh.
Tôi muốn hiểu rõ hơn về REPL. Có bất kỳ sự khác biệt nào giữa hai REPL không? Là Scala REPL một REPL thực?
Hmm. Tôi đã nghĩ rằng nếu một tương tác dòng lệnh liên quan đến các bước đọc, đánh giá và in riêng biệt, điều đó là đủ cho REPL-Ness, cho dù ngôn ngữ có đồng âm hay không. Tôi sẽ không gọi cho ai đó thông dịch nếu nó biên dịch trước khi thực hiện. Tất nhiên, có tất cả các loại trường hợp trung gian giữa "thực hiện một biểu thức tại một thời điểm, cái khác" và "dịch và tối ưu hóa các phần lớn mã xuống một số loại ngôn ngữ 'máy', và sau đó thực hiện". Tuy nhiên, tôi không nghĩ rằng bất kỳ điều này quan trọng lắm! – Mars
Related: http://stackoverflow.com/questions/5671214/is-lisp-the-only-language-with-repl –