Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is the CLR incompatible with Java (as a language)?

Tags:

java

clr

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.

like image 664
John Gietzen Avatar asked Oct 15 '10 00:10

John Gietzen


People also ask

Does Java have CLR?

CLR does support J#. In an utopian world CLR should have supported C# and Java, but Java is a competitor to Microsoft's C# and hence it won't support Java.

What is the equivalent to the CLR in Java?

NET framework's Common Language Runtime (CLR) is much similar to Java Virtual Machine (JVM), in terms of garbage collection, security, just in time compilation (JIT).

Is CLR better than JVM?

The Common Language Runtime (CLR) offers important functionalities like memory management, thread management, garbage collection and exception handling. Although Common Language Runtime (CLR) and JVM are similar in many respects, most developers reckon CLR is the hands-down winner.

What is the equivalent of JVM in C#?

Of course, C# is defined purely as a language. There's no reason why it cannot be made to run on other runtimes, or indeed in an interpreted mode. But the "equivalent" of "the" JVM (implying the default one) is the CLR.


1 Answers

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.

like image 149
Gabe Avatar answered Oct 05 '22 20:10

Gabe