Чи є .NET / Mono або Java кращим вибором для розробки платформ? [зачинено]


108

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

Мені не вистачає огляду на обидві альтернативи, але я маю дуже багато свободи вибору для свого наступного проекту. Я шукаю важкі технічні факти в районах Російської Федерації

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

Я особливо шукаю те, що ви насправді переживали у власній роботі, а не те, що я міг би гугл. Мій додаток - це бэк-енд-сервіс, який обробляє велику кількість даних із часових рядів.

Моєю основною цільовою платформою буде Linux.

Редагувати: Щоб більш чітко сформулювати моє запитання, мене цікавить весь пакет (сторонні бібліотеки тощо), а не лише мова. Для бібліотек це, мабуть, зводиться до питання "наскільки менше бібліотек для Mono, ніж для Java"?


FYI, з цього часу я вибрав Java для цього проекту, тому що він здавався просто більш бойовим на переносимості, і він вже деякий час був у старих системах. Мені це зовсім трохи сумно, тому що мені дуже цікаво C # і я хотів би зробити якийсь великий проект у ньому, але, можливо, наступного разу. Дякую за всі поради.


3
Чудове запитання. Ми також розглядаємо оцінку розвитку кросплатформ.
Мат Надрофський

Я додав би тег "на якій мові", але їх уже 5, тому не пощастило.
Даніель Даранас

Сильно залежить від того, на які платформи ви орієнтовані ...
Thorbjørn Ravn Andersen

1
Тепер, можливо, вам вдалий час поглянути на голанг ...
StartupGuy

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

Відповіді:


96

Ну .... Java насправді більш портативний. Моно не впроваджується скрізь, і значно відстає від впровадження Microsoft. Здається, SDK Java залишається в кращій синхронізації на різних платформах (і працює на більшості платформ).

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

Оновлення за 2014 рік

Я все ще дотримуюся цієї думки в 2014 році. Однак, я кваліфікую це, кажучи, що я зараз починаю приділяти деяку увагу Mono через тривалий час не дуже турботливих, тому в режимі виконання моно (або екосистемі можуть бути покращення). ) про що мені не відомо. AFAIK, досі немає підтримки WPF, WCF, WF, WIF. Моно може працювати на 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 (широко).

Якби я в цей момент був у взутті ОП, я не можу придумати жодних причин, притаманних самим мовам або технологічним стекам, які б заважали мені вибрати .NET для будь-якої програми, що рухається вперед з цього моменту.


2
Я дуже радий прочитати це і радісно про голоси у світі Microsoft. .NET - це справді добре, але Java мають легітимність, як я завжди намагався пояснити як
розробник

+1 для цього. Я вважав, що портативність Java (для нетривіальних додатків, тобто веб-серверів, складних графічних інтерфейсів, аналітичних двигунів) краща за будь-яку іншу альтернативу. Це не зовсім ідеально, але це найкраще, що ви можете отримати зараз.
мікера

1
@Ben, ви все ще дотримуєтесь цієї думки у 2013 році? Якщо ви це робите, чи не заперечуєте ви про це, і якщо ви не оновлюєте цю відповідь? Дуже багато разів, читаючи відповіді 4-річного віку, важко сказати.
Бенджамін Груенбаум

1
@BenjaminGruenbaum так, хоча я би кваліфікував свою думку на даний момент, кажучи, що я давно не приділяв Mono великої уваги, тому в режимі виконання моно (або екосистемі) можуть бути покращення, якими я не був усвідомлював. AFAIK, досі немає підтримки для WPF, WCF або WF. Моно може працювати на iOS, але, наскільки мені відомо, час роботи Java все ще працює на набагато більше платформах, ніж Mono. Отже ... так. Кваліфікований, але так.
Бен Коллінз

@HighCore сам аргумент не проти Mono. Це лише констатація факту: якщо ви пишете код, залежний від WPF, ви не можете використовувати Mono; Ерго, це нерепортаж. Рамки інтерфейсу Java можуть бути достатніми, але, наскільки я знаю, вони працюватимуть у будь-якому місці, де працює Java (і апаратне забезпечення підтримує такий тип інтерфейсу). Це не робить Java кращою , вона робить її більш портативною саме таким чином.
Бен Коллінз

112

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 для мене.


3
Дякую за таку обширну відповідь, що пізно в грі. Я не використовував Mono / .Net / C # ніколи, але, здається, ваш пост відображає деякі новітні події у цьому Всесвіті. Наприклад, я не пригадую, щоб MonoTouch був таким значним 3,5 роки тому.
Hanno Fietz

3
Мене бентежить ваша відповідь "Моно не відстає .NET". Ви це стверджуєте, тоді викладіть півдюжини способів, якими він насправді відстає .NET (Entity Framework тощо). Можна з упевненістю сказати, що він не відстає від компілятора C # від Microsoft, але екосистема .NET в кращому випадку фрагментарна щодо Mono. Здається, це нормально для ваших цілей, але не для всіх, і там є законна турбота.
samkass

1
@samkass: Я думаю, що в цьому полягає різниця між "відставаннями" і "не реалізує цю бібліотеку". У світі Java ви можете знайти цей аналог Android, який не впроваджує бібліотеку Swing. Зверніть також увагу, що еквіваленти між платформами (та з відкритим кодом, btw) були надані. Я використовую Mono кожен день, і «фрагментарний в кращому випадку», безумовно, не був моїм досвідом.
konrad.kruczynski

9
Відсутність повноцінної та надійної підтримки WCF та EF, і жоден WPF не є вбивцею для Mono майже для всього, над чим я працював з .NET 3.0. Так, є альтернативи, але величезна частина потужності .NET - це ці додаткові рамки. Без цього я не думаю, що ви взагалі можете назвати Mono сумісним із .NET. Це часткова реалізація в кращому випадку. Я також використовував NHibernate і, чесно кажучи, EF - це набагато краща технологія. Ніколи не використовувався ServiceStack. IMO Mono - це значною мірою ризик.
MrLane

1
всі, хто не вистачає WCF, повинні подивитися на атаку служб. серйозно, не реалізація WCF була хорошою справою!
нереально

54

Я фактично розвиваюся в .NET, запускаю всі свої тести спочатку на Mono, а потім на Windows. Таким чином я знаю, що мої програми є кросплатформенними. Я зробив це дуже успішно і в додатках ASP.NET, і в Winforms.

Я не дуже впевнений, звідки у когось складається враження, що Моно настільки жахливе, але це, безумовно, зробило свою роботу в моїх справах і думках. Правда, у вас буде трохи відставання щодо останніх і найбільших винаходів у .NET світу. Але поки що .NET 2.0 для Windows та Linux для мене дуже солідний.

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

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


Називайте мене невігласом, але чи потрібно вам навіть тестувати ASP.NET з моно? Все, що було б .NET - це сервер, тому не має значення, на якій ОС він відображається, чи не так?
Етан Гундерсон

9
Етан, використовуючи Mono, ви можете розміщувати програми ASP.net в Linux.
Ерік Хаскінс

2
Не всі хочуть запускати свою програму в Windows з будь-якої причини.
Бернард

2
@ Rich B: якщо клієнт не хоче продуктів MS, .NET очевидно неправильний вибір.
Kjetil Ødegaard

21
@Kjetil: Моно не продукт MS.
ГЕОЧЕТ

26

Java насправді настільки ж кросплатформна, як всі кажуть. Існує реалізація JVM для майже будь-якої основної ОС там (навіть Mac OS X, нарешті), і всі вони працюють дуже добре. І є багато інструментів з відкритим кодом, які є настільки ж крос-платформою.

Єдина уловка полягає в тому, що є певні нативні операції, які ви не можете зробити на Java без написання деяких DLL або SO. Дуже рідко вони трапляються на практиці. Однак у всіх цих випадках мені вдалося обійти його, нерестуючи рідні процеси та закресливши результати.


1
Крім того, майже в кожному випадку, коли Java не може виконувати
натисну

Нарешті? Mac OS X має реалізацію JVM з 10.0. :)
mipadi

3
@Eli - Мабуть, правда. Це, звичайно, набагато, набагато простіше інтегрувати з нативною функціональністю в .NET / Mono, ніж це в Java. Отже, якщо ви просто намагаєтесь добре інтегруватися з рідною платформою, .NET / Mono пропонують справжню перевагу.
Джастін

"нерестування нативних процесів та екранування результатів" здригається
Basic

Я б міг посперечатися з "майже будь-якою основною ОС", оскільки не існує JVM з коробки ні для Android, ні для iOS. З новою бібліотекою портативного класу в .NET, тим часом, ви можете ділитися скомпільованим кодом (хоча і практично не кодом інтерфейсу) на будь-яких платформах, включаючи мобільну.
Матхісон

18

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


Домовились. Справа в тому, наскільки добре підтримуються віртуальні машини в різних архітектурах.
Аллайн Лалонде

Домовились. Немає задоволення від повноцінної розробки, якщо клієнт не може її виконати.
Thorbjørn Ravn Andersen

15

Java - кращий вибір для розвитку кросплатформ.

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

  • Бібліотека. Хоча це залежить від вашого завдання, Java має набагато більше бібліотек з відкритим кодом або сторонніми бібліотеками. Для серверних додатків, J2EE, Spring, Struts тощо для GUI, хоча .Net надає API рівня Win32, але це спричиняє проблеми сумісності. У Java є Swing, SWT, AWT тощо. Це працює в більшості випадків.

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

  • Інструменти. У Java є хороші міжплатформні IDE. Netbeans, Eclipse тощо. Більшість з них є безкоштовними. VS Studio хороший, але тільки в Windows, і не коштує мало. Вони обидва забезпечують хороші одиничні тести, налагодження, профілі тощо.

Тому я б припустив, що Java - кращий вибір. Як показовий випадок, є кілька відомих настільних кросплатформних додатків, розроблених Java: Vuze, Limewire, BlogBridge, CrossFTP, не кажучи вже про ці IDE. Щодо .Net, я маю обмежені знання про такі програми успіху.


Робота з моно на "іншому" Linux отримала складність. Це відображає основну проблему моно: Майбутнє моно занадто залежить від диктатури Мігеля де Ікази. У конкретному випадку : зменшення підтримки для "інших ... (непідтримується)" [ mono-project.com/Other_Downloads] Linux, схоже, співвідноситься ( IMHO ) з розчаруванням Мігеля де Ікази в Linux ( tirania.org/blog/archive/ 2013 / березень-05.html ). Ява не страждає від цієї проблеми диктатури. C # може працювати на більше платформах, але це пов'язано з більшою вартістю, ризиком, компромісом та залежністю від пана де Іказа. Ні, дякую.
StartupGuy

@ Michael.M, тож ти вважаєш за краще вийти на примху Oracle?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Неправильно. Дозвольте мені зруйнувати її так просто, як я можу: .Net -> MSFT платформа (стабільна успішна компанія; обмежена, але акуратна екосистема); Mono -> фреймворк De Icaza (el dictador; не гарячий для Linux, і це показує: [ cultofmac.com/218632/… - спробуйте встановити моно на 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. У мене немає проблем з Моно чи Де Іказою, але я не думаю, що ситуація на Java набагато краща. Єдиний альтернативний проект JVM з імпульсом загинув, коли IBM перестала його підтримувати.
Thorbjørn Ravn Andersen


8

Я також скажу Java. Якщо ви подивитесь на це з точки зору зрілості, Sun (та інші) витратили набагато більше часу та зусиль на те, щоб JVM працював на платформах, які не є Windows.

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

Залежно від того, хто є вашими цільовими клієнтами, ви також можете виявити, що існує реальна відмова від використання Mono - чи Novell пропонує такий самий тип підтримки для Mono для постачальників Mono, який ви отримаєте для Java або .NET в Windows?

Якщо ви орієнтувались головним чином на розміщення свого сервісу в Windows, було б доцільно розглянути цей вибір, але, оскільки ви орієнтуєтесь в першу чергу на Linux, це здається мені неначе модним.


Я схильний погоджуватися з тим, що Моно є громадянином 2-го класу, але не з висновком. Ява існує вже давно, і вона пронизана застарілими химерностями, а питання управління пам’яттю не згадується, що вона майже завжди вибирає найбільш багатослівний спосіб робити щось. Він також був досить застійним (мова) протягом багатьох років і лише нещодавно почав включати функції, які були в .Net роками. IMHO, це вибір між двома злими ... Платформа Flakey підтримує w / .Net або дрімаючий бегемот, який дуже повільно розвивається, і завдання для кодування.
Основні

7

Java була розроблена як кросплатформна; C # /. Чистий не був. Коли ви сумніваєтесь, використовуйте інструмент, який був розроблений для ваших цілей.

EDIT: Справедливо кажучи, .NET був розроблений для роботи у вбудованому середовищі / ПК / сервер, так що це SORT крос-платформи. Але він не був розроблений для Linux.


3
добре, C # є стандартизованим ISO, тому ідея полягала в тому, щоб мати щось кросплатформенне. microsoft не хотів розробляти реалізацію для інших платформ, але це залишається іншим сторонам, оскільки мова є стандартною. Рамка .Net, однак, є більш складною історією.
заппан

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

1
zappan: дійсна точка на C # (не знав), але .NET чуйно величезний. Звичайно, у мене немає особистого досвіду.
AlexeyMK

@zappan - з практичної точки зору, не має значення, що C # є стандартизованим (або що Mono робить досить хороший клон C #). Переносимість платформи стосується всієї платформи (включаючи бібліотеки та екосистему інструментів), а не самої мови. У цьому сенсі. Net, безумовно, не є повністю кросплатформенним.
mikera

7

Я думаю, що відповідь "це залежить". Java працює майже будь-що, але .NET / Mono є (IMHO) кращою основою для робочого столу. Тож я думаю, що відповідь дійсно залежить від платформ, які ви плануєте орієнтувати.


Робочий стіл не є синонімом Windows, хоча він займає найбільшу частину простору робочого столу.
ZOXIS

6

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

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


OS X 10.6 тепер повністю наздогнав випуск Sun Java 6.
Thorbjørn Ravn Andersen

5

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

Усі звичайні підозрювані існують також для ІС, тестування одиниць тощо. Підтримка крос-платформи IDE також дуже хороша, як у Eclipse, Netbeans, IntelliJ IDEA тощо.


4

Є й інші варіанти вибору мови. Я дуже захопився Python, який добре працює в Windows, Linux та Mac, і має багатий набір бібліотек.


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

3

Поки Моно має свою частку проблем я думаю, що він має кращу історію сумісності між платформами, особливо якщо ви покладаєтесь на виклик рідної платформи.

На Stack Overflow недостатньо слів, щоб підкреслити, наскільки плавніше отримати щось, що називається та виконується в .NET / Mono на (принаймні, за моїм досвідом 3 ...) декількох платформах, порівняно з рівноцінними зусиллями Java.


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

2

Gatorhall у вас є якісь дані, щоб підкріпити це?

Продуктивність. Java та .Net мають аналогічний рівень продуктивності завдяки віртуальній машині, але JVM, як правило, має кращі показники роботи через роки та роки оптимізації.

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

Справа: я та багато користувачів (Windows, Linux та ін.), Яких я знаю, можуть не погодитися з вами. Java, як правило, працює повільніше навіть на настільному додатку Linux, ASP.NET виконує швидше, ніж сторінки сервера Java у багато разів. Деякі можуть погодитись, що навіть некомпільований PHP працює краще в декількох сценаріях.

Java - більше кросплатформна? У мене немає жодних сумнівів з цього приводу (історія назад), але швидше (не кажу.


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