Non sono sicuro se questo appartiene a StackOverflow o nel gruppo Clojure Google. Ma il gruppo sembra essere occupato a discutere su numeric improvements for Clojure 1.2, quindi proverò qui:Clojure numero crunch prestazioni
http://shootout.alioth.debian.org/ ha un numero di benchmark delle prestazioni per varie lingue.
Ho notato che mancava Clojure, quindi ho creato una versione Clojure di n-body problem.
Il codice più veloce sono stato in grado di produrre può essere found here, e benchmarking sembra voler dire che per macinare numeri Clojure è
- fattore ~ 10 più veloce di Python/Rubino/Perl
- fattore ~ 4 più lento di C/Java/Scala/Ada
- circa alla pari con OCaml, Erlang e Go
sono abbastanza contento con quel livello di prestazioni.
La mia domanda per i guru Clojure è
- Vi sono miglioramenti evidenti che ho perso, sia in termini di velocità o in termini di brevità codice o la leggibilità (senza sacrificare la velocità)?
- Lo consideri rappresentativo delle prestazioni Clojure rispetto a Python/Ruby/Perl da una parte e Java/C dall'altra?
Aggiornamento
Più Clojure 1.1 programmi di riferimento per la sparatoria here, tra cui il problema n-corpo.
Devo immaginare che la JVM abbia un ruolo importante qui. Che JVM stai usando? Stai usando lo stesso tipo della sparatoria? –
Java 1.6.0, il java standard fornito con OS X 10.6. È approssimativamente la stessa JVM (io: 1.6.0_20, shootout: 1.6.0_18) ma computer diverso rispetto alla sparatoria. Ho eseguito localmente sia Clojure che l'implementazione Java dello shootout. Ho stimato le prestazioni relative utilizzando Java come base di riferimento e ridimensionando di conseguenza i risultati delle prove. –
Il tuo codice sembra abbastanza buono. Con i miglioramenti primitivi in 1.2, mi aspetto che tu possa essere abbastanza vicino al tempo di Java. Hai provato a eseguirlo attraverso un profiler? Il mio sospetto è che qualcosa da qualche parte stia aggiungendo un overhead di boxe o funzione che ti fa male. – mikera