GNU/Linux >> Linux Esercitazione >  >> Linux

.NET/Mono o Java sono la scelta migliore per lo sviluppo multipiattaforma?

Beh... Java è in realtà più portatile. Mono non è implementato ovunque ed è in ritardo rispetto all'implementazione di Microsoft in modo significativo. L'SDK Java sembra rimanere sincronizzato meglio tra le piattaforme (e funziona su più piattaforme).

Direi anche che Java ha una maggiore disponibilità di strumenti su tutte queste piattaforme, sebbene ci siano molti strumenti disponibili per .NET su piattaforme Windows.

Aggiornamento per il 2014

Conservo ancora questa opinione nel 2014. Tuttavia, lo qualificherò dicendo che sto iniziando a prestare attenzione a Mono solo ora dopo un lungo periodo di indifferenza, quindi potrebbero esserci miglioramenti nel runtime Mono (o nell'ecosistema ) di cui non sono stato informato. AFAIK, non c'è ancora supporto per WPF, WCF, WF, di WIF. Mono può essere eseguito su iOS, ma per quanto ne so, il runtime Java funziona ancora su molte più piattaforme rispetto a Mono. Inoltre, Mono sta iniziando a vedere alcuni strumenti molto migliorati (Xamarin) e Microsoft sembra avere un atteggiamento e una disponibilità molto più multipiattaforma a lavorare con i partner per renderli complementari, piuttosto che competitivi (ad esempio, Mono sarà una parte piuttosto importante del prossimo panorama OWIN/Helios ASP.NET). Sospetto che nei prossimi anni le differenze nella portabilità diminuiranno rapidamente, soprattutto dopo che .NET sarà diventato open source.

Aggiornamento per il 2018

La mia opinione su questo sta iniziando ad andare dall'altra parte. Penso che .NET, in generale, in particolare con .NET Core, abbia iniziato a raggiungere la "parità di portabilità" con Java. Sono in corso sforzi per portare WPF in .NET Core per alcune piattaforme e .NET Core stesso ora viene eseguito su molte piattaforme. Mono (di proprietà di Xamarin, che ora è di proprietà di Microsoft) è un prodotto più maturo e raffinato che mai e la scrittura di applicazioni che funzionano su più piattaforme non è più il dominio della profonda conoscenza degli hacker .NET, ma è uno sforzo relativamente semplice . Esistono, ovviamente, librerie, servizi e applicazioni che sono solo per Windows o possono essere indirizzati solo a piattaforme specifiche, ma lo stesso si può dire di Java (in generale).

Se fossi nei panni dell'OP a questo punto, non riesco a pensare a nessun motivo inerente ai linguaggi o agli stack tecnologici stessi che mi impedirebbe di scegliere .NET per qualsiasi applicazione futura da questo punto.


Mono fa un lavoro migliore nel prendere di mira le piattaforme che voglio supportare. A parte questo, è tutto soggettivo.

Condivido il codice C# sulle seguenti piattaforme:- iOS (iPhone/iPad)- Android- Web (HTML5)- Mac (OS X)- Linux- Windows

Potrei condividerlo ancora più posti:- Windows Phone 7- Wii- XBox- PS3- ecc.

Il pezzo grosso è iOS poiché MonoTouch funziona in modo fantastico. Non conosco alcun buon modo per indirizzare iOS con Java. Non puoi scegliere come target Windows Phone 7 con Java, quindi direi che i giorni in cui Java era migliore per i dispositivi mobili sono passati.

Il fattore più importante per me è la produttività personale (e la felicità). C # come linguaggio è anni avanti rispetto a Java IMHO e il framework .NET è una gioia da usare. La maggior parte di ciò che viene aggiunto in Java 7 e Java 8 è in C# da anni. I linguaggi JVM come Scala e Clojure (entrambi disponibili su CLR) sono piuttosto utili.

Vedo Mono come una piattaforma a sé stante (fantastica) e tratto .NET come l'implementazione Microsoft di Mono su Windows. Ciò significa che sviluppo e collaudo prima su Mono. Funziona meravigliosamente.

Se sia Java che .NET (diciamo Mono) fossero progetti Open Source senza alcun supporto aziendale, sceglierei Mono su Java ogni volta. Credo che sia solo una piattaforma migliore.

Sia .NET/Mono che JVM sono ottime scelte, anche se personalmente utilizzerei un linguaggio diverso da Java sulla JVM.

La mia opinione su alcuni degli altri commenti:

Problema:prestazioni.

**Risposta:sia la JVM che la CLR hanno prestazioni migliori di quanto affermano i detrattori. Direi che la JVM funziona meglio. Mono è generalmente più lento di .NET (anche se non sempre).

Personalmente prenderei ASP.NET MVC su J2EE ogni giorno sia come sviluppatore che come utente finale. Anche il supporto per Google Native Client è piuttosto interessante. Inoltre, so che le scarse prestazioni della GUI per le app Java desktop dovrebbero essere un ricordo del passato, ma continuo a trovarne di lente. Poi di nuovo, potrei dire lo stesso per WPF. GTK# è comunque molto veloce, quindi non c'è motivo per cui debbano essere lenti.

Problema:Java dispone di un ecosistema di librerie più ampio disponibile.

Risposta:probabilmente vero, ma in pratica non è un problema.

Praticamente ogni libreria Java (incluso il JDK) funziona alla grande su .NET/Mono grazie a IKVM.NET. Questo pezzo di tecnologia è una vera meraviglia. L'integrazione è sorprendente; puoi usare una libreria Java proprio come se fosse nativa. Tuttavia, ho dovuto utilizzare solo le librerie Java in un'app .NET. L'ecosistema .NET/Mono in genere offre più di quello di cui ho bisogno.

Problema:Java ha un supporto degli strumenti migliore (più ampio)

Risposta:non su Windows. Altrimenti sono d'accordo. MonoDevelop è carino però.

Voglio ringraziare MonoDevelop; è un gioiello. MonoDevelop integra la maggior parte degli strumenti che desidero utilizzare, tra cui il completamento del codice (intellisense), l'integrazione Git/Subversion, il supporto per unit test, l'integrazione SQL, il debug, il refactoring semplice e la navigazione in assembly con decompilazione al volo. È meraviglioso utilizzare lo stesso ambiente per tutto, dal Web lato server alle app per dispositivi mobili.

Problema:compatibilità tra piattaforme.

Risposta:Mono è un'unica base di codice su tutte le piattaforme, incluso Windows.

Sviluppa prima per Mono e distribuisci su .NET su Windows, se lo desideri. Se confronti .NET da MS a Java, però, Java ha il vantaggio in termini di coerenza tra le piattaforme. Vedi la risposta successiva...

Problema:Mono è in ritardo rispetto a .NET.

Risposta:No, non è così. IMHO, questa è un'affermazione spesso dichiarata ma errata.

La distribuzione Mono di Xamarin viene fornita con C#, VB.NET, F#, IronPython, IronRuby e penso che forse Boo sia pronto all'uso. Il compilatore Mono C# è completamente aggiornato con MS. Il compilatore Mono VB.NET è in ritardo rispetto alla versione MS. Gli altri compilatori sono gli stessi su entrambe le piattaforme (così come altri linguaggi .NET come Nemerle, Boo e Phalanger (PHP) ).

Mono viene fornito con gran parte del codice scritto da Microsoft, tra cui Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F# e ASP.NET MVC. Poiché Razor non è Open Source, Mono attualmente viene fornito con MVC2, ma MVC3 funziona perfettamente su Mono.

La piattaforma principale Mono ha tenuto il passo con .NET per molti anni e la compatibilità è impressionante. Oggi puoi usare il linguaggio C# 4.0 completo e persino alcune funzionalità di C# 5.0. In effetti, Mono spesso guida .NET in molti modi.

Mono implementa parti delle specifiche CLR che nemmeno Microsoft supporta (come gli array a 64 bit). Uno dei nuovi elementi tecnologici più interessanti nel mondo .NET è Rosylyn. Mono ha offerto il compilatore C# come servizio per molti anni. Parte di ciò che offre Rosylyn è disponibile anche tramite NRefractory. Un esempio di dove Mono è ancora avanti sarebbero le istruzioni SIMD per accelerare le prestazioni di gioco.

Microsoft offre una serie di prodotti oltre a .NET che non sono disponibili in Mono, da cui deriva l'idea sbagliata sul ritardo di Mono. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) sono esempi di prodotti che non funzionano o sono scarsamente supportati su Mono. La soluzione ovvia è utilizzare invece alternative multipiattaforma come GTK#, NHibernate e ServiceStack.

Problema:Microsoft è malvagia.

Risposta:Vero. E allora.

Molte persone offrono i seguenti motivi per evitare di usare Mono:

1) Non dovresti usare Mono perché la tecnologia Microsoft dovrebbe essere evitata

2) Mono fa schifo perché non ti consente di utilizzare tutte le tecnologie offerte da Microsoft

Per me è chiaro che queste affermazioni sono incompatibili. Respingo la prima affermazione ma qui salterò quell'argomentazione. La seconda affermazione è vera per tutte le alternative .NET.

La JVM è un'ottima piattaforma e l'esplosione dei linguaggi JVM è fantastica. Usa ciò che ti rende felice. Per ora, per me è spesso .NET/Mono.


Linux
  1. Usa anacron per un crontab migliore

  2. 8 suggerimenti per la riga di comando di Linux

  3. Necessità del builtin "costruito"?

  4. Auryo:un client desktop multipiattaforma per SoundCloud

  5. Perché Atlantic.Net è la scelta giusta rispetto ad altri provider di servizi cloud? Parte 1 di 3

GalliumOS:la distribuzione Linux per i Chromebook

Slack per la CLI – Slack

Le 10 migliori cache Web Linux per prestazioni migliori

Comprendere il ciclo for negli script della shell

20 migliori software per droni e robot per Linux:la scelta dei professionisti

I 20 migliori strumenti di Build Automation per lo sviluppo di software moderno