The development of a Java VM for .NET
Someone wondered why I chose to try to get Eclipse to run. Three simple reasons:
Status update: I've been doing a lot of rewriting in the verifier/compiler. I now feel that I finally understand class loading (in particular, what happens when a class is not found). In the verifier and in the compiler, class names are now no longer used, instead references to the TypeWrapper class are used to identify types. This isn't just a performance optimization, but also a requirement because class names aren't necessarily unique (only within a class loader). Still no support for different classes with the same name though, it's getting closer though.
The reason I started this rewriting, is to enable dynamic binding when a class isn't found. The current compiler just inserts a throw NoClassDefFoundError when it encounters a type that couldn't be loaded (and if the verifier needed to load the type, the whole method will just be replaced with code that throws a VerifyError). This is not what the Sun JVM does, it actually retries to load the class everytime the method executes. To simulate this behavior I'm going to emit late bound code in the cases where a class isn't available when the type is compiled. After all this is done, I should be able to run Eclipse without the -Xbootclasspath workaround.
Remember Me
I apologize for the lameness of this, but the comment spam was driving me nuts. In order to be able to post a comment, you need to answer a simple question. Hopefully this question is easy enough not to annoy serious commenters, but hard enough to keep the spammers away.
Anti-Spam Question: What method on java.lang.System returns an object's original hashcode (i.e. the one that would be returned by java.lang.Object.hashCode() if it wasn't overridden)? (case is significant)