2009-03-14 13 views
19

I codice C# tutto il giorno, ma di recente ho fatto un salto in Java per le cose per hobby, come scrivere per le piattaforme BlackBerry e Android. Per tutto questo tempo ho pensato che, per quanto riguarda le funzionalità linguistiche, Java e C# fossero gemelli l'uno dell'altro.Java non ha ancora tenuto il passo?

In ogni caso, ho scoperto che Java è l'equivalente di C# 1.1 o qualcosa del genere. In Java, devo scrivere due volte il codice che vorrei in C#. Funzionalità come gli inizializzatori di oggetti, lambda, proprietà per l'amor di Dio, arrivano mai a Java? Ho provato a guadare la roba JSR, ma non ho trovato nulla.

Java non ha semplicemente tenuto il passo? O semplicemente non lo uso come è previsto?

+2

Perché questa domanda è stata chiusa. A giudicare dalle risposte, la maggior parte delle persone concorda sul fatto che Java in effetti sia rimasto indietro rispetto a C# in termini di funzionalità linguistiche. E la mancanza di tali caratteristiche, come le chiusure, può essere determinata obiettivamente. – javashlook

+2

Io certamente non l'ho chiesto come un modo per iniziare una guerra religiosa. Non sono sicuro del motivo per cui è stato chiuso. – AngryHacker

risposta

10

Penso che tu abbia ragione, Java non ha molte delle nuove funzionalità convenienti introdotte da C#. Molte delle nuove funzionalità di C# sono solo trucchi per compilatori (proprietà, inizializzatori di oggetti, metodi di estensione) che è possibile eseguire a mano in C# o Java.

Il popolo Java probabilmente non hanno introdotto queste nuove funzionalità perché probabilmente preferiscono mantenere il linguaggio più semplice e retro-compatibile, per quanto possibile.

Devo dire che preferisco scrivere C# in questi giorni.

8

Direi di sì, Java non ha tenuto il passo. Microsoft ha esaminato a lungo Java (e C++) e ha capito quali sono i fastidi che hanno avuto, e quali funzionalità mancavano e ha corretto molti di quelli nelle versioni successive di C#.

Inoltre, i progettisti di Java sembrano cercare di mantenere la loro lingua e parser più semplice possibile, mentre i C# progettisti non hanno alcun timore di zucchero sintattico: proprietà, delegati, lambda e LINQ sono tutti esempi di questo. E come hai già notato, un cucchiaio di zucchero sintattico rende la lingua molto più semplice.

6

Quanto più un linguaggio vecchio è popolare, tanto più grande diventa la sua base di codice e le modifiche apportate alle lingue vengono effettuate in modo più conservativo, al fine di non rompere il codice esistente, che sarebbe costoso da risolvere.

Java è una delle lingue più vecchie. C# è relativamente nuovo e può permettersi di essere modificato in modo più radicale. Confronta con C e C++, che non è cambiato per un decennio.

Se davvero vuole nuove funzionalità del linguaggio per il nuovo codice, tenta un altro linguaggio JVM-based che interagisce con Java (Groovy, Scala, Clojure).

+1

A meno che la vecchia lingua sia VB6! Se hai programmi VB6 esistenti, beh, Microsoft ha alcune nuove lingue per riscrivere le tue app. Forse finirai prima che la tua organizzazione fallisca e i tuoi concorrenti abbiano innovato i tuoi prodotti in irrilevanza. – MarkJ

7

Java è sicuramente in ritardo, anche se direi che è più vicino a C# 2.0 che a C# 1.1 - ha generici, ad esempio, anche se sono leggermente diversi da quelli in C#.

mi ha deluso di sentire che molte delle caratteristiche del linguaggio proposti sono stati eliminati per Java 7 (in particolare chiusure), ma poi è arrivato Project Coin - così almeno potremmo avere alcune piccole caratteristiche per guardare al futuro.

non riesco a vedere Java recuperando a C# in termini linguistici in qualunque momento presto - hanno più la lingua bagaglio che rende più difficile per cambiare la lingua per una cosa. Trivial anche se può sembrare, eccezioni controllate aggiungere un "asse" in più per firme dei metodi che rendono alcune cose (come chiusure) più complicato di quanto sarebbe altrimenti.

(E, naturalmente, C# 4.0 è Hoving in vista troppo ...)

1

E questo non è per Swing vs WPF che sono come il gesso contro il caviale.

4

In effetti hai ragione. Tuttavia, ritengo che il focus dei miglioramenti linguistici si sia spostato sostanzialmente su nuove lingue JVM, come ad esempio Groovy e Scala.

E forse è una buona cosa, dato che Java ha una base di utenti significativa, che, sfortunatamente, difficilmente può essere d'accordo su quali caratteristiche, se esistenti, e in quale forma dovrebbero essere aggiunte alla lingua. Ad esempio, dai un'occhiata a questo poll. D'altra parte, Sun ha promesso miglioramenti alla JVM che faciliterebbero lo sviluppo e l'esecuzione di linguaggi JVM dinamici, come l'istruzione invokedynamic, JSR 292.

Per me questo è un compromesso accettabile.

5

Penso che parte della questione sia economica. Non è un caso che Java sia arrivato quando Sun era un attore leader nel mercato. Il loro titolo ha raggiunto il massimo storico nel marzo 2000, alimentato da tutti i server che le società dot-com stavano acquistando.

Quando la bolla è scoppiata e tutti i server hanno raggiunto il mercato, è stato necessario molto tempo prima che il problema fosse risolto. Il sole non si è ancora ripreso da esso. L'aumento di potenza dei server commodity ha eroso il vantaggio di chips speciali RISC e Solaris. Non puoi essere una grande potenza militare se non sei un potere economico; essere un innovatore di questa scala richiede anche denaro.

Hanno perso un sacco di talento (ad esempio, Bill Joy) che alimentava l'azienda.

Sun è, nella parte inferiore, un'azienda di hardware. La strategia con Java, specialmente sul lato server, era che avrebbe aiutato a guidare le vendite di hardware.

Penso che il ritmo del cambiamento per Java abbia sofferto a causa di tutto questo.

Microsoft continua a sviluppare C# perché le entrate continuano a riversarsi, Anders è ancora con loro, e sono una società di software che alla fine fa soldi con il prodotto. Ecco perché sono avanti ora.

+1

Microsoft sviluppa le loro lingue perché è tutto "sviluppatori sviluppatori sviluppatori". se stai cercando di vendere sistemi operativi, la cosa più importante da fare è fare in modo che gli sviluppatori software vogliano sviluppare software per il tuo sistema operativo. – MarkJ

+1

Se le mucche gemelle di Microsoft, il sistema operativo e Office, vengono mai soppiantati, scommetto che anche gli "sviluppatori" andranno in secondo piano. Il denaro guida la strategia o l'altro modo? Hai bisogno di entrambi. – duffymo

+0

Il mio punto era che non sono le entrate di C# a guidare il suo sviluppo, sono le entrate delle mucche da mungere. Questo non mi è del tutto chiaro dal testo della tua risposta: fanno "soldi dal prodotto" - quale prodotto? +1 in ogni caso – MarkJ

Problemi correlati