2010-12-04 2 views
14

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

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

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

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

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

Так что я ищу мнения других людей.

+3

определенно Java. Профили производительности для Mono и .NET различны. Какую IDE использовать - личный выбор. Я использую vim :) – khachik 2010-12-04 20:22:15

+2

Я действительно разрабатываю коммерческое Java-приложение, которое развертывается на сотнях различных систем (OS X, Linux и Windows). Java может стать серьезной болью, особенно в отношении пользовательского интерфейса (Swing), который просто не так велик, но, тем не менее, Java превосходит C# в любом случае, если проблема переносимости является проблемой. JVM работает во многих разных системах, и * «блокировка поставщика» * не так плоха, как тот, который вы получаете, когда попадаете в Микки. Если переносимость и безопасность являются проблемами, выберите JVM. Что касается языка, Java, Scala или любой язык, предназначенный для JVM. – SyntaxT3rr0r 2010-12-04 20:28:37

ответ

17

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

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

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

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

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

+0

+1 по патентам ... – 2010-12-04 20:20:30

5

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

Похожие Вопрос: Is Java the best language to develop cross-platform GUI applications?

+0

Я согласен с вашим аргументом, но это не делает Java «лучше», чем C#. C# тоже кросс-платформенный. Я предпочел ответ EboMike, потому что он явно подчеркивает недостатки .NET над Java. Вы этого не сделали! – 2010-12-04 20:19:46

+2

@ djechelon: C# не является кросс-платформенным. Моно официально не поддерживается, и я даже не говорю обо всех системах, встроенных или нет, которые никогда не будут иметь CLR. Если вы считаете, что C# является «такой же кросс-платформенной, как Java», я предлагаю посетить ближайшую психиатрическую больницу;) – SyntaxT3rr0r 2010-12-04 20:31:34

+0

@Webinator: вторая ошибка. Вызывает ли http://msdn.microsoft.com/en-us/library/3a8hyw88.aspx одноплатформенное? – 2010-12-04 20:42:11

3

Позвольте мне ответить:

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

Это зависит от вас.

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

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

и еще много

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

4

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

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

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

Привет из твердолобый C разработчика #;)

1

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

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

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

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

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

1

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

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

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

2

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

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

2

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

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