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

StackOverflow https://stackoverflow.com/questions/61559

Вопрос

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

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

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

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

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

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


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

Это было полезно?

Решение

Well....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 пейзаж).Я подозреваю, что в ближайшие годы различия в переносимости будут быстро уменьшаться, особенно после того, как .NET станет открытым исходным кодом.

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

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

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

Другие советы

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

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

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

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

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

Я рассматриваю Mono как самостоятельную платформу (отличную) и рассматриваю .NET как реализацию Mono от Microsoft в 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 app.Экосистема .NET / Mono обычно предлагает больше, чем мне нужно.

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

Ответ:Только не в Windows.В остальном я согласен.Хотя монодевелопинг - это хорошо.

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

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

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

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

Проблема:Моно-лаги.НЕТТО.

Ответ:Нет, это не так. ИМХО, это часто высказываемое, но неверное утверждение.

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

Mono поставляется с большим количеством собственно написанного Microsoft кода, включая Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F # и ASP.NET MVC.Поскольку Razor не имеет открытого исходного кода, Mono в настоящее время поставляется с MVC2, но MVC3 работает на Mono просто отлично.

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

Mono реализует части спецификации CLR, которые даже Microsoft не поддерживает (например, 64-разрядные массивы).Одна из самых захватывающих новых технологий в мире .NET - это Розилин.Mono уже много лет предлагает компилятор C # в качестве сервиса.Кое-что из того, что предлагает Rosylyn, доступно через Нерефракторный также хорошо.Примером того, что 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

Для меня очевидно, что эти утверждения несовместимы.Я отвергаю первое утверждение, но опущу этот аргумент здесь.Второе утверждение верно для всех .ЧИСТЫЕ альтернативы.

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

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

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

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

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

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

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

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

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

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

  • Библиотека.Хотя это зависит от вашей задачи, в Java доступно гораздо больше библиотек с открытым исходным кодом или сторонних разработчиков.Для серверного приложения, J2EE, Spring, распорок и т.д.Хотя для графического интерфейса пользователя .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, у меня ограниченные знания о таких успешных приложениях.

Я задавал тот же вопрос с опозданием, и, ИМХО, .NET / Mono кажется лучшим вариантом просто потому, что Mono имеет отличный послужной список для кросс-платформенных настольных приложений (в отличие от Java) и, конечно, Mono совершенствуется не по дням, а по часам в наши дни.

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

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

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

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

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

Редактировать:справедливости ради, .NET был разработан для работы во встроенных средах / PC / Server, так что это СВОЕГО рода кроссплатформенность.Но он не был разработан для Linux.

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

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

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

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

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

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

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

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

Гейторхолл у вас есть какие-нибудь данные, подтверждающие это?

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

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

В чем суть:я и многие пользователи (Windows, Linux и т.д.) Я знаю, что вы можете с этим не согласиться.Java имеет тенденцию работать медленнее даже в настольных приложениях Linux, ASP.NET во многих случаях она выполняется быстрее, чем страницы Java server.Некоторые могут согласиться с тем, что даже некомпилированный PHP работает лучше в нескольких сценариях.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top