I don't think this "CPU Intensive" task is the kind of CPU-intensive task you actually care about. I haven't done any formal experimentation, but I'm guessing this is a better test of how many instructions are generated for a call/ret sequence, and not how well normal CPU-intensive operations would work. I would think some code that did a fair amount of number crunching/lookups in a tight loop would be a much better test.
But, then again, it doesn't really matter. Is Ruby fast enough to work for most uses? Yes. If you really, really, really care about execution speed, would you use Ruby? I don't know. If you care that much about execution speed, you will probably do more benchmarks than I care to think of.
Ported this to scala (I know, I didn't do this functionally, this is a pretty straight port of the C example), ran in 4 seconds (of course, I've got about a bajillion other apps open right now, so take this with a grain of salt):
object Main {
def fib(n : int) : int = {
if(n < 2) n
else
fib(n-1) + fib(n-2)
}
def main(args: Array[String]) = {
for (i <- 0 until 37) {
printf("n = " + i.toString + " => "+fib(i).toString)
}
}
}
On my 1.4ghz core 2 duo laptop, which isn't a very powerful machine, the above scala code runs in about 1 second when compiled. If I let the code run once to to let the JIT warm up and only measure the execution of the main body, it runs in .60 seconds on average. By comparison, gcc with -O3 runs the program in about .57 seconds.
I don't know how you got 4 seconds unless you ran the program as a script and had a lot of other stuff running simultaneously. A simple scala hello world program on my machine has a startup time of 1.5 seconds when run as a script.
Recursive/iterative Fibonacci number generation is an interesting programming exercise but it's a bad example because in practice you'd be best to use an explicit constant-time formula.
Huh? Where's the results? Or are readers supposed to run the code and send their results or something? But there's no timing check in the code he posted anyway.