任何Clojure实现都可以快速启动吗?

Vi.*_*Vi. 5 performance clojure

$ time java -jar clojure-1.4.0.jar -e '(println "Hello world")'
Hello world

real    0m4.586s

$ time python clojure.py  -c '(py/print "Hello world")'

real    0m14.690s

$ time mono Clojure.Main.exe -e '(println "hello world")'
hello world

real    0m4.843s

/* clojure-metal is not tested due to not being written at the moment */
Run Code Online (Sandbox Code Playgroud)

Clojure启动时间可以很小,就像我运行Perl或Python脚本一样吗?慢启动时间是基础框架或Clojure的问题(可以迟早修复)还是设计?

注意:我已经了解了start-persistent-server-than-connect-to-it的解决方法.

mik*_*era 3

启动时间主要是因为 Clojure 本身在初始化方面所做的工作。其中一些任务非常重要,例如加载和编译核心 Clojure 命名空间。在不同的平台实现上运行并不会真正改变这一点。

然而,未来有很大的优化潜力:

  • Clojure 本身的大部分内容可以提前编译
  • Clojure 编译器本身的性能可以得到增强
  • 延迟加载和/或编译可以减少感知的延迟(可能是最大的胜利:大多数代码不需要 clojure.core 和其他依赖项中的所有命名空间,或者至少不需要立即)
  • 非常聪明的人可能会弄清楚如何进行并行加载和编译

请注意,尽管 JVM 经常(不公正地)受到指责,但 JVM 在这里基本上无关紧要:现代 JVM 的启动时间约为 0.1 秒。

实际上,我在用 Clojure 编写的 GUI 应用程序中利用了这一点:通过使用纯 Java 方法编写启动代码main,您可以立即显示启动屏幕和 GUI 的第一个屏幕,然后加载 Clojure 以及其余部分后台应用程序代码。