2009-10-20 15 views

risposta

12

Vedere http://benchmarksgame.alioth.debian.org/. Java è molto veloce, Scala quasi altrettanto veloce. JRuby è 10-30 volte più lento. Groovy è slow too.

+0

Che strano! Il testo dice "http://shootout.alioth.debian.org/" ma non è qui che il link ti porta ... – igouy

+0

"JRuby è 10-30 volte più lento" - Senza preoccuparsi del multicore, il gioco dei benchmark mostra il più veloce 2x più lento e il più lento 87x più lento http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=jruby&lang2=scala&box=1 – igouy

+0

@igouy: Ho finalmente risolto il collegamento, 19 mesi dopo. :-( –

1

Java.

In realtà, anche se, per la maggior parte, la differenza di velocità sarà trascurabile. Le lingue statiche saranno più veloci delle lingue dinamiche, ma non di molto.

+2

Mentre Java è più veloce, spesso è di un * enorme * importo. Dai un'occhiata a http://shootout.alioth.debian.org/ e confronta JRuby vs Java. –

+0

Guarda bene. Hai ragione. –

-3

Qualsiasi linguaggio che compaia in bytecode verrà eseguito in modo altrettanto veloce su una JVM con JIT.

+5

L'uso massiccio del riflesso da parte di groovy e ruby ​​li rende più lenti rispetto al semplice java. Ma secondo JSR-292 (http://jcp.org/en/jsr/detail?id=292), questo dovrebbe andare meglio con java 7. – vdr

+0

Per quanto ne so, JRuby è un interprete, e quindi il Il codice ruby ​​non è compilato in bytecode. Il JIT non è adatto per alcuni lavori extra? –

+0

"Distillazione JRuby: il compilatore JIT" http://www.realjenius.com/2009/10/06/distilling-jruby-the-jit-compiler/ – igouy

1

Come dice Anthony, Java è il linguaggio più veloce.

I linguaggi con tipizzazione statica (Java, Scala) sono più veloci di quelli dinamici (Groovy, JRuby).

1

Devi stare attento a ciò che stai confrontando. Così come "dipende da quello che stai facendo con esso" che altri hanno menzionato dipende anche come lo fai.

Ad esempio, un linguaggio come Scala può consentire di esprimere in modo naturale idiomi e algoritmi che probabilmente faresti più avanti in Java. Questo non vuol dire che non si potesse eguagliare la performance di Scala nel fare la stessa cosa - solo che potrebbe essere una brutta soluzione in una lingua per abbinare gli idiomi naturali in un'altra (nota che non sto dicendo che credo che Scala sia in realtà più veloce di Java a qualsiasi cosa nello specifico - Non ho dati su questo - a parte il fatto che Scala è stato progettato pensando alla scalabilità - da qui il nome).

In altre parole, le prestazioni riguardano solitamente gli algoritmi e spesso la scelta degli algoritmi riguarda la facilità di espressione. Quindi "usa gli strumenti giusti per il lavoro" si applica qui - sia che lo strumento sia Java, Scala, JRuby o qualsiasi altra cosa (anche se dubito che ci siano situazioni in cui un linguaggio dinamico è più veloce di uno statico senza essere patologico).

Ovviamente potremmo anche parlare di profilazione prima di ottimizzare ecc., Ma questo non affronta direttamente la domanda.

+0

"Scala è stato progettato con scalabilità in mente - da qui il nome" Non penso che sia ciò che intendevano per scalabilità, intendevano "i concetti si adattano bene alla grande programmi "http://www.scala-lang.org/node/250 – igouy

+0

Penso che sia un termine sovraccarico, ma c'era sicuramente un'allusione all'elaborazione parallela, rendendo più facile scrivere applicazioni concorrenti che possono scalare meglio - e questo le prestazioni totali possono migliorare, anche se, per istruzione, sono uguali o più lenti Ovviamente non è utile per tutti i tipi di problemi – philsquared

+0

"c'era sicuramente un'allusione all'elaborazione parallela" - nella tua mente ma dove collegano – igouy

-1

Penso che dipenderà da cosa intendi più veloce, e quanto bene il linguaggio è scritto per le prestazioni.

Ad esempio, se si sta facendo qualcosa di matematico, Scala sarà più veloce di Java.

Tuttavia, se si evitano le funzioni lente in java e l'uso finale in tutti i punti in cui ha senso, è possibile far funzionare Java più rapidamente di Scala, rispetto a quanto mi è stato detto di recente in un'intervista.

Quindi, questa è una domanda difficile a cui rispondere in generale, in quanto le persone mostreranno le istanze in cui Scala o Java saranno più veloci.

Ma, credo che Scala sarà generalmente più veloce, se non si utilizza var s, ma val invece.

+0

"Ad esempio, se stai facendo qualcosa di matematico intensivo allora Scala sarà più veloce di Java" - puoi dimostrare che è vero? – igouy

+0

Potrei, ma ci vorrà un po ', ma a causa del design di Scala, se hai un problema che è facile da fare in parallelo, come Finite Element Math, allora Scala sarà più veloce grazie al vantaggio della programmazione funzionale aspetti, ma, come ho detto, si possono presentare argomenti da mostrare, dipende dal problema e da quanto bene è stata scritta ciascuna lingua. –

+0

"se hai un problema che è facile da fare in parallelo" - come la norma spettrale? http://shootout.alioth.debian.org/u32q/benchmark.php?test=spectralnorm&lang=scala&id=2 – igouy

Problemi correlati