.NET / Mono или Java - лучший выбор для кроссплатформенной разработки? [закрыто]


108

Насколько меньше библиотек для Mono, чем для Java?

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

  • производительность (например, мне сказали, что Java хороша для многопоточности, и я слышал, что оптимизация кода времени выполнения в последнее время стала очень хорошей для .NET)
  • переносимость в реальном мире (оба предназначены для переносимости, что такое Catch-22 для каждого?)
  • доступность инструмента ( CI , автоматизация сборки, отладка, IDE)

Я особенно ищу то, что вы действительно испытали в своей работе, а не то, что я мог бы найти в Google. Мое приложение было бы серверной службой, обрабатывающей большие объемы данных из временных рядов.

Моей основной целевой платформой будет Linux.

Изменить: чтобы сформулировать мой вопрос более адекватно, меня интересует весь пакет (сторонние библиотеки и т. Д.), А не только язык. Для библиотек это, вероятно, сводится к вопросу «насколько меньше библиотек для Mono, чем для Java»?


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


3
Отличный вопрос. Мы также смотрим на оценку кроссплатформенной разработки.
Mat Nadrofsky 03

Я бы добавил тег "какой язык", но их уже 5, так что не повезло.
Даниэль Даранас,

Сильно зависит от того, на какие платформы вы нацеливаетесь ...
Торбьёрн Равн Андерсен

1
Возможно, сейчас самое время взглянуть на голанг ...
StartupGuy

Xojo тоже заслуживает внимания. Он компилирует собственные приложения с использованием LLVM для Windows, Mac Linux. Он имеет автоматизацию сборки IDE, отладку и т.д. Библиотека имеет множество функций и может быть расширена по мере необходимости. www / xojo.com
Поль Лефевр

Ответы:


96

Что ж .... Java на самом деле более портативна. Mono реализован не везде и значительно отстает от реализации Microsoft. Кажется, что Java SDK лучше синхронизируется между платформами (и работает на большем количестве платформ).

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

Обновление за 2014 год

Я все еще придерживаюсь этого мнения в 2014 году. Тем не менее, я уточню это, сказав, что я только сейчас начинаю уделять некоторое внимание Mono после долгого времени без особого внимания, поэтому могут быть улучшения в среде выполнения Mono (или экосистеме ), о которых я не знал. AFAIK, до сих пор нет поддержки WPF, WCF, WF, of WIF. Mono может работать на iOS, но, насколько мне известно, среда выполнения Java по-прежнему работает на гораздо большем количестве платформ, чем Mono. Кроме того, Mono начинает видеть некоторые значительно улучшенные инструменты (Xamarin), и Microsoft, похоже, имеет гораздо более кроссплатформенное отношение и готовность работать с партнерами, чтобы сделать их взаимодополняющими, а не конкурентоспособными (например, Mono будет довольно важная часть будущего ландшафта OWIN / Helios ASP.NET). Я подозреваю, что в ближайшие годы разница в переносимости быстро уменьшится,

Обновление на 2018 год

Моя точка зрения на это начинает меняться. Я думаю, что .NET в целом, особенно с .NET Core, начала достигать «паритета переносимости» с Java. Сейчас прилагаются усилия по внедрению WPF в .NET Core для некоторых платформ, а сам .NET Core сейчас работает на очень многих платформах. Mono (принадлежит Xamarin, который теперь принадлежит Microsoft) является более зрелым и отточенным продуктом, чем когда-либо, и написание приложений, работающих на нескольких платформах, больше не является областью глубокого понимания хакерства .NET, а является относительно простым делом. . Конечно, существуют библиотеки, службы и приложения, предназначенные только для Windows или предназначенные только для определенных платформ, но то же самое можно сказать и о Java (в широком смысле).

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


2
Я действительно рад прочитать это и рад голосам в мире Microsoft. .NET действительно хорош, но у Java есть законность, как я всегда пытался объяснить как разработчик .NET и старый Java;)
JoeBilly 01

+1 за это. Я обнаружил, что переносимость Java (для нетривиальных приложений, например, веб-серверов, сложных графических интерфейсов пользователя, аналитических механизмов) лучше, чем любая другая альтернатива. Это не совсем идеально, но это лучшее, что вы можете получить прямо сейчас.
mikera

1
@Ben, ты все еще придерживаешься этого мнения в 2013 году? Если да, не могли бы вы упомянуть об этом, и если вы не обновите этот ответ? Часто, читая ответы четырехлетних детей, трудно сказать.
Бенджамин Грюнбаум

1
@BenjaminGruenbaum да, хотя я бы уточнил свое мнение на этом этапе, сказав, что я не уделял много внимания Mono в течение длительного времени, поэтому могут быть улучшения в среде выполнения Mono (или экосистеме), которых я не делал осведомлен о. AFAIK, до сих пор нет поддержки WPF, WCF или WF. Mono может работать на iOS, но, насколько мне известно, среда выполнения Java по-прежнему работает на гораздо большем количестве платформ, чем Mono. Так да. Квалифицировано, но да.
Бен Коллинз

@HighCore как таковой аргумент не против Mono. Это просто констатация факта: если вы пишете код, зависящий от WPF, вы не можете использовать Mono; следовательно, это непереносимо. Фреймворки пользовательского интерфейса Java могут быть отстойными, но, насколько я знаю, они будут работать везде, где работает Java (и оборудование поддерживает такой интерфейс). Это не делает Java лучше , а делает ее более переносимой именно таким образом.
Бен Коллинз

112

Mono лучше ориентируется на платформы, которые я хочу поддерживать. Помимо этого, все это субъективно.

Я использую код C # на следующих платформах: - iOS (iPhone / iPad) - Android - Интернет (HTML5) - Mac (OS X) - Linux - Windows

Я мог бы поделиться им даже в большем количестве мест: - Windows Phone 7 - Wii - XBox - PS3 - и т. Д.

Важнее всего iOS, поскольку MonoTouch работает фантастически. Я не знаю ни одного хорошего способа настроить таргетинг на iOS с помощью Java. Вы не можете настроить Java для Windows Phone 7, поэтому я бы сказал, что времена, когда Java была лучше для мобильных устройств, остались позади.

Но самым большим фактором для меня является личная продуктивность (и счастье). C # как язык на годы опережает Java. IMHO, и .NET framework доставляет удовольствие. Большая часть того, что добавляется в Java 7 и Java 8, уже много лет написано на C #. Хотя языки JVM, такие как Scala и Clojure (оба доступны в CLR), довольно хороши.

Я рассматриваю Mono как самостоятельную платформу (отличную платформу) и отношусь к .NET как к реализации Microsoft Mono в Windows. Это означает, что я сначала разрабатываю и тестирую на Mono. Это прекрасно работает.

Если бы и Java, и .NET (скажем, Mono) были проектами с открытым исходным кодом без какой-либо корпоративной поддержки, я бы каждый раз выбирал Mono вместо Java. Я считаю, что это просто лучшая платформа.

И .NET / Mono, и JVM - отличный выбор, хотя я бы лично использовал для JVM другой язык, кроме Java.

Мое мнение о некоторых других комментариях:

Проблема: Производительность.

** Ответ: И JVM, и CLR работают лучше, чем говорят недоброжелатели. Я бы сказал, что JVM работает лучше. Mono обычно медленнее, чем .NET (хотя и не всегда).

Я лично возьму ASP.NET MVC вместо J2EE в любой день как разработчик, так и конечный пользователь. Поддержка собственного клиента Google тоже довольно крутая. Кроме того, я знаю, что плохая производительность графического интерфейса для настольных приложений Java должна быть в прошлом, но я продолжаю находить медленные. Опять же, то же самое можно сказать и о WPF. GTK # работает достаточно быстро, поэтому нет причин, по которым они должны быть медленными.

Проблема: Java имеет более обширную экосистему доступных библиотек.

Ответ: Возможно, правда, но на практике это не проблема.

Практически каждая библиотека Java (включая JDK) работает на .NET / Mono просто денди благодаря IKVM.NET. . Эта технология - настоящее чудо. Интеграция потрясающая; вы можете использовать библиотеку Java, как если бы она была родной. Однако мне пришлось использовать библиотеки Java только в одном приложении .NET. Экосистема .NET / Mono обычно предлагает больше, чем мне нужно.

Проблема: Java имеет лучшую (более широкую) поддержку инструментов

Ответ: не в Windows. В остальном я согласен. Хотя MonoDevelop хорош.

Я хочу поблагодарить MonoDevelop ; это жемчужина. MonoDevelop объединяет большинство инструментов, которые я хочу использовать, включая завершение кода (intellisense), интеграцию с Git / Subversion, поддержку модульных тестов, интеграцию SQL, отладку, простой рефакторинг и просмотр сборок с декомпиляцией на лету. Замечательно использовать одну и ту же среду для всего, от веб-сервера до мобильных приложений.

Проблема: совместимость на разных платформах.

Ответ: Mono - это единая кодовая база для всех платформ, включая Windows.

Сначала разработайте для Mono и, если хотите, разверните в .NET в Windows. Если вы сравните .NET с MS с Java, то Java имеет преимущество с точки зрения согласованности между платформами. См. Следующий ответ ...

Проблема: Mono отстает от .NET.

Ответ: Нет. ИМХО, это часто повторяющееся, но неверное утверждение.

Дистрибутив Mono от Xamarin поставляется с C #, VB.NET, F #, IronPython, IronRuby и, я думаю, может быть Boo из коробки. Компилятор Mono C # полностью обновлен с помощью MS. Компилятор Mono VB.NET отстает от версии MS. Остальные компиляторы одинаковы на обеих платформах (как и другие языки .NET, такие как Nemerle, Boo и Phalanger (PHP)).

Mono поставляется с большим количеством фактического написанного кода Microsoft, включая среду динамического языка (DLR), платформу управляемой расширяемости (MEF), F # и ASP.NET MVC. Поскольку Razor не является Open Source, Mono в настоящее время поставляется с MVC2, но MVC3 отлично работает с Mono.

Базовая платформа Mono идет в ногу с .NET за многие годы, и ее совместимость впечатляет. Сегодня вы можете использовать весь язык C # 4.0 и даже некоторые функции C # 5.0. Фактически, Mono часто опережает .NET во многих отношениях.

Mono реализует части спецификации CLR, которые не поддерживает даже Microsoft (например, 64-битные массивы). Одна из самых захватывающих новых технологий в мире .NET - это Rosylyn . Mono уже много лет предлагает компилятор C # в качестве услуги. Кое-что из того, что предлагает Rosylyn, также доступно через NRefractory . Примером того, где Mono все еще впереди, могут быть инструкции SIMD для повышения производительности в играх.

Microsoft предлагает ряд продуктов поверх .NET, которые недоступны в Mono, из-за чего возникло неправильное представление о задержке Mono. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) - это примеры продуктов, которые не работают или плохо поддерживаются в Mono. Очевидное решение - использовать вместо этого кроссплатформенные альтернативы, такие как GTK #, NHibernate и ServiceStack.

Проблема: Microsoft - это зло.

Ответ: Верно. Ну и что.

Многие люди предлагают следующие причины избегать использования Mono:

1) Вы не должны использовать Mono, потому что следует избегать технологий Microsoft

2) Mono - отстой, потому что он не позволяет использовать все технологии, которые предлагает Microsoft

Мне ясно, что эти утверждения несовместимы. Я отвергаю первое утверждение, но пропущу здесь этот аргумент. Второе утверждение верно для всех альтернатив .NET.

JVM - отличная платформа, и рост количества языков JVM впечатляет. Используйте то, что делает вас счастливым. На данный момент для меня это чаще всего .NET / Mono.


3
Спасибо за столь обширный ответ, что в конце игры. Я никогда не использовал Mono / .Net / C #, но ваш пост, похоже, отражает некоторые из последних событий в этой вселенной. Например, я не припомню, чтобы MonoTouch был таким значимым 3,5 года назад.
Ханно Фиц

3
Меня смущает ваш ответ «Mono не отстает от .NET». Вы утверждаете это, а затем указываете полдюжины способов, которыми он фактически отстает от .NET (Entity Framework и т. Д.). Можно с уверенностью сказать, что он не отстает от компилятора Microsoft C #, но экосистема .NET в лучшем случае фрагментарна на Mono. Кажется, это подходит для ваших целей, но не для всех, и в этом есть законное беспокойство.
samkass

1
@samkass: Думаю, дело в разнице между «лагами» и «не реализует эту библиотеку». В мире Java это аналогично тому, как в Android не реализована библиотека Swing. Также обратите внимание, что кросс-платформенные (и с открытым исходным кодом, кстати) эквиваленты были предоставлены. Я использую Mono каждый день, и «в лучшем случае фрагментарно» определенно не было моим опытом.
konrad.kruczynski

9
Отсутствие полной и надежной поддержки WCF и EF, а также отсутствие WPF - убийца для Mono практически всего, над чем я работал с .NET 3.0. Да, есть альтернативы, но огромная часть возможностей .NET - это дополнительные фреймворки. Я не думаю, что без них вы вообще можете назвать Mono совместимым с .NET. В лучшем случае это частичная реализация. Я также использовал NHibernate, и, честно говоря, EF - лучшая технология. Никогда не использовал ServiceStack. IMO Mono очень опасен.
MrLane

1
всем, кто пропускает WCF, стоит взглянуть на servicestack. серьезно, отказ от реализации WCF - это хорошо!
unreal

54

На самом деле я занимаюсь разработкой в ​​.NET, запускаю все свои тесты сначала в Mono, а затем в Windows. Таким образом, я знаю, что мои приложения кроссплатформенны. Я сделал это очень успешно как для приложений ASP.NET, так и для Winforms.

Я не совсем уверен, откуда у некоторых людей сложилось впечатление, что Mono настолько ужасен, но он определенно сделал свою работу в моих случаях и мнениях. Это правда, что у вас будет небольшое отставание от последних и величайших изобретений в .NET. world, но пока что .NET 2.0 для Windows и Linux мне очень подходит.

Имейте в виду, что здесь, очевидно, есть много причуд, но большинство из них связано с тем, что вы пишете переносимый код. В то время как фреймворки отлично справляются с абстрагированием от того, на какой ОС вы работаете, такие мелочи, как чувствительность к регистру в путях и именах файлов в Linux, требуют некоторого привыкания, как и такие вещи, как разрешения.

.NET определенно очень кроссплатформенный из-за Mono, исходя из моего опыта.


Назовите меня несведущим, но вам вообще нужно тестировать ASP.NET с моно? Все, что было бы .NET, находится на стороне сервера, поэтому не имеет значения, в какой ОС он отображается?
Итан Гандерсон,

9
Итан, с помощью Mono вы можете размещать приложения ASP.net в Linux.
Эрик Хаскинс,

2
Не все по какой-либо причине хотят запускать свое приложение в Windows.
Бернард

2
@ Богатый Б: если клиенту не нужны продукты MS, очевидно, что .NET - неправильный выбор.
Kjetil Ødegaard,

21
@Kjetil: Mono не является продуктом MS.
ГЕОЧЕТ,

26

Java на самом деле настолько кроссплатформенна, как все говорят. Существует реализация JVM практически для любой основной ОС (даже Mac OS X, наконец), и все они работают очень хорошо. И существует множество инструментов с открытым исходным кодом, которые столь же кроссплатформенны.

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


1
Кроме того, почти в каждом случае, когда Java не может выполнять нативную операцию кроссплатформенным способом, то же самое будет верно и для .NET,
Эли Кортрайт

В заключение? В Mac OS X была реализована JVM с 10.0. :)
mipadi 07

3
@Eli - Наверное, правда. Конечно, гораздо проще интегрировать с нативной функциональностью в .NET / Mono, чем в Java. Итак, если вы просто пытаетесь хорошо интегрироваться с собственной платформой, .NET / Mono предлагает реальное преимущество.
Джастин

"порождение собственных процессов и очистка экрана от результатов" дрожь
Basic

Я бы поспорил с «почти любой основной ОС», поскольку нет готовой JVM ни для Android, ни для iOS. Между тем с помощью новых переносимых библиотек классов в .NET вы действительно можете совместно использовать скомпилированный код (хотя и не практически код пользовательского интерфейса) на разных платформах, включая мобильные.
Mathieson

18

Думаю, вопрос сформулирован неправильно. C # и Java гораздо менее интересны с точки зрения межплатформенного использования, чем (а) какие платформы вам нужно поддерживать, и (б) с учетом основных библиотек и доступных сторонних библиотек. Язык - едва ли не наименее важная часть процесса принятия решений.


Согласовано. Все зависит от того, насколько хорошо поддерживаются виртуальные машины на различных архитектурах.
Allain Lalonde,

Согласовано. Нет никакого удовольствия в полной разработке, если заказчик не может ее запустить.
Торбьёрн Равн Андерсен

15

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

  • Производительность. Java и .Net имеют схожий уровень производительности из-за виртуальной машины, но JVM обычно имеет лучшую производительность из-за многолетней оптимизации.

  • Библиотека. Хотя это зависит от вашей задачи, в Java доступно гораздо больше библиотек с открытым исходным кодом или сторонних разработчиков. Для серверного приложения J2EE, Spring, Struts и т. Д. Для графического интерфейса .Net предоставляет API уровня Win32, но это вызывает проблемы совместимости. В Java есть Swing, SWT, AWT и т.д. Он работает в большинстве случаев.

  • Совместимость. Это ключевые вопросы, которые необходимо учитывать при разработке кроссплатформенной программы. Два вопроса: во-первых, совместимость платформ. Java по-прежнему выигрывает, поскольку JDK хорошо поддерживается единственной оригинальной компанией Sun. Mono не поддерживается MS, поэтому у вас еще нет гарантии совместимости обновлений. 2. Обратная совместимость. Sun поддерживает хорошую репутацию в отношении своей обратной совместимости, хотя иногда это кажется слишком жестким и замедляет темп.

  • Инструменты. У Java есть хорошие кроссплатформенные IDE. Netbeans, Eclipse и др. Большинство из них бесплатны. VS Studio хороша, но только для Windows и стоит недорого. Оба они предоставляют хорошие модульные тесты, отладки, профили и т. Д.

Следовательно, я бы предположил, что Java - лучший выбор. В качестве примера можно привести несколько известных настольных кроссплатформенных приложений, разработанных Java: Vuze, Limewire, BlogBridge, CrossFTP, не говоря уже об этих IDE. Что касается .Net, у меня ограниченные знания о таких успешных приложениях.


Работать с mono на «другом» Linux стало непросто. Это отражает главную проблему моно: будущее моно слишком зависит от диктатуры Мигеля де Икасы. Показательный пример : сокращение поддержки «прочего ... (неподдерживаемого)» [ mono-project.com/Other_Downloads] Linux, похоже, коррелирует ( IMHO ) с разочарованием Мигеля де Иказы в Linux ( tirania.org/blog/archive/ 2013 / март-05.html ). Java не страдает этой проблемой диктатуры. C # может работать на большем количестве платформ, но это сопряжено с большими затратами, рисками, компромиссом и зависимостью от г-на де Икаса. Нет, спасибо.
StartupGuy

@ Michael.M, значит, ты предпочитаешь быть по прихоти Oracle?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Неправильно. Позвольте мне разбить это как можно проще: .Net -> платформа MSFT (стабильная успешная компания; ограниченная, но изящная экосистема); Mono -> De Icaza framework (el dictador; не для Linux, и он показывает: [ cultofmac.com/218632/… - попробуйте установить mono на Centos 6.4, это «неподдерживаемый» кошмар); Java - это спецификация, принадлежащая сообществу и имеющая множество различных реализаций поставщиков (Oracle - только одна из них) [ coderanch.com/t/327542/java/java/…
StartupGuy

@ ThorbjørnRavnAndersen: .. более того, крупный спонсор сообщества Java может даже исключить Oracle и при этом быть успешным и чрезвычайно хорошо поддерживаемым - Java никоим образом не является прихотью Oracle --- см.: News.techworld.com/applications/3252787/ … Oracle может отказаться от всего своего участия в Java, и он все равно будет жить. У каких еще поставщиков есть платформа .Net? Кто еще предоставляет монофоническую среду выполнения, кроме Xamarin? Java - единственная из них, которая не подчиняется диктатуре и имеет настоящий контроль сообщества, поддержку сообщества и руководство сообществом.
StartupGuy

1
@ Michael.M Спецификация? Принадлежит к сообществу? Я думаю, что вы ошибаетесь - я также считаю, что единственной причиной того, что проект OpenJDK не был закрыт после приобретения Sun, была GPL. Java находится в железном кулаке Oracle просто потому, что TCK не доступен в свободном доступе, а это то, что необходимо для создания JVM, которая ведет себя как JVM Oracle. У меня нет проблем с Mono или De Icaza, но я не думаю, что ситуация с Java намного лучше. Единственный имеющий импульс альтернативный проект JVM умер, когда IBM прекратила его поддерживать.
Thorbjørn Ravn Andersen


8

Я тоже скажу Java. Если вы посмотрите на это с точки зрения зрелости, Sun (и другие) потратили гораздо больше времени и усилий на то, чтобы заставить JVM работать на платформах, отличных от Windows.

Напротив, Mono определенно является гражданином второго сорта в экосистеме .NET.

В зависимости от того, кто ваши целевые клиенты, вы также можете обнаружить, что есть реальный отпор против использования Mono - предлагает ли Novell такую ​​же поддержку от поставщиков для Mono, которую вы получили бы для Java или .NET в Windows?

Если бы вы в первую очередь ориентировались на размещение своей службы в Windows, было бы разумно рассмотреть этот выбор, но, поскольку вы ориентируетесь в первую очередь на Linux, мне это кажется очевидным.


Я склонен согласиться с тем, что Моно - гражданин второго сорта, но не с заключением. Java существует уже давно и изобилует унаследованными причудами и проблемами управления памятью, не говоря уже о том, что она почти всегда выбирает наиболее подробный способ сделать что-либо. Он также был довольно застойным (язык) в течение многих лет и только недавно начал включать функции, которые были в .Net в течение многих лет. ИМХО, это выбор между двумя бедами ... Поддержка платформы Flakey с .Net или неуклюжего гиганта, который очень медленно развивается и для которого сложно кодировать.
Basic

7

Java была разработана как кроссплатформенная; C # /. Net не было. В случае сомнений используйте инструмент, разработанный специально для вас.

РЕДАКТИРОВАТЬ: честно говоря, .NET был разработан для работы во встроенных / ПК / серверных средах, так что это СОРТ кроссплатформенного. Но он не был разработан для Linux.


3
ну, C # стандартизирован ISO, поэтому идея заключалась в том, чтобы сделать что-то кроссплатформенное. Microsoft не хотела разрабатывать реализации для других платформ, но это оставлено на усмотрение других сторон, поскольку язык является стандартом. Однако структура .Net - более сложная история.
zappan

Однако Mono - хорошая реализация, а DotGNU (также для Mac)
Андрей Ринеа

1
zappan: верная точка на C # (не знал), но .NET чертовски огромен. По общему признанию, у меня нет личного опыта здесь.
AlexeyMK 01

@zappan - с практической точки зрения не имеет значения, что C # стандартизирован (или что Mono является довольно хорошим клоном C #). Переносимость платформы касается всей платформы (включая библиотеки и экосистему инструментов), а не только самого языка. В этом смысле .Net определенно не является полностью кроссплатформенным.
mikera

7

Я думаю, что ответ - это зависит от обстоятельств. Java работает практически на чем угодно, но .NET / Mono (IMHO) является лучшей платформой для рабочего стола. Думаю, ответ действительно зависит от того, на какие платформы вы планируете ориентироваться.


Рабочий стол не является синонимом окна, хотя на него приходится самая большая часть рабочего стола.
ZOXIS

6

Чтобы добавить немного больше к разговору, Java более портативна, если вы останетесь примерно на одну версию позади - Java 5 по-прежнему имеет много отличных функций, поэтому вы можете дождаться Java 6 и по-прежнему иметь большой выбор языков и библиотек для разработки с участием. Mac - это основная платформа, которой может потребоваться некоторое время, чтобы догнать последнюю версию Java.

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


OS X 10.6 теперь полностью догнала версию Sun Java 6.
Торбьорн Равн Андерсен

5

Я бы проголосовал за то, чтобы Java была более портативной, чем C #. В Java определенно также есть очень богатый набор стандартных библиотек. Существует также широкий набор сторонних библиотек с открытым исходным кодом, например, предоставленных проектом Jakarta ( http://jakarta.apache.org/ ).

Все обычные подозреваемые существуют также для CI, модульного тестирования и т. Д. Кросс-платформенная поддержка IDE также очень хороша с такими, как Eclipse, Netbeans, IntelliJ IDEA и т. Д.


4

Есть и другие варианты языка. Я очень полюбил Python, который хорошо работает в Windows, Linux и Mac и имеет богатый набор библиотек.


Да, я люблю Python, и в нем есть Django, который мне нравится в веб-приложениях, но были некоторые вещи, которые делали его неприемлемым, наиболее важным из которых является GIL в стандартной реализации интерпретатора C. У меня есть ряд операций, которые сильно выигрывают от параллельных вычислений на многоядерных машинах, и мне пришлось бы запускать процессы для этого в cPython.
Hanno Fietz 02

3

Хотя у Mono есть свои проблемы я думаю, что у него лучшая кроссплатформенная совместимость, особенно если вы полагаетесь на вызов собственной платформы.

Недостаточно слов о переполнении стека, чтобы подчеркнуть, насколько плавнее получить что-то родное, вызываемое и выполняемое в .NET / Mono (по крайней мере, по моему опыту 3 ...) на нескольких платформах по сравнению с эквивалентными усилиями Java.


Я согласен, вызвать код конкретной платформы из .NET / Mono очень просто, если его можно вызвать из C. С CXXI ​​(произносится сексуально) вызов кода C ++ также становится легкой прогулкой. tirania.org/blog/archive/2011/Dec-19.html
Джастин

2

Гаторхолл, у вас есть данные для подтверждения ?

Производительность. Java и .Net имеют схожий уровень производительности из-за виртуальной машины, но JVM обычно имеет лучшую производительность из-за многолетней оптимизации.

Предыстория: я работаю с Windows начиная с Windows 3.1 и в настоящее время использую Linux (все еще использую Windows 7, отличную ОС, на виртуальной машине для Visual Studio 2010 и других инструментов).

Дело в том, что я и многие пользователи (windows, linux и т. Д.), Которых я знаю, могу не согласиться с вами. Java имеет тенденцию работать медленнее даже в настольном приложении Linux, ASP.NET во многих случаях работает быстрее, чем страницы сервера Java. Некоторые могут согласиться с тем, что даже некомпилированный PHP работает лучше в нескольких сценариях.

Java более кроссплатформенная? Я не сомневаюсь в этом (история говорит об этом), но быстрее (не говоря уже о .NET) не так уверенно, и я хотел бы увидеть несколько реальных тестов.


Есть еще один вопрос, который может помочь, и, конечно же, есть языковая перестрелка . JVM может быть более сильно оптимизирована, но она близка (особенно в Windows). Тесты для ASP.NET против J2EE или JSP еще более подозрительны, но я без труда могу поверить, что ASP.NET намного быстрее, даже если время выполнения совпадает.
Джастин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.