GNU/Linux >> Znalost Linux >  >> Linux

Je .NET/Mono nebo Java lepší volbou pro vývoj napříč platformami?

No....Java je vlastně přenosnější. Mono není implementováno všude a výrazně zaostává za implementací Microsoftu. Zdá se, že Java SDK zůstává v lepší synchronizaci mezi platformami (a funguje na více platformách).

Také bych řekl, že Java má větší dostupnost nástrojů na všech těchto platformách, ačkoliv na platformách Windows je pro .NET dostupných mnoho nástrojů.

Aktualizace pro rok 2014

Tento názor zastávám i v roce 2014. Uvedu to však tím, že po dlouhé době, kdy mě to opravdu nezajímá, začínám Mono věnovat určitou pozornost, takže možná dojde ke zlepšení běhového prostředí Mono (nebo ekosystému ), o kterých jsem nebyl informován. AFAIK, stále neexistuje podpora pro WPF, WCF, WF nebo WIF. Mono může běžet na iOS, ale pokud vím, běhové prostředí Java stále běží na mnohem více platformách než Mono. Mono také začíná vidět některé mnohem vylepšené nástroje (Xamarin) a zdá se, že Microsoft má mnohem více multiplatformní přístup a ochotu spolupracovat s partnery, aby byli komplementární, spíše než konkurenceschopní (například Mono bude docela důležitou součástí připravovaného prostředí OWIN/Helios ASP.NET). Mám podezření, že v nadcházejících letech se rozdíly v přenositelnosti budou rychle zmenšovat, zvláště poté, co bude .NET open source.

Aktualizace pro rok 2018

Můj pohled na to začíná jít jiným směrem. Myslím, že .NET, obecně, zejména s .NET Core, začal dosahovat „parity přenositelnosti“ s Javou. Probíhají snahy o zavedení WPF do .NET Core pro některé platformy a samotné .NET Core nyní běží na mnoha platformách. Mono (vlastněný společností Xamarin, kterou nyní vlastní Microsoft) je vyzrálejší a vyleštěnější produkt než kdy předtím a psaní aplikací, které fungují na více platformách, již není doménou hluboké gnóze .NET hackerství, ale jde o relativně přímočarou záležitost. . Existují samozřejmě knihovny a služby a aplikace, které jsou pouze pro Windows nebo mohou cílit pouze na konkrétní platformy – ale totéž lze říci o Javě (obecně).

Kdybych byl v tuto chvíli v kůži OP, nenapadá mě žádný důvod, který by spočíval v samotných jazycích nebo technologických hromadách, které by mi bránily ve výběru .NET pro jakoukoli aplikaci od tohoto okamžiku.


Mono odvádí lepší práci při cílení na platformy, které chci podporovat. Kromě toho je to všechno subjektivní.

Sdílím kód C# na následujících platformách:- iOS (iPhone/iPad)- Android- Web (HTML5)- Mac (OS X)- Linux- Windows

Mohl bych to sdílet na více místech:- Windows Phone 7- Wii- XBox- PS3- atd.

Největší předností je iOS, protože MonoTouch funguje fantasticky. Neznám žádný dobrý způsob, jak cílit na iOS pomocí Javy. Na Windows Phone 7 nelze cílit pomocí Javy, takže bych řekl, že časy lepší Javy pro mobily jsou za námi.

Největším faktorem je pro mě osobní produktivita (a štěstí). C# jako jazyk je IMHO roky před Javou a .NET framework je radost používat. Většina toho, co se přidává v Javě 7 a Javě 8, je už léta v C#. Jazyky JVM jako Scala a Clojure (oba dostupné na CLR) jsou ale docela pěkné.

Mono vidím jako platformu jako takovou (skvělou) a považuji .NET za implementaci Mono na Windows od Microsoftu. To znamená, že nejprve vyvíjím a testuji na Mono. Funguje to úžasně.

Pokud by Java i .NET (řekněme Mono) byly Open Source projekty bez jakékoli firemní podpory, pokaždé bych zvolil Mono před Javou. Věřím, že je to jen lepší platforma.

.NET/Mono i JVM jsou skvělá volba, i když osobně bych na JVM použil jiný jazyk než Java.

Můj názor na některé další komentáře:

Problém:Výkon.

**Odpověď:JVM i CLR fungují lépe, než tvrdí kritici. Řekl bych, že JVM funguje lépe. Mono je obecně pomalejší než .NET (i když ne vždy).

Osobně bych ASP.NET MVC over J2EE bral každý den jako vývojář i jako koncový uživatel. Podpora pro Google Native Client je také docela fajn. Také vím, že špatný výkon GUI pro desktopové Java aplikace by měl být minulostí, ale stále nacházím pomalé. Pak bych znovu mohl říci totéž o WPF. GTK# je ale dost rychlé, takže není důvod, aby musely být pomalé.

Problém:Java má k dispozici větší ekosystém knihoven.

Odpověď:Pravděpodobně je to pravda, ale v praxi to není problém.

Prakticky každá Java knihovna (včetně JDK) běží jednoduše na .NET/Mono díky IKVM.NET. Tento kus technologie je skutečný zázrak. Integrace je úžasná; můžete použít knihovnu Java stejně jako byla nativní. Knihovny Java jsem však musel používat pouze v jedné aplikaci .NET. Ekosystém .NET/Mono obecně nabízí více, než potřebuji.

Problém:Java má lepší (širší) podporu nástrojů

Odpověď:Ne na Windows. Jinak souhlasím. MonoDevelop je ale pěkný.

Chci křičet na MonoDevelop; je to klenot. MonoDevelop integruje většinu nástrojů, které chci používat, včetně dokončování kódu (intellisense), integrace Git/Subversion, podpory testů jednotek, integrace SQL, ladění, snadného refaktorování a procházení sestav s dekompilací za běhu. Je úžasné používat stejné prostředí pro všechno od webu na straně serveru po mobilní aplikace.

Problém:Kompatibilita napříč platformami.

Odpověď:Mono je jednotná kódová základna pro všechny platformy včetně Windows.

Nejprve vyvíjejte pro Mono a pokud chcete, nasaďte na .NET ve Windows. Pokud porovnáte .NET od MS k Javě, pak má Java výhodu z hlediska konzistence napříč platformami. Viz další odpověď...

Problém:Mono zaostává .NET.

Odpověď:Ne, nedělá. IMHO je to často uváděné, ale nesprávné tvrzení.

Distribuce Mono od Xamarin je dodávána s C#, VB.NET, F#, IronPython, IronRuby a myslím, že možná Boo z krabice. Kompilátor Mono C# je zcela aktuální s MS. Kompilátor Mono VB.NET zaostává za verzí MS. Ostatní kompilátory jsou na obou platformách stejné (stejně jako ostatní jazyky .NET jako Nemerle, Boo a Phalanger (PHP)).

Mono se dodává s velkým množstvím skutečného psaného kódu společnosti Microsoft včetně Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F# a ASP.NET MVC. Protože Razor není Open Source, Mono se aktuálně dodává s MVC2, ale MVC3 funguje na Mono v pohodě.

Základní platforma Mono drží krok s .NET již mnoho let a kompatibilita je působivá. Dnes můžete používat celý jazyk C# 4.0 a dokonce i některé funkce C# 5.0. Mono ve skutečnosti často vede .NET v mnoha ohledech.

Mono implementuje části specifikace CLR, které ani Microsoft nepodporuje (jako 64bitová pole). Jednou z nejzajímavějších nových technologií ve světě .NET je Rosylyn. Mono nabízí kompilátor C# jako službu již mnoho let. Některé z toho, co Rosylyn nabízí, je k dispozici také prostřednictvím NRefractory. Příkladem, kdy je Mono stále napřed, by byly instrukce SIMD ke zrychlení herního výkonu.

Microsoft nabízí řadu produktů nad .NET, které nejsou dostupné v Mono, z čehož pochází mylná představa o Mono zaostávání. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) jsou příklady produktů, které na Mono nefungují nebo jsou špatně podporovány. Zřejmým řešením je místo toho použít alternativy napříč platformami, jako je GTK#, NHibernate a ServiceStack.

Problém:Microsoft je zlý.

Odpověď:Pravda. Tak co.

Mnoho lidí nabízí následující důvody, proč se vyhnout používání Mono:

1) Neměli byste používat Mono, protože byste se měli vyhnout technologiím Microsoft

2) Mono je na hovno, protože vám neumožňuje používat všechny technologie, které Microsoft nabízí

Mně je jasné, že tato tvrzení jsou neslučitelná. Odmítám první tvrzení, ale tento argument zde přeskočím. Druhé tvrzení platí pro všechny alternativy .NET.

JVM je skvělá platforma a exploze jazyků JVM je úžasná. Používejte to, co vám dělá radost. Prozatím je to pro mě často .NET/Mono.


Linux
  1. 11 nejlepších aplikací pro různé platformy

  2. Přenos – multiplatformní BitTorrent klient pro Linux

  3. 5 nejlepších multiplatformních programů pro týmový chat pro PC

  1. Proč je Atlantic.Net tou správnou volbou oproti jiným poskytovatelům cloudu? Část 1 ze 3

  2. Existuje F# Interactive pro Linux na .NET Core bez použití Mono?

  3. Jakou hodnotu má JAVA_HOME pro CentOS?

  1. Pro lepší crontab použijte anacron

  2. 8 tipů pro příkazový řádek Linuxu

  3. Need For The `builtin` Builtin?