5
$ 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 */

Perl や Python スクリプトを実行するときのように、Clojure の起動時間が短くなることはありますか? 起動時間が遅いのは、基礎となるフレームワークまたは Clojure の問題 (遅かれ早かれ修正される可能性があります) によるものですか、それとも設計によるものですか?

注: start-persistent-server-than-connect-to-it の回避策については既に知っています。

4

2 に答える 2

4

ClojureScript は非常に高速に起動できます。ただし、コンパイル時にデッド コードの削除が行われるため、この数値は少し誤解を招きます。つまり、このスニペットはコンパイルされてprint("hello world");. これが私のマシンで得られるものです:

$ echo '(js/print "hello world")' > hello.cljs
$ cljsc hello.cljs '{:optimizations :advanced}' > hello.js
$ time rhino hello.js 
hello world

real    0m0.466s

比較のために、通常の clojure を使用して取得したものを次に示します。

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

real    0m1.369s
于 2013-04-10T15:08:18.760 に答える
3

起動時間のほとんどは、Clojure 自体が初期化に関して行う作業によるものです。これらのタスクのいくつかは、コア Clojure 名前空間のロードとコンパイルなど、非常に重要です。異なるプラットフォームの実装で実行しても、これは実際には変わりません。

ただし、これが将来的に最適化される大きな可能性があります。

  • Clojure 自体の大部分は事前にコンパイルできる
  • Clojure コンパイラ自体のパフォーマンスが向上する可能性がある
  • 遅延読み込みおよび/またはコンパイルにより、認識されるレイテンシーを削減できます (おそらく最大の利点: ほとんどのコードは、clojure.core およびその他の依存関係のすべての名前空間を必要としないか、少なくともすぐには必要ありません)
  • 非常に賢い人が並列ロードとコンパイルを行う方法を理解するかもしれません

JVM はしばしば (不当に) 非難されますが、ここでは JVM はほとんど無関係であることに注意してください。最新の JVM の起動時間は約 0.1 秒です。

私は実際にこれを Clojure で記述された GUI アプリに利用しています。mainメソッドを使用して純粋な Java で起動コードを記述することにより、スプラッシュ スクリーンと GUI の最初のスクリーンをすぐに表示し、残りの部分と一緒に Clojure をロードできます。バックグラウンドでのアプリケーション コード。

于 2013-04-10T02:39:47.210 に答える