Лучший выбор для кросс-платформенной разработки: Java или С#?

Я разработчик Unix с 25-летним опытом. Я сделал много кросс-платформенной работы, в последнее время разрабатывая код на MacOS и перенастраивая его на Linux с помощью autoconf и на Windows с mingw в режиме кросс-компиляции. Это дает хорошие результаты по большей части. Тем не менее, я заинтересован в переходе на язык с типом безопасности. Кроме того, мои пользователи предпочли бы, чтобы я предоставлял им приложения на основе графического интерфейса, а не приложения командной строки.

Большинство моих пользователей находятся в Windows, но значительное число важных пользователей находятся в Linux. Ни один из моих пользователей не работает в MacOS, но это моя предпочтительная среда. (Вероятно, я должен переключиться на Linux или Windows, но мне действительно нравится Apple Mail.)

В течение примерно трех лет я смотрел на то, чтобы продвинуть свои усилия по развитию с С++ на Java или С#. С++ работает быстрее, и мы делаем операции, которые очень интенсифицированы. Типичная программа будет обрабатывать 500 ГБ до 1 ТБ и принимать 3-5 часов. Разница между программой, заканчивающейся за 5 часов и заканчивающейся в 9, является разницей между программой, которая заканчивается в тот день, когда вы начинаете ее, и заканчивается на следующий день. С другой стороны, все чаще я пишу многопоточные программы, а модель протектора намного чище как на Java, так и на С#.

Итак, я нахожусь в тупике. Я нашел одно сравнение скорости, которое указывает, что я не должен выбирать Java против С# из-за скорости. Поэтому я пытаюсь повлиять на другие проблемы:

  • Долгосрочные обязательства. Никто не знает, что происходит с Java, но С# с нами до тех пор, как Microsoft.
  • Доступность и согласованность на платформе. Java практически везде одинакова. Я понятия не имею, как похожи Microsoft и Mono С#.
  • Простота разработки. Я довольно привык к разработке в EMACS, но я продолжаю думать, что я должен перейти в Eclipse из-за факторинга кода. (Я хочу, чтобы у EMACS был достойный кодовый факторинг, но он этого не делает.) Visual Studio довольно хорош, но работает только в Windows. Среда разработки Mono кажется довольно жалкой, но может стать лучше.

Итак, я ищу мнения других людей.

Ответ 1

Мое голосование за Java, хотя я уверен, что многие люди не согласятся.

Моно очень распространено в наши дни (в том числе на мобильных платформах, таких как Android), но я считаю, что это не официально одобренный Microsoft С# - это повторная реализация.

Были опасения, что Microsoft закроет Моно по причине патентных нарушений или что-то еще, что они могут придумать, но этого не произошло, и на данный момент маловероятно, что это произойдет.

Я бы предпочел пойти на Java, который был официально разработан как кросс-платформенный язык и кросс-платформенный API. Конечно, есть аналогичные проблемы - теперь, когда Oracle называет выстрелы, они быстро оттолкнули немало разработчиков, но я все равно возьму это за Mono.

Что мое личное мнение - я уверен, что со мной будет много людей.

Ответ 3

Mono - это проект, независимый от Microsoft. Разработчики mono пытаются реализовать все возможности .NET как можно более совершенными, но вы никогда не сможете гарантировать, что он будет на 100% совместим со всеми платформами.

Java - это то же самое, независимо от того, на какой платформе вы ее запускаете, поскольку среда выполнения Java предоставляется самим Oracle, а не разрабатывается третьей стороной.

Если x-платформа неизбежна, я бы пошел на Java.

Привет от умирающего разработчика С#;)

Ответ 4

Позвольте мне попытаться ответить:

  • Java - это платформа с открытым исходным кодом. Это будет поддержано сообществом. +1 к Java
  • Моно с открытым исходным кодом и доступно везде, даже на iPhone. +1 для обоих
  • Visual Studio требуется только для написания кода. Это лучшая IDE IMHO. Вы всегда можете тестировать и развертывать в Linux, даже с помощью Mono Tools для Visual Studio. +1 к С#

Это вам решать.

Я выбрал С# над Java по другим причинам:

  • Если я скомпилирую XML-схему в С# с помощью xsd.exe, я могу преобразовать объект XmlNode в С# и наоборот, используя XmlSerializer в 1 строке кода
  • Мне удалось запустить ASP.NET в режиме "без сервера", т.е. без IIS или Apache, но из консольного приложения. Я запускаю сложные веб-сервисы из этого
  • using синтаксис и IDisposable непринужденная память и управление жизненным циклом объекта
  • Свойства, в то время как синтаксический сахар, легко развиваются.
  • ADO.NET намного намного лучше, чем JDBC

И многое другое

[Добавить] Я бы следил за XAML и Silverlight/Moonlight для пользовательских интерфейсов. Кажется, что Moonlight более перспективен тем, что мы думали до сих пор

Ответ 5

Есть еще одна вещь, о которой не упоминалось. Есть тонны проектов с открытым исходным кодом для Java, которые вы можете использовать.

Я не знаю о С#/Mono, но в прошлый раз, когда я работал с ним, ничего особенного не было.

Ответ 6

Хотя я разработал на Java с 1996 года, я нахожу, что "лучшее" решение для кросс-платформенных приложений (например, для настольных компьютеров) использует С++ и Nokia Qt. Причинами являются, по сути, то, что я получаю собственные приложения на Windows, OSX и Linux с хорошей производительностью.

IMHO: Java-приложения на рабочем столе в порядке, на которых у пользователей нет выбора, но когда люди тратят свои деньги, они, похоже, не оценивают Java GUI (Swing, SWT или Eclipse RCP). Конечно, зависит от ваших целевых пользователей.

Ответ 7

Mono имеет в значительной степени те же классы, что и MS CLR, поэтому пока вы не используете ничего. NET4/WPF Related, вы можете быть уверены, что ваш код будет работать в Mono.... Кроме того, С# предлагает большую интеграцию с базовой ОС, чем Java. Оба применяются для оптимизации во время выполнения. Оба имеют C-подобный синтаксис. С# (по моему опыту) легче использовать модель потоков, чем Java.

Это ваш выбор, но я говорю, что Java уже обречена, поэтому лично я бы пошел с С#, но опять же, это ваш выбор...

Одно последнее преимущество. Windows предварительно устанавливает CLR, а не JRE;)

EDIT: inb4downvotes: Java - хороший язык, но я считаю, что это было давно заброшено.

Второй EDIT: Java не обречен, посмотрите комментарии ниже. Тем не менее, мне нравится С# над Java;) Специально Winforms над Swing (хотя я не разрабатываю приложения WinForms, так как я встретил WPF: D)

Ответ 8

Я думаю, что это tossup. Java будет легче разрабатывать, чтобы просто получить Eclipse на любой платформе, которую вы хотите, и использовать SVT или Swing. Это обычное использование Java и поддержка.

Если вы хотите разработать С# на Mac для развертывания на Linux - это будет возможно, но больнее. Вы разработчик outye - большинство разработчиков С# этого не делают. Если у вас возникнут проблемы (и вы это сделаете), людей будет меньше задавать.

Однако, если вам действительно интересно, как выглядит ваш GUI и ведет себя в Windows, я думаю, что это стоит того. Java не может создавать графические интерфейсы, которые выглядят правильно в Windows, и .NET делает это легко.