2013-04-09 15 views
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 */ 

Czy czas uruchamiania Clojure może być niewielki, tak jak podczas uruchamiania skryptów w języku Perl lub Python? Czy powolny czas uruchamiania jest podstawowym frameworkiem systemu lub Clojure (który może zostać naprawiony wcześniej czy później) lub z założenia?Czy jakakolwiek implementacja Clojure może się szybko rozpocząć?

Uwaga: już wiem o obejściu problemu związanym z uruchamianiem na bieżąco z serwerem niż z połączeniem z tym.

+0

AOT clojure JAR w moim systemie wziąć tylko 1 drugi – Ankur

Odpowiedz

3

Czas rozruchu wynika głównie z pracy wykonywanej przez Clojure w zakresie inicjalizacji. Niektóre z tych zadań są dość znaczące, np. ładowanie i kompilowanie rdzeniowych przestrzeni nazw Clojure. Uruchomienie na różnych implementacjach platform tak naprawdę nie zmieni tego.

Jednakże, istnieje duży potencjał do tego, aby być zoptymalizowane w przyszłości:

  • Duża część samej Clojure mogłoby być przed-of-time skompilowany
  • Wydajność kompilatora Clojure sam mógłby być enhanced
  • Leniwe ładowanie i/lub kompilacja może zmniejszyć postrzegane opóźnienie (prawdopodobnie największą wygraną: większość kodu nie potrzebuje wszystkich przestrzeni nazw w clojure.core i innych zależnościach, lub przynajmniej nie od razu)
  • Ktoś bardzo sprytny może wymyślić jak wykonać równoległe ładowanie i kompilowanie

Należy zauważyć, że chociaż JVM jest często (niesłusznie) obwiniane, JVM jest w dużej mierze nieistotna tutaj: nowoczesne maszyny JVM mają czas uruchomienia około 0,1 sekundy.

Rzeczywiście wykorzystuję to dla aplikacji GUI napisanych w Clojure: pisząc kod startowy w czystej Javie metodą main, możesz mieć ekran powitalny i pierwszy ekran GUI pojawiają się prawie natychmiast, a następnie załadować Clojure wzdłuż z resztą kodu aplikacji w tle.

+0

Ograniczeniem JVM jest że obiekty muszą być skopiowane podczas inicjalizacji, "Nie można osadzić żadnych stałych złożonych w kodzie bajtowym, nawet w tablicach." https://groups.google.com/forum/#!topic/clojure/PsgKVlWZjOw – noisesmith

4

ClojureScript może uruchomić się dość szybko. Liczba ta jest trochę myląca, ponieważ usuwa nieczytelny kod podczas kompilacji. Oznacza to, że ten fragment zostanie skompilowany do zaledwie print("hello world");. Oto co mam na moim komputerze:

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

real 0m0.466s 

Dla porównania, oto co mi się stosując normalną Clojure:

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

real 0m1.369s 
Powiązane problemy