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


108

Quante librerie ci sono in meno per Mono rispetto a Java?

Mi manca la panoramica su entrambe le alternative, ma ho praticamente molta libertà di scelta per il mio prossimo progetto. Sto cercando dati tecnici concreti nelle aree di

  • prestazioni (ad esempio, mi è stato detto che Java è buono per il threading e ho sentito che l'ottimizzazione del codice di runtime è diventata molto buona di recente per .NET)
  • portabilità nel mondo reale (è pensato per essere entrambi portatili, qual è Catch-22 per ciascuno?)
  • disponibilità degli strumenti ( CI , automazione build, debug, IDE)

Sto cercando soprattutto quello che hai effettivamente sperimentato nel tuo lavoro piuttosto che le cose che potrei cercare su Google. La mia applicazione sarebbe un servizio di back-end che elabora grandi quantità di dati da serie temporali.

La mia piattaforma di destinazione principale sarebbe Linux.

Modifica: per formulare la mia domanda in modo più adeguato, sono interessato all'intero pacchetto (librerie di terze parti ecc.), Non solo alla lingua. Per le librerie, questo probabilmente si riduce alla domanda "quante meno librerie ci sono per Mono rispetto a Java"?


Cordiali saluti, da allora ho scelto Java per questo progetto, perché sembrava solo più logoro dal punto di vista della portabilità ed è in circolazione da un po 'anche sui sistemi più vecchi. Sono un po 'triste per questo, perché sono molto curioso di C # e mi piacerebbe aver fatto qualche progetto di grandi dimensioni, ma forse la prossima volta. Grazie per tutti i consigli.


3
Ottima domanda. Stiamo esaminando anche una valutazione per lo sviluppo multipiattaforma.
Mat Nadrofsky

Aggiungerei il tag "which-language" ma ce ne sono già 5, quindi senza fortuna.
Daniel Daranas

Dipende molto dalle piattaforme a cui scegli come target ...
Thorbjørn Ravn Andersen

1
Ora potrebbe essere un buon momento per guardare golang ...
StartupGuy

Vale anche la pena considerare Xojo. Compila app native utilizzando LLVM per Windows, Mac Linux. Ha un'automazione della build IDE, debug, ecc. La libreria ha molte funzionalità e può essere estesa secondo necessità. www / xojo.com
Paul Lefebvre

Risposte:


96

Bene .... Java è effettivamente più portabile. Mono non è implementato ovunque ed è notevolmente in ritardo rispetto all'implementazione di Microsoft. Java SDK sembra rimanere sincronizzato meglio su tutte 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

Ho ancora questa opinione nel 2014. Tuttavia, lo qualificherò dicendo che sto iniziando solo ora a prestare attenzione a Mono dopo un lungo periodo di insensibilità, quindi potrebbero esserci miglioramenti nel runtime Mono (o ecosistema ) di cui non sono stato informato. AFAIK, non esiste ancora alcun 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 tipo di atteggiamento e una volontà molto più multipiattaforma di lavorare con i partner per renderli complementari, piuttosto che competitivi (ad esempio, Mono sarà una parte piuttosto importante del prossimo panorama di OWIN / Helios ASP.NET). Ho il sospetto che nei prossimi anni le differenze di portabilità diminuiranno rapidamente,

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 viene eseguito su molte piattaforme ora. 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 gnosi dell'hackeraggio .NET, ma è uno sforzo relativamente semplice . Ci sono, ovviamente, librerie, servizi e applicazioni che sono solo per Windows o possono indirizzare solo 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 nessuna ragione inerente ai linguaggi o agli stack tecnologici stessi che mi impedirebbe di scegliere .NET per qualsiasi applicazione da questo punto in poi.


2
Sono davvero felice di leggere questo e sono felice dei voti in un mondo Microsoft. .NET è davvero buono ma Java ha una legittimità come ho sempre cercato di spiegare come sviluppatore .NET e vecchio Java;)
JoeBilly

+1 per questo. Ho trovato la portabilità di Java (per applicazioni non banali, ad esempio server web, GUI complesse, motori analitici) migliore di qualsiasi altra alternativa. Non è del tutto perfetto, ma è il meglio che puoi ottenere in questo momento.
mikera

1
@ Ben, hai ancora questa opinione nel 2013? Se lo fai, ti dispiacerebbe menzionarlo e se non aggiorni questa risposta? Molte volte quando si leggono le risposte di un bambino di 4 anni è difficile dirlo.
Benjamin Gruenbaum

1
@BenjaminGruenbaum sì, anche se a questo punto qualificherei la mia opinione dicendo che non ho prestato molta attenzione a Mono da molto tempo, quindi potrebbero esserci miglioramenti nel runtime Mono (o ecosistema) che non ho avuto messo a conoscenza di. AFAIK, non è ancora disponibile il supporto per WPF, WCF o WF. Mono può essere eseguito su iOS, ma per quanto ne so, il runtime Java funziona ancora su molte più piattaforme rispetto a Mono. Quindi sì. Qualificato, ma sì.
Ben Collins,

@HighCore l'argomento non è contro Mono, di per sé. È solo un dato di fatto: se scrivi codice dipendente da WPF, non puoi usare Mono; ergo è insopportabile in quel modo. I framework dell'interfaccia utente di Java possono fare schifo, ma per quanto ne so funzioneranno ovunque funzioni Java (e l'hardware supporta quel tipo di interfaccia utente). Ciò non rende Java migliore , lo rende più portabile in questo modo specifico.
Ben Collins

112

Mono fa un lavoro migliore nel mirare alle piattaforme che desidero supportare. A parte questo, è tutto soggettivo.

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

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

Il grande vantaggio è iOS da 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 ormai alle spalle.

Il fattore più importante per me, però, è 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 comunque molto carini.

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

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

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

La mia opinione su alcuni degli altri commenti:

Problema: prestazioni.

** Risposta: Sia la JVM che il 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 # è molto veloce, quindi non c'è motivo per cui debbano essere lenti.

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

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

Praticamente tutte le librerie Java (incluso JDK) funzionano 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 generalmente offre più del necessario.

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

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

Voglio fare un grido a 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 i test di unità, l'integrazione SQL, il debug, il refactoring semplice e la navigazione in assembly con la decompilazione al volo. È meraviglioso utilizzare lo stesso ambiente per qualsiasi cosa, dal Web lato server alle app mobili.

Problema: compatibilità tra piattaforme.

Risposta: Mono è una singola 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 risposta successiva ...

Problema: Mono ritarda .NET.

Risposta: No, non lo fa.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 fuori dagli schemi. 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 Microsoft effettivo, inclusi 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 Mono principale ha tenuto il passo con .NET da molti anni e la compatibilità è impressionante. Oggi è possibile utilizzare l'intero linguaggio C # 4.0 e anche alcune funzionalità di C # 5.0. In effetti, Mono spesso guida .NET in molti modi.

Mono implementa parti della specifica CLR che nemmeno Microsoft supporta (come gli array a 64 bit). Una delle nuove tecnologie più interessanti nel mondo .NET è Rosylyn . Mono ha offerto il compilatore C # come servizio da 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 il malinteso 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 più ovvia è utilizzare invece alternative multipiattaforma come GTK #, NHibernate e ServiceStack.

Problema: Microsoft è il male.

Risposta: vero. E allora.

Molte persone offrono i seguenti motivi per evitare di utilizzare 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ò l'argomento. La seconda affermazione è vera per tutte le alternative .NET.

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


3
Grazie per una risposta così ampia a quell'ultima parte del gioco. Non ho mai usato Mono / .Net / C #, ma il tuo post sembra riflettere alcuni degli sviluppi più recenti in quell'universo. Ad esempio, non ricordo che MonoTouch fosse così significativo 3,5 anni fa.
Hanno Fietz

3
Sono confuso dalla tua risposta "Mono non lag .NET". Lo dichiari, quindi dichiari una mezza dozzina di modi in cui, di fatto, ritarda .NET (Entity Framework, ecc.). È sicuro dire che non è in ritardo con il compilatore C # di Microsoft, ma l'ecosistema .NET è frammentario nella migliore delle ipotesi su Mono. Sembra che vada bene per i tuoi scopi, ma non per tutti, e lì c'è una preoccupazione legittima.
samkass

1
@samkass: Penso che il punto qui sia la differenza tra "ritardi" e "non implementa questa libreria". Nel mondo Java, puoi trovare questo analogo ad Android che non implementa la libreria Swing. Si noti inoltre che sono stati forniti gli equivalenti multipiattaforma (e open source, btw). Uso Mono ogni giorno e "frammentario nella migliore delle ipotesi" sicuramente non è stata la mia esperienza.
konrad.kruczynski

9
La mancanza di un supporto WCF ed EF completo e affidabile e nessun WPF è un killer per Mono per quasi tutto ciò su cui ho lavorato da .NET 3.0. Sì, ci sono alternative, ma una parte enorme della potenza di .NET sono questi framework aggiuntivi. Senza questi non credo che si possa chiamare Mono compatibile con .NET. Nella migliore delle ipotesi è un'implementazione parziale. Ho anche usato NHibernate e francamente EF è una tecnologia decisamente migliore. Mai usato ServiceStack. IMO Mono è molto più che rischioso.
MrLane

1
tutti coloro che mancano di WCF dovrebbero dare un'occhiata a servicestack. seriamente, non implementare WCF è stata una buona cosa!
irreale

54

In realtà sviluppo in .NET, eseguo tutti i miei test prima su Mono e poi su Windows. In questo modo so che le mie applicazioni sono multipiattaforma. L'ho fatto con successo su entrambe le applicazioni ASP.NET e Winforms.

Non sono sicuro da dove alcune persone abbiano l'impressione che Mono sia così orribile, ma sicuramente ha fatto il suo lavoro nei miei casi e nelle mie opinioni.È vero che avrai un po 'di ritardo per le ultime e più grandi invenzioni in .NET world, ma finora .NET 2.0 su Windows e Linux è molto solido per me.

Tieni presente che ovviamente ci sono molte stranezze in questo, ma la maggior parte di esse deriva dall'assicurarti di scrivere codice portatile. Mentre i framework fanno un ottimo lavoro nell'astrarre il sistema operativo su cui stai girando, piccole cose come la distinzione tra maiuscole e minuscole di Linux nei percorsi e nei nomi dei file richiede un po 'di tempo per abituarsi, così come cose come le autorizzazioni.

.NET è decisamente molto multipiattaforma grazie a Mono sulla base delle mie esperienze finora.


Chiamami ignorante, ma hai anche bisogno di testare ASP.NET con mono? Tutto ciò che sarebbe .NET è lato server, quindi non importa su quale sistema operativo è visualizzato, vero?
Ethan Gunderson

9
Ethan, utilizzando Mono puoi ospitare app ASP.net su Linux.
Eric Haskins,

2
Non tutti vogliono eseguire la propria app su Windows, per qualsiasi motivo.
Bernard

2
@Rich B: se un cliente non vuole i prodotti MS, .NET è chiaramente la scelta sbagliata.
Kjetil Ødegaard

21
@Kjetil: Mono non è un prodotto MS.
GEOCHET

26

Java in realtà è multipiattaforma come dicono tutti. Esiste un'implementazione JVM per quasi tutti i sistemi operativi tradizionali in circolazione (persino Mac OS X, finalmente) e funzionano tutti molto bene. E ci sono tonnellate di strumenti open source là fuori che sono altrettanto multipiattaforma.

L'unico problema è che ci sono alcune operazioni native che non puoi fare in Java senza scrivere alcune DLL o SO. È molto raro che questi si presentino nella pratica. In tutti questi casi, tuttavia, sono stato in grado di aggirare il problema generando processi nativi e raschiando i risultati.


1
Inoltre, praticamente in tutti i casi in cui Java non può eseguire un'operazione nativa in modo multipiattaforma, lo stesso varrà per .NET
Eli Courtwright

Finalmente? Mac OS X ha avuto un'implementazione JVM dalla 10.0. :)
mipadi

3
@Eli - Probabilmente vero. È certamente molto, molto più facile da integrare con le funzionalità native in .NET / Mono rispetto a Java. Quindi, se stai solo cercando di integrarti bene con la piattaforma nativa, .NET / Mono offre un vero vantaggio.
Justin,

"La generazione dei processi nativi e lo screen-scraping dei risultati" rabbrividiscono
Basic

Vorrei cavillare con "quasi tutti i sistemi operativi tradizionali", poiché non esiste una JVM pronta all'uso per Android o iOS. Con le nuove librerie di classi portatili in .NET, nel frattempo, puoi effettivamente condividere il codice compilato (anche se non praticamente il codice dell'interfaccia utente) tra piattaforme, compresi i dispositivi mobili.
Mathieson

18

Penso che la domanda sia formulata in modo errato. C # vs. Java è molto meno interessante in termini di utilizzo multipiattaforma rispetto a (a) quali piattaforme è necessario supportare e (b) considerando le librerie principali e le librerie di terze parti disponibili. La lingua è quasi la parte meno importante del processo decisionale.


Concordato. È una questione di quanto siano ben supportate le macchine virtuali su varie architetture.
Allain Lalonde

Concordato. Non è divertente eseguire uno sviluppo completo se il cliente non può eseguirlo.
Thorbjørn Ravn Andersen

15

Java è una scelta migliore per lo sviluppo multipiattaforma.

  • Prestazione. Java e .Net hanno un livello di prestazioni simile a causa della macchina virtuale, ma normalmente JVM ha prestazioni migliori grazie all'ottimizzazione di anni e anni.

  • Biblioteca. Sebbene questo dipenda dalla tua attività, Java ha molte più librerie open source o di terze parti disponibili lì. Per app server, J2EE, Spring, Struts, ecc. Per la GUI, sebbene .Net fornisca l'API di livello Win32 ma questo causa problemi di compatibilità. Java ha Swing, SWT, AWT, ecc. Funziona nella maggior parte dei casi.

  • Compatibilità. Queste sono le questioni chiave che devono essere considerate quando si sviluppa il programma multipiattaforma. Due problemi: primo, compatibilità della piattaforma. Java vince ancora poiché JDK è ben mantenuto dalla singola e originale società Sun. Mono non è gestito da MS, quindi non hai ancora alcuna garanzia per la compatibilità degli aggiornamenti. 2. Compatibilità con le versioni precedenti. Sun mantiene una buona reputazione sulla loro compatibilità con le versioni precedenti, anche se a volte questa sembra troppo rigida e rallenta il ritmo.

  • Utensili. Java ha buoni IDE multipiattaforma. Netbeans, Eclipse, ecc. La maggior parte di essi è gratuita. VS Studio è buono ma solo su Windows e non costa un po '. Entrambi forniscono buoni unit test, debug, profili, ecc.

Quindi suggerirei che Java è una scelta migliore. A titolo di esempio, ci sono alcune famose app desktop multipiattaforma sviluppate da Java: Vuze, Limewire, BlogBridge, CrossFTP, per non parlare di quegli IDE. Per quanto riguarda .Net, ho una conoscenza limitata di tali app di successo.


Lavorare con mono su "altri" Linux è diventato complicato. Ciò riflette il problema principale del mono: il futuro del mono è troppo dipendente dalla dittatura di Miguel de Icaza. Caso in questione: supporto in diminuzione per "altro ... (non supportato)" [ mono-project.com/Other_Downloads] Linux sembra correlare ( IMHO ) con la disillusione di Miguel de Icaza con Linux ( tirania.org/blog/archive/ 2013 / Mar-05.html ). Java non soffre di questo problema di dittatura. C # può essere eseguito su più piattaforme, ma ciò comporta costi, rischi, compromessi e dipendenza maggiori da Mr. de Icaza. No grazie.
StartupGuy

@ Michael.M quindi preferiresti essere al capriccio di Oracle?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Sbagliato. Lasciatemi scomporlo nel modo più semplice possibile: .Net -> piattaforma MSFT (azienda stabile di successo; ecosistema limitato ma pulito); Mono -> Framework De Icaza (el dictador; non caldo per Linux e mostra: [ cultofmac.com/218632/… - prova a installare mono su Centos 6.4, è un incubo "non supportato"); Java è una specifica che appartiene alla comunità e ha molte implementazioni di fornitori diversi (Oracle è solo una) [ coderanch.com/t/327542/java/java/…
StartupGuy

@ ThorbjørnRavnAndersen: .. inoltre un importante sponsor della comunità Java può persino escludere Oracle e avere ancora successo ed essere estremamente ben supportato - Java non è affatto un capriccio di Oracle --- si prega di consultare: news.techworld.com/applications/3252787/ … Oracle potrebbe abbandonare tutto il loro coinvolgimento in Java e continuare a vivere. Quali altri fornitori hanno una piattaforma .Net? Chi altro fornisce un runtime mono diverso da Xamarin? Java è l'unico di questi non soggetto a dittatura e ha un vero controllo della comunità, supporto della comunità e amministrazione della comunità.
StartupGuy

1
@ Specifiche Michael.M? Appartenente alla comunità? Penso che ti sbagli - credo anche che l' unica ragione per cui il progetto OpenJDK non è stato chiuso dopo l'acquisizione di Sun, è stata la GPL. Java è nel pugno di ferro di Oracle, semplicemente perché il TCK non è disponibile gratuitamente ed è ciò che è necessario per creare una JVM che si comporti come Oracle JVM. Non ho problemi con Mono o De Icaza, ma non credo che la situazione di Java sia molto migliore. L'unico progetto JVM alternativo con slancio è morto quando IBM ha smesso di supportarlo.
Thorbjørn Ravn Andersen,


8

Dirò anche Java. Se lo si guarda in termini di maturità, Sun (e altri) ha speso molto più tempo e sforzi per far funzionare la JVM su piattaforme non Windows.

Al contrario, Mono è decisamente un cittadino di seconda classe nell'ecosistema .NET.

A seconda di chi sono i tuoi clienti target, potresti anche scoprire che esiste una vera e propria opposizione all'uso di Mono: Novell offre lo stesso tipo di supporto da parte dei fornitori per Mono che otterresti per Java o .NET su Windows?

Se ti rivolgi principalmente all'hosting del tuo servizio su Windows, avrebbe senso prendere in considerazione questa scelta, ma dal momento che stai prendendo di mira principalmente Linux, mi sembra un gioco da ragazzi.


Tendo ad essere d'accordo con Mono che è un cittadino di seconda classe, ma non con la conclusione. Java esiste da molto tempo ed è pieno di stranezze legacy e problemi di gestione della memoria, per non parlare del fatto che sceglie quasi sempre il modo più verboso di fare qualcosa. È stata anche piuttosto stagnante (la lingua) per anni e solo di recente ha iniziato a incorporare funzionalità che sono state in .Net per anni. IMHO, è una scelta tra due mali ... Supporto della piattaforma Flakey con .Net o un gigantesco colosso che è molto lento ad evolversi e un compito ingrato per cui programmare.
Basic

7

Java è stato progettato per essere multipiattaforma; C # /. Net non lo era. In caso di dubbio, utilizza lo strumento progettato per il tuo scopo.

EDIT: in tutta onestà, .NET è stato progettato per funzionare su ambienti embedded / PC / Server, quindi è SORT di multipiattaforma. Ma non è stato progettato per Linux.


3
beh, il C # è standardizzato ISO, quindi l'idea era di avere qualcosa di multipiattaforma. microsoft non voleva sviluppare implementazioni per altre piattaforme, ma è stato lasciato ad altre parti poiché il linguaggio è uno standard. il framework .Net è una storia più complicata, però.
zappan

Mono è una buona implementazione e DotGNU (anche per Mac)
Andrei Rînea

1
zappan: punto valido su C # (non lo sapevo), ma .NET è incredibilmente enorme. Devo ammettere che non ho esperienza personale qui.
AlexeyMK

@zappan - da un punto di vista pratico, è irrilevante che C # sia standardizzato (o che Mono sia un clone abbastanza buono di C #). La portabilità della piattaforma riguarda l'intera piattaforma (comprese le librerie e l'ecosistema di strumenti), non solo il linguaggio stesso. In questo senso .Net non è sicuramente completamente multipiattaforma.
mikera

7

Penso che la risposta sia "dipende". Java funziona praticamente su qualsiasi cosa, ma .NET / Mono sono (IMHO) un framework migliore per il desktop. Quindi immagino che la risposta dipenda davvero da quali piattaforme prevedi di prendere di mira.


Desktop non è sinonimo di Windows anche se ha la maggior parte dello spazio desktop.
ZOXIS

6

Per aggiungere un po 'di più alla conversazione, Java è più portabile se rimani indietro di circa una versione: Java 5 ha ancora molte caratteristiche eccellenti, quindi puoi aspettare Java 6 e avere ancora molto raggio in termini di linguaggio e librerie da sviluppare con. Il Mac è la piattaforma principale che può richiedere del tempo per raggiungere l'ultima versione di Java.

Java ha anche un eccellente corpo di standard che fa crescere in modo intelligente la piattaforma sulla base dell'input di molte aziende diverse. Questa è una caratteristica spesso trascurata, ma mantiene anche le nuove funzionalità funzionanti su più piattaforme e fornisce una vasta gamma di supporto per le librerie per alcune cose esoteriche (come estensioni opzionali).


OS X 10.6 è ora completamente al passo con la versione Sun Java 6.
Thorbjørn Ravn Andersen

5

Voterei per Java come più portabile di C #. Java ha sicuramente anche un set molto ricco di librerie standard. Esiste anche un'ampia gamma di librerie di terze parti open source, come quelle fornite dal progetto Jakarta ( http://jakarta.apache.org/ ).

Esistono tutti i soliti sospetti per CI, test unitari, ecc. Il supporto IDE multipiattaforma è anche molto buono con Eclipse, Netbeans, IntelliJ IDEA ecc.


4

Ci sono anche altre scelte linguistiche. Mi sono appassionato a Python, che funziona bene su Windows, Linux e Mac, e ha un ricco set di librerie.


Sì, adoro Python e ha Django che mi piace per le app web, ma c'erano alcune cose che lo rendevano inaccettabile, la più importante era il GIL nell'implementazione C standard dell'interprete. Ho una serie di operazioni che traggono grande vantaggio dal calcolo parallelo su macchine multicore e dovrei generare processi per farlo in cPython.
Hanno Fietz

3

Mentre Mono ha la sua parte di problemi penso che abbia una migliore storia di compatibilità multipiattaforma, soprattutto SE fai affidamento sull'invocazione della piattaforma nativa.

Non ci sono abbastanza parole su Stack Overflow per sottolineare quanto sia più agevole ottenere qualcosa di nativo chiamato ed eseguito in .NET / Mono su (almeno nella mia esperienza 3 ...) più piattaforme rispetto allo sforzo Java equivalente.


Sono d'accordo, chiamare il codice specifico della piattaforma da .NET / Mono è semplicissimo fintanto che può essere chiamato da C. Con CXXI ​​(pronunciato sexy) sta diventando un gioco da ragazzi chiamare anche codice C ++. tirania.org/blog/archive/2011/Dec-19.html
Justin

2

Gatorhall , hai dei dati per supportarlo ?

Prestazione. Java e .Net hanno un livello di prestazioni simile a causa della macchina virtuale, ma normalmente JVM ha prestazioni migliori grazie all'ottimizzazione di anni e anni.

Background: sono un ragazzo di Windows da Windows 3.1 e attualmente un utente Linux (ancora in esecuzione Windows 7, ottimo sistema operativo, su una VM per Visual Studio 2010 e altri strumenti).

Il punto: io e molti utenti (Windows, Linux, ecc.) Lo so, potremmo non essere d'accordo con te. Java tende a funzionare più lentamente anche su un'applicazione desktop Linux, ASP.NET è più veloce delle pagine del server Java molte volte. Alcuni potrebbero concordare sul fatto che anche PHP non compilato funziona meglio in diversi scenari.

Java è più multipiattaforma? Non ho dubbi su questo (la storia lo riporta su), ma più veloce (non dico .NET lo è) non è così sicuro e mi piacerebbe vedere alcuni benchmark reali.


C'è un'altra domanda che può aiutare e ovviamente c'è la sparatoria linguistica . La JVM potrebbe essere ottimizzata in modo più pesante ma è vicina (specialmente su Windows). I benchmark per ASP.NET vs J2EE o JSP sono ancora più sospetti, ma non ho problemi a credere che ASP.NET sia molto più veloce anche se i tempi di esecuzione sono pari.
Justin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.