Возможно ли скрестить C# и Java (.NET и JVM)?

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

В описании новой версии Visual Studio указано, что она начинает поддерживать язык Java. кроме того часть библиотек .net открываются в Open source. Интересно, возможно ли (частичное) объединение этих двух гигантских платформ? Возможны ли варианты параллельного использования библиотек Java и .NET?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Мы используем www.ikvm.net для компиляции java кода в clr

Уже сто лет как совмещают, в виде бэкенда на джаве и толстого клиента на диезе.

А який в цьому сенс? Не можу уявити в свої голові очевидних плюсів.

Ну типа джава неплоха для серверсайда, а .нет для толстого дектопного приложения.
Хотя я бы наверное писал бы все на .нете.

Ну типа джава неплоха для серверсайда, а .нет для толстого дектопного приложения.
Як на мене, це уже не вкладається в поняття
скрестить C# и Java
З таким же успіхом люди вже багато років об"єднують java & javascript
З таким же успіхом люди вже багато років об"єднують java & javascript
Да, обьединяют, и что?

Ну, автор мав на увазі щось глобальніше.

Автор комента(Yegor Chumakov) на который ты ответил думаю имел в виду именно это.

Когда денех нет на серверные лицензии, «а в люди — хочется» :)

как уже писали, джава проверенный годами инструмент хорошего бэкенда (хотя я бы поспорил, имхо использовать весь стек microsoft для бэка все же быстрее и в перспективе надежнее имхо. но я дотнет инжыньор, мной управляет многомиллиардная корпорация и я не верю в опенсорс :) ). а на дотнете быстро формошлепится красивый клиент любой степени толщины (как на wcf для декстопа которым таки пользуются, так и на asp.net для веба. можно даже ангуляр прикрутить). очевидный плюс — скорость разработки, красота ui.

на диезе.
до попадання на такі вислови завжди вважай цей прікол трохи по дибільному написаний
Why do Java developers wear glasses?
-Because they don’t C#!
але коли певний організм, що вважає себе високорозвиненим, не здатний прочитати 2 букви, 2 БУКВИ КАРЛ!!!, по правилах англіської мови — що тут ще можна подумати?

можливо те що ми не в музичній школі, і в межах нашої галузі, та тим більше назви мови — написано зовсім інше?

C# на английском и обозначает До диез, не вижу пролему так его переводить, хотя сам так не говорю. А когда читал свою первую книгу и не знал как название языка правильно произносится про себя так и называл его — До диез.

en.wikipedia.org/wiki/C♯_(musical_note
ми точно тут про одну англіську тут говорим? чи «все що не зрозуміле і латинкою — певно англіська»?

Ну так приведенная статья как раз на английском. А еще микрософт много просил понимать/называть симол «#» (number sign) как музыкальный «♯» (sharp) просто потому, что его проще набирать на клавиатуре.

відчуваєте різницю,

на английском
та
in the French solfège it is known as do dièse
?
чи на англіській в музиці це все ж сі шарп, як стаття пише?

Именно: на английском — Си шапр, на русском — До диез. Во фразе

не вижу пролему так его переводить
имелся в виду как раз перевод на русский. Ветка ведь о переводе.
Ветка ведь о переводе
ніразу.
крім того по правилах більшості мов світу власні назви не перекладаються.
Именно:
бачите десь в мові нотний ключ чи конвейерні стрічки? якщо ні, то далі називайте відповідно контексту і без лівакових «перекладів» ;)
крім того по правилах більшості мов світу власні назви не перекладаються.
Ландан, Лівепул, Ню-Йоок...
Написали б «ява» — пропустив би повз вуха. А тут твою улуюблену технологію неправильно назвали... ойойой...
Ландан, Лівепул, Ню-Йоок...
Написали б «ява» — пропустив би повз вуха
транслітерація і переклад — є різниця?
писати нью-йорк транслітом, це одна річ, а перекладати шарп чимось іншим, сильно смахує на традиції неіснуючого «древнеруського государства» з ВВХ на чолі, від чого є сенс рухатись в сторону світових тенденцій, а не назад, в жопу ;)
C# на английском и обозначает До диез
это в музыке, а не в английском
В описании новой версии Visual Studio указано, что она начинает поддерживать язык Java

Опять. Она уже один раз поддерживала Джаву (J#) ничего толкового не вышло.

Не вышло потому, что Sun решила засудить их за использование Java:
www.javaworld.com/...-settle-java-lawsuit.html
Если бы не это — то язык C# вообще не возник бы. И Java была бы основным языком. Между прочим Java от MS была вполне прогрессивной на то время:
en.wikipedia.org/wiki/Visual_J+
Гораздо проще чем С++ и намного продвинутее VB (туда ему и дорога).

Я не про J++ и Майкрософт Джава. Я про J#, который возник уже после C#.

Сан их судил потому что МС пилил «немного другую» джаву, а сан требовал соответствия стандартам.

Due to this short-cut around the original Java framework, J++ applications were more efficient in taking advantage of Win32 API functions than Java applications.
Видели бы вы десктоп приложения на Java в то время. Это было такое убожество и тормоза что потом сановский Swing просто выбросили.
Видели бы вы десктоп приложения на Java в то время. Это было такое убожество и тормоза что потом сановский Swing просто выбросили.
Видели. Тормоза — да, убожество — дело вкуса (скорее таки убожество чем нет), в то время все интерфейсы были «убожеством».
Вопрос не в этом, вопрос в том почему Эппл договорился, а МС нет. Мое предположение: потому что МС не собирался договариваться, а в основном диктовать условия.

Програмы разные были, вон IDEA была на свинг написана. А МС вроде руководствовался другими мотивами.

Верю на слово, но МС стал пытаться вставлять в свою Джаву конструкции, которых не было в стандарте, и которые работали только на МС Джава. Они вообще любят перехватывать контроль над стандартами. Порядка ради, иногда — очень удачно. AJAX из Ишака пошёл, если я не ошибаюсь.

Можно. Но вопрос ЗАЧЕМ?

А зачем? Я в этом не вижу смысла. Проще интегрировать компоненты через веб-сервисы, базу или систему обмена сообщениями. Но скрещивать бульдога с носорогом? ))

Вполне можно кросс-компилировать .NET код (точнее исходники на C#) в байткод JVM (по идее можно и наоборот, но мы таким не занимались). А замускать в одном процессе сразу CLR и JVM — зачем? Оверхед на переброску данных между двумя платформами будет неподъемный. IMHO проще уж стартовать 2 независимых процесса и коммуницировать между ними.

Тут будут проблемы из-за того, что байткод JVM не поддерживает обобщения. А наоборот можно, вроде даже была попытка J#.

Это всё решаемо. И вообще — это вы еще приложения для Андроида, написанные на Свифте, не видели ;) еще и компилируется в нативненький байткод, без дополнительного фреймвёрка, как у Ксамарина

Нерешаемо, дотнетовская рефлексия на JVM полноценно работать не будет. Порядка ради — она очень редко нужна. Я как то писал под MonoTooch и там был здоровый док, чего их реализация дотнета не поддерживает, типа абсолютно других строк (там они — символьные массивы), нерабочие обощённые конструктора и тому подобная мелочёвка. Если реализовать дотнет под JVM — получится так же.

О, колега по несчастью. Довелось портировать наш продукт на Моно-Тач и Моно-Андроид (еще когда они так назывались). Что интересно, некоторые найденные тогда глюки не пофикшены до сих пор.
А по теме — никто не говорит о *полном* портировании дот-нета. А вот подход с промежуточным фреймвёрком, как у Xamarin, вполне работает (т.е. когда «пишем на C# под .NET, оно работает на мобилке»). Впрочем есть и другой подход — «пишем на C# но используем методы целевой платформы а не .NET» — тоже вполне работает, для тех кто не хочет изучать другой язык или IDE.

А зачем вообще запускать .net под JVM, если уж на то пошло? Если нужны мобилки и Линух — есть Ксамарин. Единственное, что я могу придумать — это хочется использовать Джавовский фреймвёрк под дотнетом, так хочется аж кушать не можешь. Но тогда проще просто портировать фреймвёрк.

написанные на Свифте, не видели
Может потому что их нет ?

Ок, я передам нашему compiler-guy что его не существует ;)

спасибо, но кажется, что у меня личка не работает — я даже ее найти не могу
если это не секрет — может здесь написать? по-любому, не только мне интересно

Оно на твое мыло должно отправиться, которое ты указал при регистрации.

спасибо, нашел, оно было в спаме

В одном приложении (одном процессе) совместить .Net и JVM проблематично. А главное — бесполезно.
В то же время написать разные модули на C# и Java вполне реально. Надо только выбрать как обмениваться данными. Мы вполне успешно использовали Solr сервер (Java) из ASP.Net приложения.
Java изначально кросс-платформенная. .Net становится частично кросс-платформенным с новой версии. Так что на одной платформе то же можно совместить.
Если же хочется просто совместить два языка (без библиотек) — то есть решения для добавления Java в Visual Studio и компиляцию наравне с C#.
Насколько я видел в опенсорсе чаще идут по пути форканья на другом языке. Благо можно автоматически сконвертировать синтаксис Java в С# и наоборот.

.Net становится частично кросс-платформенным с новой версии
шта? про моно и ксамарин никто не слышал?

Таки вы курили этот Ксамарин? У него есть ограничения. По крайней мере у Ксамарин.ИОС.

таки я на нем работал. что именно не получилось сделать?

Всё получилось. Просто там был док со списком ограничений. Так что Моно-Тач — это ДотНет процентов на 98, но не на сто.

стоит вспомнить, на обычном дотнет (без всяких моно) используются ли возможности языка и платформы на все 100%? или все ограничивается дженериками и линком? по моей практике, рефлексию использовал в йуности.
на монотаче я только ковырялся, в продакшен проект не писал, но огорчил только сборщик мусора. но это бока самой яблочной платформы, что они не придумали няшный автоматический сборщик для ленивых формошлепов :3

по производительности, кстати, уперся только в гуглокартах. там надо было рисовать 500 пинов инфа по которым тянулась и базы данных. увы, так и не успел разобраться с тем как линковать нативные андроид библиотеки (группировка пинов не входит в те которые уже слинкованы разработчиками ксамарина)

Благо можно автоматически сконвертировать синтаксис Java в С# и наоборот.
Интересно, какой инструмент вы бы рекомендовали для конвертации проекта в автоматическом режиме? Как там обрабатываются raw types, anonymous types и великое множество иных java-specifics? Как настраивается frameworks mapping? И сколько ошибок компиляции на каждую тысячу строк исходного кода надо ожидать на выходе?

В интернете полно проектов по запуску байткода Java на CLR и наоборот. Вот только совместимость библиотек очень низкая: типы данных слишком разные.
String в C# и String в Java — в таких проектах — это разные типы. Значит при каждом кросвызове надо в ручную конвертировать типы одной платформы в другую. В общем куча головняка на ровном месте.

Без страшных мук врядли.
1 слишком разные архитектуры и подходы к виртуализации у JVM и CLR .NET
1а разный байт код

Можно ли создать WINE в одной среде, для выполнения кода другой среды? Можно.
Но, с какой целью, и кому это нужно?

Підписатись на коментарі