Hi,

This compiler is very promising, for the least.

Here is a small dummy Haskell program.
countdown :: Int -> IO ()
countdown 0 = putStrLn "finished"
countdown x = do 
                putStrLn (show x)
                countdown (x-1)
main = countdown 10000000

and the C program that comes to closest.
#include <stdio.h>
int main(void)
{
        int i;
        for(i=0; i<10000000; i++)
        {
                printf("%d\n",i);
        }
        printf("finished\n");
        return 0;
}

GHC is 6.10.1, gcc is 4.3.2, jhc is 0.6.0
arch is i386/Linux(Ubuntu)

$ ghc hello.hs -o hello1
$ jhc hello.hs -o hello2
$ gcc hello.c -o hello3

What about the size of the executables?
$ ls -l hello1 hello2 hello3
493567 hello1
16803 hello2
9083 hello3

let strip them.
309492 hello1
10092 hello2
5664 hello3

In the case of jhc, there is definitively room for some improvements.
I dare not say what I think of ghc.

Now, let run them.

$ time ./hello1 > /dev/null 
real    0m12.092s
user    0m12.005s
sys     0m0.052s

$ time ./hello2 > /dev/null 
real    0m2.016s
user    0m1.016s
sys     0m1.000s

$ time ./hello3 > /dev/null 
real    0m2.609s
user    0m2.588s
sys     0m0.020s

Actually, times varie between runs. It tends to decrease (except for the
ghc generated binary), so I suppose it is due to OS cache effects. 
Yet, I consistently observed that, according to "time", hello2 (jhc)
runs _faster_ than hello3 (gcc).

Something is wrong: how can Haskell be faster than C?

Last but not least, as well as generating fast code, jhc can make good
use of a C cross-compiler as back-end.

Well done.
Sylvain Nahas

_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to