[Mono-list] IKVM+Rhino=JS for mono?

Stuart Ballard sballard@netreach.com
Thu, 17 Jun 2004 15:56:37 -0400

Carlos Alberto Cortez wrote:
> Hi:
> Currently I'm helping Cesar Lopez Nataren to port the Rhino Lexer and
> Parser stuff, and then finish the JScript compiler implementation. Maybe
> it would be a good idea to finish to port to C#, than trying to use them
> with IKVM, since you would have to run ikvm on top on mono, and then run
> rhino on top of ikvm, representing a big overhead.

If you use ikvmc, the overhead isn't that huge and could be reduced 
further with a small amount of work (which would help other users of 
IKVM as well).

A small amount of overhead for mapping certain method calls (not all) on 
java.lang.Object and java.lang.String is unavoidable, as is a larger 
amount of overhead when exceptions are used, but exceptions are slow 
anyway and shouldn't be used in performance-critical parts of the code.

The rest of the current overhead, as far as I know, is memory overhead 
caused by the need to have all of IKVM.GNU.Classpath.dll and all of 
IKVM.Runtime.dll loaded even when not all of it is in use. Classpath.dll 
could be split up by Java package so that you might only need to load 
the java.lang equivalents and maybe java.io. IKVM.Runtime.dll could have 
the JIT compiler split out because you don't need it when you're in 
static mode, unless you're doing dynamic loading of classes. I believe 
that the IKVM author plans on doing these things anyway, eventually, 
although they won't make Mono 1.0.

It occurs to me that perhaps Rhino *does* do dynamic loading of classes 
and so that overhead would be significant. Still, I imagine that adding 
a CIL-generator as an alternative to the Java bytecode generator would 
be less work than porting the entire code to C# - and you could benefit 
from ongoing improvements to Rhino in the future. (Of course, you can 
use System.Reflection.Emit directly from Java code to make the CIL 
generator simpler to write)

Obviously I can't tell you what to do, and like I said, I don't have 
time to work on this myself. I can only suggest what I think would save 
you some work...


Stuart Ballard, Senior Web Developer
NetReach, Inc.
(215) 283-2300, ext. 126