[linux-l] Re: Ruby: sehr cool, aber auch sehr laaaahm... wie geht's schneller?!

Oliver Bandel oliver at first.in-berlin.de
Di Aug 22 00:38:24 CEST 2006


On Mon, Aug 21, 2006 at 11:04:30PM +0200, Pascal Volk wrote:
> * Am Mo, 21 Aug 2006 schrub Oliver Bandel:
> > 
> > ==============================================
> > first:~ oliver$ time ruby  hw.rb
> > hello world
> > 
> > real    0m0.065s
> > user    0m0.030s
> > sys     0m0.020s
> > ==============================================
> > 
> > Der Code:
> > 
> > ==============================================
> > first:~ oliver$ cat hw.rb 
> > 
> > puts "hello world"
> > ==============================================
> > 
> > [...]
> >         http://peterhi.dyndns.org/write_it_in_c/index.html
>                                     ^^^^^^^^^^^^ ja :)

...tse ;-)

Wozu gibt's OCaml? :)


> > [...]
> 
> Mhh, ich dachte eben, Ruby sei richtig lahm im Vergleich zu Python, als ich
> Deine Ausgabe mit meiner von Python verglichen hatte.
> Als ich es in Ruby probiert habe wurde ich etwas stutzig. Welche Version hat
> Dein Ruby? Aus welcher Distribution hast Du es?
> pvo at el-presidente ~ $ ruby -v
> ruby 1.8.4 (2005-12-24) [i486-linux]

===========================================================
first:~/Programmierung/Ruby-Experimente oliver$ ruby -v
ruby 1.8.4 (2005-12-24) [powerpc-darwin7.9.0]
first:~/Programmierung/Ruby-Experimente oliver$ 
===========================================================

Aus den Sourcen kompiliert; liess sich problemlose kompilieren/installieren. :)

(Vorinstalliert war hier 1.6.<irgendwas>)



> Bzw. Wie betagt ist die Hardware, oder hast Du einen erhöhten System-Load?
> 

PowerBook G4, 400 MHz, mindestens 4 Jahre alt, die Platte bremst
drastisch; wenn ich via FireWire Daten schaufele, ist das
schneller als mit der internen Platte - ist eben schonh etwas betagt.

Müsste mal endlich ne neue Platte einbauen, scheue mich aber vor dem
mechanischen Aufwand: spezielles Werkzeug, sehr eng gebaut ("platzsparend" :))
...aber es wird wohl mal Zeit. ;-)

Fahre derzeit OS-X; Linux ist eh flotter.


> 'Write it in C' hat wohl was wahres an sich. ;-)

Naja, nicht unbedingt, wenn man auch die Entwicklungszeit berücksichtigt
und die Wartbarkeit des Codes usw.

Ruby ist aber doch schon seeeehr langsam. :(
Macht aber Spaß, weil es recht komfortable Programmierung erlaubt.

Und da ich das eh schon seit Jahren vor mir her schiebe, mir Ruby noch druf zu zimmern,
habe ich mich eben jetzt dazu entschlossen.

Wenn's (in erster Linie) auf solide Programmierung ankäme, würde ich eh OCaml nehmen,
und performant ist es auch.



> 
> pvo at el-presidente tmp $ time python2.3 hw.py && time python2.4 hw.py \
> && time ruby hw.rb && time ./hw && cat hw.*
> hello world
> 
> real    0m0.023s
> user    0m0.020s
> sys     0m0.004s
> hello world

Hmhhh, wie alt/betagt ist Deine Hardware?
Ist Python i.A. nicht schneller als Ruby?
Und dann so schlappe Ergebnisse im Vergleich zu meinen Daten? ;-)


> 
> real    0m0.018s
> user    0m0.012s
> sys     0m0.008s
> hello world
> 
> real    0m0.008s
> user    0m0.004s
> sys     0m0.000s
> hello world
> 
> real    0m0.002s
> user    0m0.000s
> sys     0m0.000s
> #include <stdio.h>
> int main(void) {
>     printf("hello world\n");
>     return 0;
> }
> print "hello world"
> puts "hello world"
> 




Deine C-version für's hw hier ausprobiert:

====================================================
first:~/Programmierung/Ruby-Experimente oliver$ time a.out 
hello world

real    0m0.121s
user    0m0.010s
sys     0m0.010s
first:~/Programmierung/Ruby-Experimente oliver$ time a.out 
hello world

real    0m0.083s
user    0m0.020s
sys     0m0.010s
first:~/Programmierung/Ruby-Experimente oliver$ time a.out 
hello world

real    0m0.080s
user    0m0.000s
sys     0m0.020s
first:~/Programmierung/Ruby-Experimente oliver$ time a.out 
hello world

real    0m0.080s
user    0m0.000s
sys     0m0.020s
first:~/Programmierung/Ruby-Experimente oliver$ time a.out 
hello world

real    0m0.090s
user    0m0.000s
sys     0m0.010s
first:~/Programmierung/Ruby-Experimente oliver$ time a.out 
hello world

real    0m0.080s
user    0m0.000s
sys     0m0.010s
first:~/Programmierung/Ruby-Experimente oliver$ 
====================================================

(Beachten: Die Werte für einmaliges Ausführen sind nicht so
 zuverlässig zur Abschätzung; ein par mal muss man das schon machen
 und dann den Mittelwert wenigstens abschätzen.

Wie gesagt, habe das auf ner alten HW laufen, aber ich hatte nicht um die
absoluten Ausführungszeiten mich gekümmert, sondern um die relativen,
also die Unterschiede bzw. Verhältnisse der Zeiten zwischen verschiedenen
Sprachen.

Mit ner schnelleren Platte wären auch meine Ausführungszeiten besser.
Vielleicht probiere ich es auch nochmal mit der externen Platte,
die ist ja wesentlich schneller.

Ändert aber nichts daran, daß Ruby wesentlich langsamer ist als Perl/OCaml/C.
Und um diesen UNTERSCHIED in der Geschwindigkeit ging es mir.
(Schon wieder Missverständnisse.... *stöhn*)

Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l