我试图用相同的算法运行两个因子的功能,一个Scala中,对方用Clojure:差异 - 编译速度
// Scala:
def factorial(n:Int) = (1 to n).foldLeft(1: BigInt)(_*_)
-
;; Clojure:
(defn factorial [x]
(reduce * (range 1N (inc x))))
当我第一次进入REPL的函数时,Clojure会评估(函数定义,而不是计算阶乘),没有任何明显的延迟;而斯卡拉的一个短暂停顿了一会儿。 (虽然非常非常短,但仍然引人注意)。
当我应用函数来计算阶乘时,两者都返回结果的速度非常快。
我想对REPL有一个基本的了解。两个REPL有什么区别? Scala REPL是一个真正的REPL吗?
嗯。如果命令行交互涉及单独的读取,评估和打印步骤,那么我认为这对于REPL性能来说已经足够了,无论这种语言是同相还是不同步。如果在执行之前编译,我不会调用某个解释器。当然,在“一次一个,一个接一个地执行一个表达式”和“将大块代码翻译并优化成某种'机器'语言,然后执行”之间的各种中间情况。但是,我不认为这很重要! – Mars
相关:http://stackoverflow.com/questions/5671214/is-lisp-the-only-language-with-repl –