Почему Sun не делает компилятор байтового кода C # to Java? - PullRequest
45 голосов
/ 30 января 2009

Мы хотим запустить наш код C # на JVM

Моя компания имеет большую базу кода C #. Более половины этого кода - наш основной движок для создания, чтения, изменения, расчета и написания книг Excel. Мы часто получаем вопросы от клиентов и потенциальных клиентов, спрашивающих, собираемся ли мы создавать версию нашего движка на Java - многие из них вообще не заинтересованы в пользовательском интерфейсе. У нас даже есть несколько клиентов, которые взяли на себя труд использовать нашу библиотеку .NET из своих Java-приложений.

Итак, мы хотели бы создать версию ядра нашего ядра на Java, в идеале без поддержки отдельной базы исходного кода Java.

Эрик Синк очень хорошо описал эту проблему . Я нахожусь в аналогичном положении, за исключением того факта, что наша лицензия на программное обеспечение включает в себя бесплатное развертывание, что делает выбор Эрикса в Mainsoft незапланированным для нас.

Я гуглюл подобные "c # to jvm" каждые несколько месяцев в течение нескольких лет без радости. Потратив ~ 7 лет на разработку аналогичного программного обеспечения для Java, я уверен, что API-интерфейсы .NET, которые мы используем в нашем ядре, могут быть легко инкапсулированы, и мы сможем выполнить все, что нам нужно, с помощью библиотек Java. Так что, если бы у нас был только C # -> JVM-компилятор, мы могли бы построить наш основной движок для Java, и нам больше не пришлось бы отказывать разработчикам Java, которые хотели бы его использовать.

Я не спрашиваю по техническим причинам, почему Sun не делает компилятор C #. Я признаю, что у Java нет свойств или 64-битная длина без знака и т. Д. ... В качестве аргумента просто предположите, что все эти технические проблемы могут быть решены путем расширения JVM и / или других средств.

И я не прошу еще одной дискуссии о том, почему один язык / стек может быть лучше, чем другой. Реальность в нашем бизнесе заключается в том, что каждый из них использует множество потенциальных клиентов.

Почему Sun должна делать компилятор C #? (ИМО конечно)

Упрощение запуска кода C # на платформе Java означает больше разработчиков и больше программного обеспечения для платформы. Есть ли что-то более важное для успеха платформы? Джонатан Шварц - программист. Я оставлю это другим, умнее меня, чтобы решить, взял ли он на себя невозможную работу в качестве президента и главного исполнительного директора Sun, но после встречи с Джонатаном вскоре после его вступления в Sun у меня сложилось впечатление, что он понимает программное обеспечение и потребность в большом База разработчиков.

Так почему же Sun не делает компилятор C #?

  1. NIH синдром?
  2. Призрак Скотт Макнили ?
  3. Слишком много разработчиков Java не любят или не доверяют чему-либо, связанному с Microsoft?
  4. Они согласились не принимать в качестве части большие деньги ?
  5. ???

Должна быть веская причина. Я просто не могу за свою жизнь понять, что это такое ...

Ответы [ 18 ]

0 голосов
/ 29 марта 2009

Если бы я делал что-то вроде кроссплатформенной межъязыковой поддержки, я бы создал «общий API», так как языки схожи по синтаксису, вы могли бы сделать переводчик достаточно простым. Тогда вместо того, чтобы вызывать java или .net apis непосредственно из ядра, вы бы назвали ваш «общий api», который бы реализовал необходимые java и .net apis. Таким образом, вы можете создать межъязыковую песочницу, если хотите. Поскольку основными различиями в java и c # являются определения объектов, я получу их, отразив dll C #, а затем реконструирую конструкции, тогда было бы легко запустить интерпретатор и реализовать тела функций и преобразовать свойства в методы установки геттеров. уже зная структуру файлов. Это, конечно, предполагает .net 2.0, некоторые функции в 3.0 и 3.5 очень трудно интерпретировать

Это было бы сложно, но, вероятно, не так сложно, как реконструировать ядро ​​в java вручную и иметь две команды, работающие над ними по отдельности. Если эта идея вызывает некоторое вдохновение, я мог бы ее создать. Я бы предпочел увидеть более простую стабильную моно установку для Mac.

По сути, я думаю, что интерпретатор уровня кода, основанный на наборе общих классов API, можно написать с командой за неделю или две.

0 голосов
/ 23 июня 2009

Полагаю, лучший вопрос - почему бы вам не написать C # для компилятора байт-кода Java, если вы хотите, чтобы он существовал. Ждать, когда корпоративные повелители что-то сделают, - плохая идея.

Предложение по созданию такой реализации: возьмите интерфейс C # Mono или .GNU. Не пишите свои собственные.

0 голосов
/ 30 января 2009

Веселись.

  1. Должен сломать проверенные исключения.
  2. Должен найти способ реализации делегатов (которые похожи на интерфейсы с одним методом, добавленные не ранее времени загрузки).
0 голосов
/ 30 января 2009

Вы можете запустить свой код .NET и Java в одном интерпретаторе! Смотрите пример IKVM .NET на основе JVM и вики-страницу Boo и Java (использование языка Boo на основе .NET для написания приложений с использованием библиотек Java).

0 голосов
/ 16 июня 2009

JACIL - очевидно мертвый проект, который пытается сделать наоборот IKVM. Возможно, некоторые мотивированные люди могут использовать его как отправную точку для жизнеспособного компилятора .Net to JVM.

0 голосов
/ 29 марта 2009

Simple. Потому что Сун предпочел бы, чтобы Microsoft не предъявила иск. И хотя мы, программисты, не видим реальной причины для иска, имейте в виду, что Microsoft - более крупная компания, чем Sun, и у нее есть возможность руководить ими.

Однако, к счастью, Sun гораздо более открыта, чем Microsoft. Если такой спрос существует, то этот компилятор для Java может быть создан либо с открытым исходным кодом, либо с помощью стороннего производителя, и Sun не придется с этим сталкиваться.

0 голосов
/ 30 января 2009

Джо, предлагаю вам исследовать ИКВМ . Вы можете найти что-то там, что царапает ваш зуд

0 голосов
/ 30 января 2009

Я думаю, вы обнаружите, что Mainsoft, Enterprise Edition позволяет вам запускать большую часть / возможно весь ваш .NET-код под Java JVM ... Кажется, что вы сосредоточены больше на ASP.NET, но позволит C #. Это было доступно в течение некоторого времени, жаль, что они не публикуют это лучше!

Предупреждение следует за ....

Mainsoft® - это Java- .NET программное обеспечение взаимодействия, которое позволяет ИТ-организации перейти на Платформы с поддержкой Java, такие как Linux сохраняя существующие инвестиции в. NET код и навыки. Программное обеспечение легко интегрируется в Visual Среда разработки Studio®, включение C # и Visual Basic Разработчики быстро развиваться и поддерживать сервер и веб-приложения которые работают на платформах Windows, Java EE или оба, тем самым уменьшая применение затраты на разработку и обслуживание, время производства и общая стоимость собственность.

...