CLR несовместим с Java (как язык)? - PullRequest
6 голосов
/ 15 октября 2010

Некоторое время я задавался вопросом о возможности запуска Java на CLR.

Увидев предыдущий вопрос здесь, я понимаю, что между платформой Sun Java и средой выполнения .NET существует довольно много различий, которые делают кросс-компиляцию невозможной во всех, кроме самых тривиальных случаях.

Как говорится, не является ли язык Тьюринга полным? Не могли бы вы написать JVM в IL? Конечно, ответ - да, но зачем даже заходить так далеко?

Мой вопрос:

Является ли CLR (как платформа) несовместимым с Java как языком (не платформой)?

Какая часть Java должна была бы искажаться или ломаться, чтобы она подходила?

<Ч />

Конечно, этот может быть скомпилирован для CLR + .NET:

import System.*;

public class HelloWorldExample
{
    public static void main(String args[])
    {
        Console.WriteLine("Hello World !");
    }
}
<Ч />

Пояснение:

Я хочу знать, что я хочу знать, какие языковые функции java несовместимы с их аналогами CLR.

Например, я думаю, что Дженерики как-то неконгруэнтны. Я считаю, что это похожая история с исключениями.

Ответы [ 3 ]

6 голосов
/ 15 октября 2010

CLR был разработан с предположением, что люди должны будут иметь возможность переходить на .Net с Java, имея возможность компилировать свой исходный код Java в значительной степени без изменений.Таким образом, вещи в Java, которые вы можете считать проблемными во время выполнения (например, ковариантные массивы), включены в CLR как функции.

В проекте J # реализовано достаточно стандартной библиотеки Java, с которой будет компилироваться большинство приложений Javaминимальные изменения.Обратите внимание, что J # может загружать байт-коды JVM для совместимости, но J # source всегда компилируется в байт-коды CLR.

0 голосов
/ 15 октября 2010

Да, но, учитывая, что Java гораздо более широко используется и более стандартна ... разве вы не захотите сделать это наоборот, то есть компилировать C # в байт-код Java?Ответ, конечно, заключается в том, что можно написать компилятор Java, который будет генерировать байт-код для CLR, или компилятор C #, который будет генерировать байт-код Java.Однако хитрость заключается в том, что вам необходимо предоставить пользовательскую реализацию стандартной библиотеки / библиотек, которая будет относиться к библиотеке или библиотекам для этой платформы.И учитывая размер обоих API, это было бы довольно значительным мероприятием.Это, вероятно, потребует довольно большой команды, чтобы сделать это в разумные сроки.Я бы предложил начать проект с открытым исходным кодом, если вы собираетесь это сделать, хотя, учитывая, что C # / CLR является Microsoft-ism, я не уверен, сколько энтузиазма может быть вызвано.

0 голосов
/ 15 октября 2010

Быстрый поиск показывает IKVM и текущий проект Ja.NET .

Тем не менее, я мог видеть ценность в том, чтобы идти другим путем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...