Mono робить кращу роботу в орієнтації на платформи, які я хочу підтримати. Крім цього, це все суб'єктивно.
Я поділяю код C # на наступні платформи: - iOS (iPhone / iPad) - Android - Web (HTML5) - Mac (OS X) - Linux - Windows
Я міг би поділитися ним ще більше місць: - Windows Phone 7 - Wii - XBox - PS3 - і т.д.
Біггі - це iOS, оскільки MonoTouch працює фантастично. Я не знаю жодного хорошого способу націлити iOS за допомогою Java. Ви не можете орієнтуватися на Windows Phone 7 за допомогою Java, тому я б сказав, що дні Яви, які є кращими для мобільних пристроїв, відстають від нас.
Найбільшим фактором для мене є особиста продуктивність (і щастя). C # як мова на багато років випереджає Java IMHO, і .NET-фреймворк радісно використовувати. Більшість того, що додається в Java 7 та Java 8, є у C # роками. Мови JVM, такі як Scala та Clojure (обидва доступні в CLR), дуже приємні.
Я бачу Mono як платформу сама по собі (чудова) і трактую .NET як реалізацію Mono в Microsoft для Windows. Це означає, що я першим розробляю і тестую Mono. Це чудово працює.
Якщо і Java, і .NET (скажімо моно) були проектами з відкритим кодом без будь-якої корпоративної підтримки, я б обирала Mono над Java кожен раз. Я вважаю, що це просто краща платформа.
І .NET / Mono, і JVM - чудовий вибір, хоча я особисто використовую іншу мову, ніж Java, на JVM.
Я приймаю деякі інші коментарі:
Випуск: Продуктивність.
** Відповідь: І JVM, і CLR працюють краще, ніж недоброзичливці кажуть. Я б сказав, що СВМ працює краще. Моно звичайно повільніше, ніж .NET (хоча не завжди).
Я особисто брав ASP.NET MVC над J2EE будь-який день як розробник і кінцевий користувач. Підтримка Google Native Client теж досить крута. Крім того, я знаю, що низька продуктивність графічного інтерфейсу для настільних додатків 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 має перевагу в плані узгодженості на різних платформах. Дивіться наступну відповідь ...
Випуск: Моно відстає .NET.
Відповідь: Ні, це не так. ІМХО, це часто заявлене, але неправильне твердження.
Поширення Mono від Xamarin поставляється з C #, VB.NET, F #, IronPython, IronRuby, і я думаю, що, можливо, Бу вийшов з коробки. Компілятор Mono C # повністю в курсі MS. Компілятор Mono VB.NET затримує версію MS. Інші компілятори однакові на обох платформах (як і інші мови .NET, такі як Nemerle, Boo та Phalanger (PHP)).
Моно постачається з великою кількістю фактичного письмового коду Microsoft, включаючи динамічну мову виконання (DLR), керовану рамку розширення (MEF), F # та ASP.NET MVC. Оскільки Razor не є відкритим кодом, Mono в даний час постачається з MVC2, але MVC3 працює на Mono просто чудово.
Основна платформа Mono йшла в ногу з .NET або багато років, і сумісність вражає. Сьогодні ви можете використовувати повну мову C # 4.0 та навіть деякі функції C # 5.0. Насправді Mono часто веде .NET багато в чому.
Mono реалізує частини специфікації CLR, які навіть Microsoft не підтримує (як 64-бітні масиви). Один з найбільш захоплюючих нових технологій у світі .NET - Розилін . Mono пропонував компілятор C # як послугу протягом багатьох років. Деякі з пропозицій Rosylyn доступні і через NRefractory . Прикладом того, як Mono ще випереджає, будуть інструкції SIMD для прискорення ігрових можливостей.
Корпорація Майкрософт пропонує ряд продуктів на додаток до .NET, які не доступні в Mono, і це неправильне уявлення про відставання Mono. Фонд презентацій Windows (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 для мене.