Commenti
- Come scritto la domanda era un esempio da manuale di " quale lingua è migliore? " domande fuori tema qui. ' ho tentato di renderlo più costruttivo con una modifica poiché in realtà ha ottenuto risposte valide e ben ponderate. Tuttavia, tieni presenti le FAQ e questo post del blog quando fai domande di questo tipo .
- Vorrei aggiungere alcuni elementi più spigolosi. .NET ha un DOM ben definito ( ad esempio CodeDOM ) per il suo linguaggio e di conseguenza generare cose dinamicamente in fase di esecuzione è molto più semplice ed efficiente. Questo può anche essere utile come capacità infrastrutturale. Inoltre, il sistema di tipi ha una corrispondenza 1 a 1 con tutti i tipi W3 nativi. Fondamentalmente, W3 e altri interops sono stati integrati nella lingua sin dallinizio. Per altre lingue queste preoccupazioni sono state semplicemente fissate e presentano molte sfide per loro. Inoltre, se ' interopererai con molte lingue e / o protocolli, anche .NET è molto potente
- Ehi, JoeGeeky, aggiungi il tuo commento come una risposta alla domanda.
- La vera domanda è: per quali ragioni dovrei scegliere Nemerle, F * e F # su C #? (cioè, tutte e tre le lingue provengono da MS e tutte e tre sono migliori)
- Non ' penso che nessuna dichiarazione del genere " lingua / piattaforma X rispetto alla lingua / piattaforma Y è SEMPRE migliore " è valido e penso anche che per qualsiasi X e Y possa essere facilmente invalidato per alcuni contesti. Qual è ' lo scopo di questa domanda?
Risposta
La domanda dovrebbe essere " Quale lingua è più adatta per lo sviluppo di applicazioni moderne e tipiche? ".
Modifica : Ho affrontato alcuni dei commenti qui sotto. Una piccola osservazione: considera che quando hai molte cose in modo nativo, come idiomi, “è una grande differenza che implementarle o scaricarle e usarle ogni volta. Quasi tutto può essere implementato in ognuna di queste lingue. La domanda è: cosa le lingue fornite in modo nativo.
Quindi fuori dalla mia testa (alcuni argomenti si applicano a entrambi i linguaggi) …
C # è meglio di C ++ in quanto:
- Ha una garbage collection nativa .
- Ti permette di trattare le firme dei metodi di classe come funzioni libere (cioè ignorando il
this
puntatore argomento) e quindi creare relazioni più dinamiche e flessibili tra le classi. modifica se non sai cosa significa, prova ad assegnare un metodo membro che restituisce void e accetta void avoid (*ptr)()
variabile. I delegati C # portano con sé il puntatorethis
, ma lutente non deve sempre preoccuparsene. Possono semplicemente assegnare unvoid()
metodo di qualsiasi classe a qualsiasi altrovoid()
delegato. - Ha uno standard enorme libreria con così tante cose utili che sono ben implementate e facili da usare.
- Permette blocchi di codice sia gestiti che nativi.
- Il controllo delle versioni degli assembly risolve facilmente i problemi dellinferno delle DLL.
- È possibile impostare classi, metodi e campi in modo che siano interni allassembly (il che significa che sono accessibili da qualsiasi punto allinterno della DLL in cui sono stati dichiarati, ma non da altri assembly).
C # è migliore di Java in quanto:
- Invece di molto rumore (EJB, implementazioni di classi statiche private, ecc.) ottieni costrutti nativi eleganti e amichevoli come Proprietà ed Eventi .
- Hai dei veri generici (non il brutto scherzo che Java chiama generici) e puoi riflettere su di essi.
- Supporta idiomi nativi di gestione delle risorse (il
using
istruzione). Anche Java 7 lo supporterà, ma C # lo ha avuto per molto più tempo. - Non ha verificato le eccezioni 🙂 (discutibile se questo è buono o cattivo)
- È profondamente integrato con Windows, se è quello che vuoi.
- Ha Lambdas e LINQ, quindi supporta una piccola quantità di programmazione funzionale.
- Permette sia la covarianza generica che la controvarianza esplicitamente.
- Ha variabili dinamiche, se le vuoi.
- Migliore supporto dellenumerazione, con listruzione
yield
. - Consente di definire nuovi tipi di valore (o non riferimento).
Modifica – Indirizzare i commenti
- Non ho detto che C ++ non supporta RAII nativo. Ho detto che Java non ce lha (devi fare esplicitamente una prova / finalmente). C ++ ha puntatori automatici che sono ottimi per RAII e (se sai cosa stai facendo) possono anche sostituire la raccolta dei rifiuti.
- Non ho detto nulla sull emulazione di funzioni libere. Ad esempio, se devi accedere a un campo tramite un puntatore
this
, e associare il metodo che lo fa a un generico puntatore a funzione (cioè non nella stessa classe), quindi semplicemente non esiste un modo nativo per farlo. In C # ottieni gratuitamente. Non devi nemmeno sapere come funziona. - " trattando i metodi dei membri come funzioni libere " Volevo dire che non puoi, ad esempio, associare in modo nativo un metodo membro a una firma di funzione libera, perché il metodo membro " segretamente " necessita del puntatore
this
. - Listruzione
using
, ovviamente insieme ai wrapper IDisposable, è un ottimo esempio di RAII. Vedi questo link . Considera che non hai bisogno di RAII tanto in C # quanto in C ++, perché hai il GC. Per i momenti specifici in cui ne hai bisogno, puoi usare esplicitamenteusing
Un altro piccolo promemoria: liberare memoria è una procedura costosa. I GC hanno il loro vantaggio in termini di prestazioni in molti casi (specialmente quando si ha molta memoria). La memoria non verrà persa e non si spenderà molto tempo sulla deallocazione. Inoltre, anche lallocazione è più veloce, poiché non allochi la memoria ogni volta, solo una volta ogni tanto. Chiamarenew
significa semplicemente incrementare un ultimo puntatore a oggetto. - " C # è peggiore in quanto ha la garbage collection ". Questo è davvero soggettivo, ma come ho affermato in alto, per lo sviluppo di applicazioni più moderne e tipiche, la garbage collection è un enorme vantaggio.
In C ++, le tue scelte sono di gestire manualmente la tua memoria usandonew
a nddelete
, che empiricamente porta sempre a errori qua e là, oppure (con C ++ 11) puoi usare i puntatori automatici in modo nativo, ma tieni presente che aggiungono lotti e molto rumore al codice. Quindi GC ha ancora un vantaggio qui. - " I generici sono molto più deboli dei modelli " – Io semplicemente non ” Non so da dove lhai preso. I modelli potrebbero avere i loro vantaggi, ma nella mia esperienza i vincoli, il controllo del tipo di parametri generici, la controvarianza e la covarianza sono strumenti molto più forti ed eleganti. La forza dei modelli è che ti permettono di giocare con il linguaggio a bit, che potrebbe essere interessante, ma provoca anche molti mal di testa quando si desidera eseguire il debug di qualcosa. Quindi, tutto sommato, i modelli hanno le loro caratteristiche interessanti, ma trovo i generici più pratici e puliti.
Commenti
- E se vuoi ancora un Garbage Collector per C ++, puoi scaricarne uno .
- permetteteci di continuare questa discussione in chat
- Unaltra caratteristica importante in C # rispetto a Java, per motivi di prestazioni, è la " struct ", un tipo di oggetto che può essere memorizzato nello stack (o nei registri della CPU, in casi speciali) o incorporato in altri oggetti heap. Sono spesso usati per piccoli oggetti con 1-4 campi, come le coppie di coordinate X, Y.
- @LokiAstari Mente che spiega? Finché ti ricordi di annullare la registrazione dei gestori di eventi e di utilizzare il pattern Dispose sulle classi che contengono wrapper nativi, ' andrà bene. Questo ' è molto meno da sapere e ricordare rispetto alla gestione della memoria in C ++.
- -1 dato che mi mancano le sezioni " C ++ è migliore di C # in quanto … " e " Java è migliore di C # … ". Non penso che C # sia superiore in tutte le aree, quindi una risposta senza queste due sezioni probabilmente manca di alcune informazioni importanti.
Answer
Lambiente
.NET Framework e client Windows
Windows è il sistema operativo dominante sui computer client. I migliori framework GUI per applicazioni Windows sono Winforms e WPF insieme a .NET Framework . Il miglior linguaggio di programmazione con cui lavorare con .NET Framework e le sue API sono C # . Java non è unalternativa a questo.E C ++ è un vecchio linguaggio senza gestione automatica della memoria. C # è simile a C ++ ma ha una gestione automatica della memoria e non devi lavorare con i puntatori, che ti rendono più produttivo. C ++ può ancora essere lopzione migliore per alcuni casi, ma non per applicazioni di database ad alta intensità di moduli che sono comuni in business.
IIS e Windows Server
Se sei abituato a lavorare in ambiente Windows e con C #, avrai bisogno del minimo investimento per imparare IIS per la programmazione del server e Windows Server per amministrazione di base.
Active Directory e Windows Server
Se stai sviluppando software che verrà distribuito nelle reti aziendali, è probabile che utilizzino un ambiente centrato su Windows utilizzando un Windows Server con Active Directory. In un tale ambiente è più facile integrare e distribuire una soluzione realizzata in C # e .NET Framework .
Personalmente, sono uno sviluppatore Java, non uno sviluppatore C #, ma lavoro con il web. Passerei a C # se stessi sviluppando applicazioni di rete per la rete Windows. Ma preferisco Java per server web basati su Linux. Sceglierei C ++ per i sistemi embedded se non avessi “t vinto” molte dipendenze.
Sì, C # è un linguaggio migliore con funzionalità più moderne rispetto a C ++ e Java, ma non la cosa più importante per la scelta C # .
Riepilogo
Lambiente del software è più importante per la scelta C # . Se lavori in un ambiente con client Windows, server Windows, Active Directory, IIS e forse SQL Server quindi C # è di gran lunga la lingua migliore con .NET Framework .
Se lavori in un ambiente Unix con es. servizi web, Java sarebbe la mia scelta. E se lavori con sistemi embedded o devi integrarti con dispositivi hardware C ++ sarebbe una buona scelta.
Commenti
- Assolutamente – questo è il motivo per cui uso C # non per nessun altro motivo
- Puoi certamente usare .NET su altre piattaforme tramite Mono, MonoTouch e MonoDroid, ma i miei benchmark hanno rilevato che Mono è significativamente più lento di .NET per Windows e il Compact Framework di Microsoft ' è estremamente lento su Windows CE: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … ovviamente, WPF è disponibile solo su Windows (ma non ' mi piace comunque.)
- Quali dipendenze intendi che " sceglierei C ++ per i sistemi embedded se non ' t ha vinto ' t molte dipendenze. " Intendi le librerie java?
- @Puckl sì, ma principalmente jvm / jre.
- " Se lavori in un ambiente Unix con ad es. servizi web " ci sono altri linguaggi & framework che potrebbero essere considerati: ruby, Python, node.js ecc
Risposta
C # e Java
C # è un ottimo linguaggio se:
- Vuoi fare sviluppo orientato agli oggetti per scopi generali. È un classico linguaggio OOP tipizzato staticamente.
- Stai prendendo di mira solo piattaforme Microsoft (vale la pena ricordare che Microsoft ha clonato Java in modo efficace per creare C # perché desiderava un linguaggio simile a Java che vincolasse le persone Windows. Avrebbero potuto usare Java, ma ciò avrebbe consentito alle persone di eseguire facilmente applicazioni su altre piattaforme ….)
C # come linguaggio è più bello di Java in vari modi (meglio sintassi per proprietà, tipi di valore, generici reificati ecc.). Preferisco C # come linguaggio a Java, ma nel grande schema delle cose sono linguaggi abbastanza simili e adatti per applicazioni simili.
Daltra parte, Java ha anche alcuni grandi vantaggi:
- Enorme ecosistema open source: le librerie per Java che puoi ottenere gratuitamente sono di di gran lunga il migliore di qualsiasi lingua. È difficile sopravvalutare limportanza di questo aspetto: dal punto di vista dellottenimento delle cose, Java è molto efficace.
- Strumenti: gli strumenti Java sono a mio avviso migliori di quelli che si possono ottenere nel mondo .Net . per esempio. Maven (una volta che lo hai imparato!) È particolarmente impressionante.
- Manutenibilità: Java esiste da un po di tempo e ha avuto successo nelle grandi aziende proprio perché è relativamente stabile e sono stati fatti molti sforzi per la retrocompatibilità. La sintassi semplice e leggermente dettagliata aiuta anche Java in questo caso: è più facile leggere e mantenere il codice se il codice è molto chiaro ed esplicito.
- Nuovi linguaggi – La JVM ha alcuni nuovi linguaggi sorprendenti (Scala, Clojure , Groovy ecc.) Che sono il futuro della piattaforma Java. È qui che sta avvenendo gran parte dellinnovazione del linguaggio, e sta avvenendo molto più velocemente che in Java o C #.
Quindi Java vs C # è una chiamata piuttosto vicina e dipende davvero dal fatto che tu voglia essere nel campo Microsoft o nel campo Open Source / multipiattaforma.
Personalmente, preferisco Java perché:
- Lecosistema delle librerie è a mio avviso molto più importante del fatto che C # abbia una sintassi migliore di Java
- Nel lungo periodo, voglio che tutto il mio codice sia correttamente incrociato -piattaforma e in grado di funzionare su grandi cluster di macchine Linux economiche sul cloud.
- Clojure è IMHO il linguaggio più promettente al mondo in questo momento, e se rimango con la piattaforma JVM sarò in grado a tran col passare del tempo facilmente il mio codice e le mie competenze in Clojure.
C / C ++
C / C ++ è fondamentalmente una bestia completamente diversa. Non lo consiglierei per lo sviluppo di applicazioni generiche al giorno doggi per i seguenti motivi:
- Gestione della memoria – per la maggior parte della programmazione generica al giorno doggi, non vuoi essere gestire la propria memoria. La raccolta dei rifiuti in C # o Java è molto meglio per la produttività e la sanità mentale rispetto a qualsiasi tecnica di gestione della memoria esplicita che dovrai utilizzare in C / C ++
- Complessità – C ++ in particolare è un linguaggio estremamente complesso. Ci vuole molto tempo per padroneggiarlo e il codice stesso può anche essere diabolicamente complesso. (i modelli C ++ ad esempio sono particolarmente pelosi ….)
- Produttività – la maggior parte del tempo e tutto il resto a parità di condizioni ci vorrà più tempo per fare le cose in C / C ++.
Tuttavia è senza dubbio unottima scelta in un certo numero limitato di domini speciali, in particolare:
- Sistemi operativi: probabilmente vorrai usare C / C ++ se stai scrivendo un sistema operativo.
- Sviluppo di giochi – quasi tutti t I migliori motori di gioco commerciali sono C / C ++. È ancora la scelta migliore se stai sviluppando un titolo AAA impegnativo (C # e Java vanno benissimo per giochi meno impegnativi / casual)
- Calcolo ad alte prestazioni – C / C ++ ottimizzato è probabilmente il modo migliore per creare codice ad altissime prestazioni. Per la maggior parte delle applicazioni, eseguire questo livello di ottimizzazione non vale lo sforzo, ma in alcuni domini può essere estremamente prezioso (ad esempio, scambio ad alta frequenza)
- Accesso hardware: è necessario accesso allhardware (ad es. per un sistema embedded)
Quindi, fondamentalmente, C / C ++ è unottima scelta se e solo se ti concentri su uno dei domini in cui è particolarmente adatto .
Commenti
- Citi Maven come esempio di strumenti migliori per java. ' non ne sono particolarmente familiare, ma guardando la documentazione, Maven sembra piuttosto simile allo strumento di compilazione nativo .Net MSBuild. Cosa rende Maven migliore di MSBuild?
- +! (solo perché ho un solo voto): hai spiegato molto bene perché lecosistema Java è migliore e perché non si dovrebbe confrontare solo la sintassi di C # vs Java. Java ha più e migliori librerie e strumenti. Non sta accadendo molto nel linguaggio Java stesso, ma nuovi linguaggi molto interessanti stanno apparendo per la JVM che sono (IMO) molto più interessanti di C #. Non conosco Clojure ma trovo Scala molto interessante: progettato per essere OOP + FP sin dallinizio.
- perché tutti pensano che il codice C ++ sia pieno di gestione manuale della memoria. Non è C, sai, RAII significa che non devi quasi mai allocare / liberare memoria manualmente (le volte che fai sono quelle in cui un linguaggio come C # sarebbe inutile per te).
- @gbjbaanb – probabilmente perché RAII è inadeguato per la gestione generale della memoria. Non è in alcun modo equivalente in termini di flessibilità a un sistema GC completo come si vede in Java o C #. Non appena si oltrepassano i limiti di RAII, si torna nel territorio della gestione manuale della memoria.
- @mikera Voglio solo far notare che cè anche un bel po di sviluppo del linguaggio sulla piattaforma .NET. Per esempio. F # è un linguaggio funzionale pulito che integra perfettamente il resto di .NET, e Python è stato recentemente portato su .NET come Iron Python (e ha anche un bel IDE ! ).
Risposta
I heard that syntactically they are almost the same.
Sintatticamente? Chi se ne frega delle scimmie volanti della sintassi? La sintassi è utile solo per una cosa: consentire una migrazione più rapida da linguaggi sintatticamente simili. Questo è tutto.
C # è di gran lunga migliore di Java. Considera il loro supporto di programmazione generico e funzionale: C # è molto più avanti di Java. Per non parlare dei sovraccarichi degli operatori e di altre cose buone: il C # è di gran lunga migliore. Non cè modo che Java possa essere considerato migliore di C #.
C ++ e C # sono più di un concorso. C ++ ha un modello di compilazione arcaico incredibilmente fastidioso e un mucchio di malattie da C, ma i suoi modelli sono molto più potenti dei generici e i suoi approcci di gestione delle risorse sono molto più flessibili e potenti in generale, poiché using
è un completo fallimento , ed è più veloce.
Commenti
- Penso che si dovrebbero confrontare sia le caratteristiche del linguaggio sia la disponibilità di un linguaggio su piattaforme diverse. Con C # one è vincolato a Microsoft, con Java non lo è: ' è un grande vantaggio, almeno per gli sviluppatori UNIX / Linux. OOP + FP sono caratteristiche interessanti, ma perché preoccuparsi di C # se si posso usare Scala, che gira sulla JVM e può interfacciarsi con il codice Java legacy? Non imparerei mai un linguaggio specifico per piattaforma a meno che non sia costretto.
- @Giorgio: Il progetto Mono esiste . Ma in secondo luogo, Microsoft si prende davvero cura della loro piattaforma: le danno regolari aggiornamenti di grandi dimensioni. Java non ha praticamente avuto nulla di nuovo. Inoltre, la domanda riguarda C # vs Java, non CLR vs JVM.
- @DeadMG: Per quanto ne so, non posso prendere alcun programma C # sviluppato su Windows e crearlo con Mono. Non CLR vs JVM? La domanda riguarda il motivo per cui le persone usano C # o Java. Affinché le persone utilizzino una lingua, hanno bisogno di un runtime e di un sistema operativo. Non discuto del fatto che C # abbia più funzionalità di Java, ma Java è molto più portabile: questo è un fattore che può influenzare ladozione di un linguaggio. In effetti Java è ancora usato molto più spesso di C # anche se manca di alcune funzionalità avanzate.
- @Giorgio, puoi prendere qualsiasi programma C # e costruirlo con Mono. Non è possibile utilizzare alcune librerie (che comunque non fanno parte del linguaggio C #). E java non è " molto più portabile ". Puoi programmare per iOS in C #, ma non in Java, ad esempio.
- @Giogio, Mono è portabile almeno quanto JVM.
Risposta
Bene C#
ha alcune funzioni incorporate come LINQ
e delegati. Sta ottenendo il meglio da entrambi i mondi: Java
e C++
. Guarda qui per un confronto completo.
Ma il Java
mondo mi piace di più, molto più framework open source e funziona su ogni piattaforma. E non parlarmi di Mono
– non è unopzione affidabile.
Commenti
- +1: " Ma mi piace di più il mondo Java: molti più framework open source e funziona su ogni piattaforma. " Lascia ' s spera che Oracle non cambi questa situazione!
- Mente per spiegare, cosa ' non è " affidabile " in Mono?
- @Petar Minchev, non è altro che colpa tua. Devi seguire le linee guida sulla portabilità e non dovresti usa librerie non portabili e in questo modo qualsiasi applicazione complessa funzionerebbe in modo affidabile con Mono. Cose come WPF mai verranno portate.
- @Petar Minchev, ci sono molte cose non portabili Librerie Java disponibili. Devi sempre essere cauto riguardo alla portabilità, indipendentemente dalla lingua che ' stai utilizzando. E comunque, la domanda riguarda le lingue, non le e librerie di terze parti.
- @Petar Minchev, GTK # è portabile. Usalo invece.
Rispondi
Secondo alcune fonti (vedi ad esempio http://www.indeed.com/jobtrends ) C # è ancora meno popolare di Java e popolare come C ++.
C # fornisce funzionalità che Java mancano, per esempio supporto diretto per alcuni idiomi di programmazione come proprietà, stile di programmazione funzionale e così via. C # ha un livello di astrazione più elevato rispetto a C ++, il che è un vantaggio quando il tempo di sviluppo è più importante della velocità del programma.
Personalmente, preferisco ancora i mondi Java / C ++. Come ha detto Petar Minchev, Java ha più framework e applicazioni open source, funziona ovunque, è meno legato a un particolare vendor e sistema operativo. Il C ++ ha vantaggi simili, anche se il codice spesso necessita di adattamenti da una piattaforma allaltra. Dato che preferisco sviluppare su Linux e, per quanto ne so, non posso avere un C # completo su Linux, non ho mai avuto un reale interesse per C # perché le mie esigenze di programmazione sono coperte da C, C ++, Java, Scala.
Daltra parte, per molti sviluppatori essere legati a un particolare fornitore non è un problema: Microsoft ha una posizione dominante nel mercato dei sistemi operativi e C # offre molte opportunità di lavoro. Pertanto, IMO molti sviluppatori adottano C # perché, oltre ad essere un linguaggio ricco di funzionalità, è anche un buon investimento.
Commenti
- " Non posso avere un C # completo su Linux " – Potresti approfondire questo? Vuoi dire che il framework .Net completo non è ' t disponibile perché ' non ho riscontrato problemi con il linguaggio C # stesso ( o F # per quella materia) su Linux?
- @wawa: Per quanto ne so, il framework .Net corrisponde al JDK e il framework .Net è disponibile solo per Windows mentre JDK è disponibile per diversi sistemi operativi ' s. Se questo non è corretto, posso modificare la mia risposta (e cambiare anche la mia opinione).
- Penso che unanalogia più vicina sarebbe la libreria di classi di base con il JDK. Il BCL ha parti standardizzate e non standardizzate. Il progetto mono implementa sia i pezzi standardizzati che quelli non standardizzati.
- @wawa: Grazie per le informazioni. Sto valutando la possibilità di provare C # utilizzando Mono. Tuttavia, ho ancora una forte sensazione che C # sia molto più legato a Microsoft di quanto Java lo sia a Oracle (o a Sun in passato).
Risposta
Che dire di " Quale Software Development Framework, che include un linguaggio di programmazione " è meglio?
Hai dimenticato di includere altre cose, come l " ambiente " con cui lavorerai.
-
Lavorerai solo per il sistema operativo Windows, ma non è necessario che sia di basso livello e che tu abbia molta memoria e altre risorse?
Scegli .NET come framework su Windows e usa C #.
-
Lavorerai solo per Windows, ma non deve essere di basso livello, MA non hai molte risorse?
Scegli il framework Delphi (e il linguaggio di programmazione Object Pascal Delphi o il linguaggio di programmazione Lazarus Object Pascal)
-
La tua app è richiesta. per supportare seve piattaforme reali, come un gioco, in diversi cellulari?
Scegli Java Framework e il linguaggio di programmazione Java.
-
È Linux con KDE come grafico interfaccia?
Scegli il framework QT, con C ++
-
È Linux con Gnome come interfaccia grafica?
Scegli il framework GObject / GLib , con C ++
-
Lavorerai con molte operazioni di basso livello, come lo sviluppo di driver?
Il semplice C o C ++ è usato per diversi Sistemi, con librerie standard, come framework.
Solo i miei 2 centesimi.
Commenti
- Non ' non sono sicuro di 3. Gli smartphone sono molto popolari oggi e, per quanto ne so, tutti supportano C # in qualche forma, ma solo Android supporta Java.
- Non è ' t Delphi morta? 🙂
- @ šljaker No, ma ' t questi giorni sono molto popolari.
- @svick: Questa è una bugia. Oltre ad Android, Java esiste anche in qualche forma su iOS, Symbian, WinMo, Blackberry, Maemo e WebOS (cioè tutto ciò che conta o conta ancora; don ' per iniziare con piattaforme ancora più piccole). Android, Blackberry e Symbian ufficialmente supportano Java come opzione di sviluppo; Sun supportava Java su iOS anche se ad Apple non piace. Java è il linguaggio di sviluppo principale nei telefoni Android e Blackberry. Non posso ' dire lo stesso con C #, AFAICT ' è ufficialmente supportato solo su WinMo.
Risposta
Se fai una ricerca, è probabile che ti imbatterai in discussioni sui principali linguaggi di programmazione. Ecco uno dei risultati della ricerca: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java sembra ancora essere il linguaggio più popolare.
Java ha cercato di rimuovere alcune delle carenze del C ++ (e di semplificare la vita dei programmatori per applicazioni non in tempo reale e non critiche). Essendo C # lultimo arrivato alla festa, ha evitato alcune delle carenze del linguaggio Java. C # ha fatto molti progressi (poiché Microsoft ha molto controllo su di esso) mentre i progressi in Java sono stati bloccati per un periodo di tempo considerevole a causa di conflitti tra le parti interessate.
Risposta
Un paio di cose che non sono già state menzionate:
C # è migliore di C ++ perché:
Elimina con file di intestazione, che si traduce in grande semplicità.
C # è migliore di Java perché:
Supporta sia il tipo di riferimento (classe) che il tipo di valore (struct) definito dallutente tipi, che, se sai cosa stai facendo, possono produrre vantaggi significativi in termini di prestazioni.
Supporta i delegati, che sono come interfacce a metodo singolo, semplificando così notevolmente la codifica di costrutti ricorrenti che coinvolgono oggetti a metodo singolo.
Commenti
- Puoi spiegare in che modo avere entrambi i tipi di riferimento e di tipo valore può produrre vantaggi in termini di prestazioni in C #?
- Ad esempio, se desideri avere un array di record , in Java non hai altra scelta che descrivere il tuo record usando una classe, quindi il tuo array sarà un array di riferimenti a una moltitudine di oggetti allocati separatamente. In C # puoi descrivere il tuo record usando una struttura, quindi il tuo array sarà solo una singola area continua di memoria contenente le tue strutture una dopo laltra, proprio come in C.
- Come un altro esempio, se vuoi per definire un nuovo piccolo tipo, (un tipo che si adatterebbe a una parola macchina) non è necessario definire una nuova classe per esso; puoi semplicemente renderlo uno struct, quindi obbedirà alla semantica dei valori. Il passaggio di tali strutture non sarà più costoso del passaggio di riferimenti a oggetti, ma si avrà il vantaggio di non allocare, costruire e raccogliere dati inutili.
- Capisco. Quindi le classi vengono istanziate sullheap e vi si accede tramite riferimenti mentre le strutture vengono istanziate sullo stack (?)
- Quasi corretto. Lunica inesattezza in questa istruzione è che una struttura verrà trovata sullheap se è incorporata allinterno di un altro oggetto o se è allinterno di un array di strutture. E sarà anche trovato nellheap se mai viene inscatolato, esattamente nello stesso modo in cui i tipi di valore sono inscatolati in Java.
Risposta
Dovresti scegliere la lingua migliore per il tuo ambiente previsto e la tua esperienza.
Scegli C # se lavori in un ambiente solo Microsoft. Sebbene C # sia standardizzato secondo ISO / IEC 23270: 2003, la versione di Microsoft rimane lunica implementazione completa. Diverse parti chiave del linguaggio non sono coperte dallo standard e sono quindi soggette a brevetti Microsoft. Nessun altro implementerà una versione completamente compatibile della lingua per altri sistemi, quindi in effetti, sei fornitore bloccato su Microsoft Windows e .Net per tutto il tempo in cui utilizzi la lingua. Se stai cercando competenze da utilizzare nel mercato mobile, è meglio cercare un altro linguaggio.
Java funziona, ma ha un buon sovraccarico, in parte a causa di caratteristiche come la raccolta dei rifiuti. Java inoltre non è standardizzato da ISO / IEC, quindi non hai garanzie se cambi piattaforma e versione di Java, solo le migliori intenzioni di Sun / Oracle. Se alla fine hai intenzione di lavorare con Android, questa è sicuramente la strada da percorrere . La programmazione di Android è fondamentalmente Java, con alcune modifiche.
Il C ++ è standardizzato e quasi tutti i compilatori seguono lo standard internazionale, quindi hai un comportamento garantito MA il linguaggio non ti protegge da te stesso. Devi eseguire la pulizia e il controllo delloverflow da solo. Non è difficile. I programmatori C / C ++ lo fanno da molti anni. Apple usa Objective C per tutto, quindi se vuoi puntare ad Apple, ti consiglio di provare questo.
Se a un certo punto ti vedi lasciare Windows alle spalle, ti suggerisco di imparare sia C / C ++ che Java, che sono entrambi commerciabili in questo momento.
Risposta
In relazione a C ++ vs C # (dato che non sono abbastanza esperto in Java), quello che mi manca qui è la possibilità di accedere a cose di basso livello su Windows. Ad esempio, non puoi (ancora) sviluppare un driver video nativo in C #, ma puoi farlo con C ++. Questo non migliora C ++. Vedo C ++ contro C # come Assembly contro C.
C # è nel mio visualizzazione molto più efficiente se si guarda al tempo necessario per implementare effettivamente una funzionalità. La penalizzazione delle prestazioni del runtime .Net è trascurabile per il 99% delle applicazioni sviluppate. Può essere significativo se si esegue un ciclo stretto, sì con tutti i mezzi, ma la maggior parte delle volte unapplicazione è inattiva, in attesa di qualsiasi tipo di input, segnale o interruzione (IO disco, clic del pulsante, rete, completamento dellanimazione).
La libreria CLR con tutti i suoi funzioni ha un altro grande vantaggio. Quando stavo formando C # per sviluppatori junior, la maggior parte di loro ha affermato di apprezzare la convenzione di denominazione logica di classi, membri e spazi dei nomi. Trovare una funzionalità del metodo era logico in tutto lSDK, qualcosa in cui Visual Basic 5 era seriamente difettoso. Questo li ha aiutati moltissimo ad adottare la biblioteca. Dopo aver appreso la sintassi di una lingua, imparare una nuova libreria è importante per ottenere una buona conoscenza di qualsiasi SDK. Ti evita di reinventare la ruota.