poniedziałek, stycznia 11, 2010

Plus dla Scala, minus dla Groovy ;-)

W ramach przyglądania się różnym językom zacząłem oglądać Scale i Groovy, żeby sprawdzić jak się w tym pisze małe rzeczy napisałem sobie moje "ulubione" całkowanie numeryczne [to takie moje Hello World].

W Scala wygląda tak:
  object Speed {
var N=10000
var M=1000

def calc():Double = {
var sum:Double = 0.0;
for (i <- 0 until N) {
var x:Double=20.0*i/N-10.0;
sum+=Math.pow(Math.E,-x*x)*(20.0/N);
}
return sum;
}

def main(args: Array[String]) = {
var s:Double=0;
var start:Long=System.currentTimeMillis();
for (i <- 0 until M) {
s+=calc();
}
println((System.currentTimeMillis()-start)/(M*1.0));
}
}

W Groovy tak:
N=10000;
M=1000;

def double calc() {
double sum=0;
for (i in 0..N) {
double x = 20.0*i/N-10.0;
sum+=Math.pow(Math.E, -x*x)*20.0/N;
}
return sum;
}

long start = System.currentTimeMillis();
double s = 0;
for (i in 0..M) {
s+=calc();
}
println((System.currentTimeMillis()-start)/(M*1.0));

Trudno powiedzieć która składnia jest bardziej czytelna, na pewno bardziej mi się podoba zapis pętli for w Groovy.

Jednak okazało się, że Groovy poległo na całej linii jeśli chodzi o wydajność ;-)
Scala [na JVM] potrzebowała na jedno wykonanie funkcji calc() średnio 5.15 ms, a Groovy na to samo potrzebowało aż 138.79 ms! Dla porównania Java potrzebowała 4.84 ms.

Na razie nie czuję się przekonany do żadnego z tych języków ;-) wydaje się tak na pierwszy rzut oka, że Scala jest taka jakby dojrzalsza, a Groovy choć bardziej podobne do Java'y to tak celuje w język skryptowy.


Podobne postybeta
Raspberry Pi to nie jest demon prędkości ;-)
Całkujący Dart ;-)
C# i Java okazały się szybsza od Pythona :-) [było Java okazała się szybsza od C# i Pythona]
ETA - liczymy szacowany czas zakończenia [przybycia ;-)]
Go wolniejsze od C i JavaScript, i ciut szybsze niż Java ;-) [a jednak od Java'y też wolniejsze]