I'm following the progress of Parrot, the Perl6 VM. I'm interested in the subject since NekoVM is trying to tackle the same problem : one single VM for several languages. Parrot have been developed for years now and include megabytes of source code. Still, it hasn't reached 1.0 yet, and there is no production compiler targeting it. Neko is version 1.2 and is targeted by several compilers : MotionTypes, NekoML and Haxe. How does Parrot compare to NekoVM ?
I downloaded last Win32 binary release and tried to compare a small benchmark, the fibonnacci(30) calculus. That's one of my favorites benchmarks because in a few instructions you measure comparisons, integer calculus and function calls, which are three important things for overall application speed.
Results are the following : Parrot using -j (JIT core) took 10 seconds to compute fib(30). NekoVM (which does not have JIT yet) took only 2 seconds. That's 5 time faster, for such a simple thing. I don't know the differences between the semantics of the systems, but since the Parrot Fib function was strictly typed, while Neko fib is dynamically typed, I would expect a lot more speed on the Parrot side.
At the same time, the
libparrot.dll is more than 2MB while
neko.dll is 64Ko (353Ko to get a fair comparison and include standard library, GC and Neko compiler which is separate).
That's good news for Neko, isn't it ?