I have wondered for a while about the feasibility of having Java run on the CLR.
After seeing a previous question here, I realize that there are quite a few differences between the Sun Java platform and the .NET runtime that would make cross-compiling impossible in all but the most trivial cases.
That being said, isn’t IL a Turing-complete language? Couldn’t you write a JVM in IL? Of course, the answer is yes, but why even go that far?
My question is:
Is the CLR (as a platform) incompatible with Java as a language (not a platform)?
How much of Java would have to be contorted or broken in order to make it fit?
Surely, this could be compiled for the CLR + .NET:
import System.*;
public class HelloWorldExample
{
public static void main(String args[])
{
Console.WriteLine("Hello World !");
}
}
Clarification:
What I’m getting at, is that I want to know what language features of java are incompatible with their CLR counterparts.
For example, I think that Generics are somehow in-congruent. I believe that it is as similar story with exceptions.
The CLR was designed with the assumption that people would have to be able to transition to .Net from Java by being able to compile their Java source code largely unmodified. Thus, things in Java you might consider to be problematic in a runtime (like covariant arrays) are included as features in the CLR.
The J# project implements enough of the Java standard library that most Java apps will compile with minimal changes. Note that J# can load JVM bytecodes for compatibility, but J# source always compiles to CLR bytecodes.