D è un'alternativa credibile a Java e C ++? [chiuso]


163

Il linguaggio D è un'alternativa credibile a Java e C ++? Cosa ci vorrà per diventare un'alternativa credibile? Dovrei preoccuparmi di impararlo? Merita l'evangelizzazione?

Il motivo principale che chiedo è che con il nuovo standard C ++ (c ++ 0x) quasi qui, mi è chiaro che il linguaggio è andato ben oltre il punto di non ritorno rispetto a chiunque lo abbia mai capito. So che C / C ++ non morirà mai, ma ad un certo punto dobbiamo andare avanti. Anche COBOL ha avuto il suo tempo e Java ha per molti aspetti annullato il C ++. Allora, qual è il prossimo? D riempie il conto?


23
COBOL sta tornando, ma vai avanti e impara D se solletica la tua fantasia. Leggere le foglie di tè ha più di una possibilità di predire The Next Big Language.
Shog9,

5
Non mi preoccupo di quale sia la prossima grande lingua, mi preoccupo di più che se dovessi dire al mio più datore di lavoro che avrei voluto usare D nel mio prossimo progetto che non sarei preso sul serio perché la lingua non è ' t ancora.
Mark Kegel,

22
Va notato che le pagine "D vs. C ++" di marte digitali discriminano fortemente il C ++. molte volte dicono "c ++ non può farlo", C ++ può farlo
Johannes Schaub - litb

23
@Johannes: Non si tratta di ciò che la lingua rende possibile, è ciò che la lingua rende facile. - Brian Hurt
missingfaktor il

9
@Rahul, d'accordo ma poi dovrebbero dirlo. come "questo non è facile da fare in C ++" e non che non sia affatto possibile.
Johannes Schaub - litb

Risposte:


130

Ciò che determina il successo e la popolarità di un linguaggio di programmazione per lo sviluppo di software nel mondo reale è solo parzialmente correlato alla qualità del linguaggio stesso. Essendo un linguaggio puro, D ha probabilmente molti vantaggi rispetto a C ++ e Java. Per lo meno è un'alternativa credibile come linguaggio puro, a parità di altre condizioni.

Tuttavia, altre cose contano per lo sviluppo del software - quasi più del linguaggio stesso: portabilità (su quante piattaforme funziona), supporto per il debugger, supporto IDE, qualità standard della libreria, supporto dinamico della libreria, collegamenti per API comuni, documentazione, sviluppatore comunità, slancio e supporto commerciale, solo per citarne alcuni. Sotto ognuno di questi aspetti, D è irrimediabilmente dietro Java, C ++ e C #. In effetti, direi che è anche dietro i cosiddetti linguaggi di "scripting" come Python, Perl, PHP, Ruby e persino JavaScript in questo senso.

Per essere schietti, semplicemente non è possibile creare un'applicazione multipiattaforma su larga scala utilizzando D. Con una libreria standard immatura, nessun supporto in qualsiasi IDE moderno (ci sono plugin per Visual Studio e Xamarin Studio / MonoDevelop), limitato supporto di librerie dinamiche / condivise e pochi collegamenti ad altre lingue, oggi D non è più un'opzione.

Se ti piace quello che vedi di D, lo impari sicuramente, non dovrebbe volerci molto se conosci già Java e C ++. Non credo che l'evangelizzazione sarebbe utile - a questo punto se D avrà successo, ciò di cui ha davvero bisogno è che più persone lo usino in silenzio e affrontino le sue principali carenze come la libreria standard e il supporto IDE.

Infine, per quanto riguarda il C ++, mentre la maggior parte concorda sul fatto che la lingua sia troppo complessa, migliaia di aziende stanno usando con successo il C ++ come parte di un sano mix di lingue, consentendo solo un sottoinsieme più piccolo e ben definito della lingua. È ancora difficile battere C ++ quando sono richieste sia prestazioni non elaborate che utilizzo di memoria ridotta.


8
dire che non ha "alcun supporto in alcun IDE moderno" sta esagerando un po '. C'è supporto in eclipse. Non è ancora di 1a classe, ma è lì e sta migliorando.
BCS,

46
L'assenza di prove non è una prova di assenza.
FeepingCreature

29
Se si fa un'affermazione positiva come "ci sono unicorni rosa", è necessario fornire prove prima che sia ragionevole accettare. Certo, ciò non significa che non ci siano unicorni rosa come affermato da @FeepingCreature, ma semplicemente affermando che non è un argomento convincente o valido.
JoshD,

8
@Feeping: è un detto carino che piace a James Randi, ma semplicemente non è vero. I tuoi test hanno prove ragionevoli a sostegno del fatto che il test dovrebbe trovare qualcosa, ma non è questa la prova di assenza.
GManNickG,

9
Voglio aggiungere che costruiamo applicazioni su larga scala con D1 e Tango. Ok, non siamo multipiattaforma ma solo Linux, ma comunque. Tutta la nostra infrastruttura è scritta in D ed
elaboriamo

109

Solo per aggiungere le mie esperienze nel mix:

Circa un anno fa ho lavorato a un progetto di gioco su piccola scala (3 programmatori) della durata di 3 mesi, in cui abbiamo usato D come lingua principale. L'abbiamo scelto in parte come esperimento, in parte perché aveva già collegamenti per SDL e alcuni altri strumenti che stavamo usando, e per lo più per i benefici sembra avere su C ++.

Ci è piaciuto usarlo. È stato veloce da imparare e facile da scrivere. Molte delle sue funzionalità si sono rivelate preziose e mi mancano di essere tornate al C ++.

Tuttavia, i seguenti punti hanno reso le nostre vite più difficili:

  1. All'epoca non esisteva un IDE valido, il che rappresentava un grosso problema. Alla fine abbiamo creato il nostro personalizzando Scite. Funzionava bene, ma non era l'ideale.
  2. Non c'era debugger al momento. Siamo riusciti a far funzionare WINDBG su base imprevista, ma non era affidabile. Il debug del codice senza un debugger ha reso la vita a volte infernale.
  3. All'epoca c'erano 2 librerie standard tra cui scegliere (Tango e Phobos). Abbiamo iniziato con uno, siamo passati all'altro e avevamo davvero bisogno di un mix di funzionalità da entrambi (Tangobos!). Ciò ha causato mal di testa e riscrittura del codice.
  4. Collegamenti ad altri strumenti non disponibili. Alla fine abbiamo dovuto passare a DirectX (per motivi per cui non entrerò). Non erano disponibili collegamenti per DirectX, quindi abbiamo dovuto scrivere il nostro in C ++, crearlo come .dll e associarlo a quello. Questo è stato un lavoro abbastanza brutto e ha richiesto del tempo.

Nel complesso, abbiamo adorato scrivere D. Ha reso la scrittura del codice semplice ed è stato veloce da imparare. I problemi che ho citato fanno eco alla risposta che è stata accettata per questa domanda: sono i bit "extra" che devono essere affrontati in D, il nucleo è solido.


4
input interessante ... ora c'è un debugger !! :)
bbqchickenrobot,

14
Non capisco perché DirectX sia un problema. Non sono un programmatore D, ma pensavo che D potesse capire C? E DirectX ha un'API C?

è relativamente facile usare le cose DirectX con interfacce D native, quindi non è necessario scrivere un wrapper in c ++ tranne che in alcuni casi speciali
Quonux,

@Quonux: Questa è stata la nostra esperienza all'epoca, nel lontano 08. Non c'è dubbio che le cose siano andate molto avanti da allora. Non ricordo più i dettagli cruenti.
xan,

1
Aggiornamento 2019: il linguaggio di programmazione D si è espanso in modo significativo. Ora puoi utilizzare GDB out-of-the-box con Dlang. DPP ti consente di includere direttamente qualsiasi intestazione C in Dlang. Calypso ti consente di utilizzare qualsiasi libreria C ++ in Dlang, incluso Qt, ha alcuni bug, ma funziona in gran parte.
noɥʇʎԀʎzɐɹƆ

60

Sono d'accordo che il C ++ sta diventando un linguaggio senza uscita - e mi fa male dirlo, dopo averlo usato negli ultimi 17 anni.

Penso che D sia il legittimo successore di C ++. Dal punto di vista linguistico "fa tutte le cose giuste" (anche se non sono d'accordo con ogni decisione minuto). Penso che con C e C ++ sul declino non ci siano altri linguaggi a livello di sistema che possano davvero fare quello che fanno, mentre si reggono nel mondo dei linguaggi moderni - tranne D! D non solo ricopre questo ruolo, ma lo eccelle! Uno sguardo a D1.x dovrebbe essere sufficiente per convincerti di questo - ma quando guardi D2.0 ti lascia senza fiato. Ritengo che non ci sia nessun altro linguaggio in giro oggi che funzioni come D2.0 nel colmare i paradigmi di programmazione imperativa e funzionale - che diventerà più significativo nei prossimi anni.

La mancanza di accettazione mainstream - o persino di visibilità - nonché di biblioteche su larga scala, mature, sono ovviamente un ostacolo. Tuttavia non penso che tu possa cancellarlo per questo. Sono convinto che D si crescerà fino a diventare uno dei più importanti lingue in giro nei prossimi anni - e quelli che stanno prendendo sul serio ora stanno per essere in buona posizione per prendere l'iniziativa quando arriverà quel momento.

Penso che la differenza avverrà a causa, in gran parte, del coinvolgimento di Andrei Alexandrescu. Questo non è per screditare Walter Bright in alcun modo, che ha fatto un lavoro importante nel portare D al mondo. Ma Alexandrescu è una figura importante e avvincente nella comunità C ++ - ed è lì che verrà la maggior parte dei potenziali switcher D. E ha anche dato un contributo significativo e importante a D2.0 a supporto della programmazione funzionale.

Si può ancora scoprire che D è destinato a essere il Betamax dei linguaggi a livello di sistema - ma i miei soldi sono su di esso che si girano nei prossimi due anni.


20
C non è in declino per la programmazione a livello di sistema. Linux, Windows e OS X sono tutti sviluppati in C. Allo stesso modo, molti micro-controller e sistemi operativi per micro-controller sono programmati utilizzando C.
Kevin,

12
Non penso che D "faccia tutte le cose giuste". La cosa giusta sarebbe ricominciare da capo, non provare a creare un C ++ migliore. Penso che siano necessari cambiamenti più radicali per giustificare un passaggio su larga scala dal C ++.
jalf

9
Kevin: Windows e OS X non sono sviluppati in C. I blocchi del kernel lo sono, ovviamente, ma Windows usa un sacco di C ++ e OS X Obj-C. Linux è l'unico SO che conosco in cui C è stato elevato allo stato di One True Language e non viene utilizzato nient'altro.
jalf

16
Bella previsione. Sono passati 2 anni da questo post e D non è più vicino all'adozione tradizionale.
mikerobi,

18
@mikeobi LOL! I due anni iniziano da quando leggi quella frase ;-)
philsquared il

20

Mi piace il fatto che D sia opera di un genio, principalmente una mente: Walter Bright, il cui compilatore Zortech è stato fantastico ai suoi tempi.

Al contrario, C ++ è troppo progettato dal comitato, anche se Bjarne è un'influenza. Troppe funzioni aggiuntive e strana nuova sintassi. Questa differenza si riflette nella facilità di apprendimento e facilità d'uso quotidiano, meno bug.

Le lingue più coerenti portano a una migliore produttività e gioia del programmatore, ma questo è soggettivo e discutibile! (immagino che dovrei votare la mia risposta)


9
C'è anche un altro genio che ci sta lavorando adesso - Andrei Alexandrescu. Quello che ha fatto con D2.0 è, IMHO, almeno sorprendente quanto quello che Walter ha fatto con D1.x. Tra i due (non scontando i numerosi altri collaboratori) D sta diventando una lingua da non sottovalutare. Guarda questo spazio
philsquared

5
fai che 3 (o più) dannatamente bravi programmatori: Bartosz Milewski
BCS,

7
Quindi il C ++ è stato originariamente creato da un ragazzo davvero intelligente, ed è ora controllato da un comitato di persone davvero intelligenti, mentre D è stato originariamente creato da un ragazzo davvero intelligente, e ora è controllato da un ... gruppo di persone davvero intelligenti. Sì, vedo come questo rende D superiore. ;) (suggerimento: la bruttezza del C ++ non ha nulla a che fare con i comitati. È una conseguenza degli obiettivi di progettazione del linguaggio. Era inteso per essere (quasi) un sottoinsieme di C. D non lo è, e non doveva essere così , il che significa che potrebbe evitare molte verruche (a costo di evitare anche la popolarità che ha portato)
jalf

4
@jalf hai ragione sul fatto che la "bruttezza" del C ++ non è dovuta alla progettazione del comitato. Tuttavia, la sua lentezza nell'evoluzione è.
philsquared

15

D è una buona lingua e abbastanza popolare , ma come tutte le lingue, è solo un altro strumento. Quale strumento usare dipende dal tipo di persona che sei, da come pensi, dall'ambiente in cui lavori, dalle restrizioni delle lingue che applicano il programma e, soprattutto, dal programma stesso. Se hai tempo, consiglierei sicuramente l'apprendimento di D. Caso peggiore, non lo userai mai. Più probabilmente imparerai quali aspetti ti piacciono di più e in quali condizioni brilla di più, e ne trarrai vantaggio quando creerai nuovi programmi.

Consiglierei di guardare la tabella comparativa D per vedere quali sono le caratteristiche della lingua e vedere se suona bene per te.


10

Il linguaggio D è moderno. Nessuna lingua è perfetta e non ci sono dubbi. Ma le lingue sono nate per semplificare la vita. Dove il linguaggio D rispetto al C ++ ha molte buone caratteristiche, in termini di complessità. Sono coinvolte molte altre specialità di combinazione linguistica, che aiutano i programmatori a programmare più velocemente, con le funzionalità TOP introdotte da altre lingue. Vedi anche: per maggiori dettagli su D e altre lingue

  • D vs C ++, è la compatibilità, in cui sono coinvolti enormi linguaggi C ++ e richiede compatibilità con D. D consente già al 100% di compatibilità con C, che è comunque una buona vittoria.

  • D vs C ++, C ++ è la mia opinione un linguaggio molto carino, ma è difficile da programmare e richiede tempo, richiede sempre più esperienza per avere successo, ma D consente di fare lo stesso con semplicità

  • D vs C ++, non sono sicuro che C ++ lo faccia, ma D non consente l'assegnazione di variabili con nessuna restrizione di tipo utilizzando "auto", che è utile avere una dinamica variabile, quando è necessario è possibile creare un tipo rigoroso

  • D vs C ++, se hai altre esperienze linguistiche, puoi iniziare subito con esso, ha una road map di apprendimento facile e viene progettata da un forte team di esperti e supporto aziendale

  • D vs C ++, la cosa molto bella che ho trovato di D, è lo stile del codice, dà l'aspetto e lo stesso aspetto del C / C ++, mentre la codifica ricorda che sto facendo un C / C ++ davvero moderno che ha chiamato D

Ci sono molte altre buone ragioni per il linguaggio D, non c'è motivo di sottovalutare nessuna lingua, è sempre la scelta dell'utente.


7

Dipende da cosa sono le vostre esigenze - applicazioni commerciali su larga scala scritti in D fanno esiste sul lato server, e per questo D (in genere utilizzando Tango / Mango) è una misura perfetta, e si rischia di essere in grado di servire più richieste che con qualsiasi altra lingua / piattaforma.

Per soluzioni più specializzate in termini di protocolli e interattività (che molti sono) avrai più problemi a trovare le librerie necessarie e la mancanza di strumenti probabilmente ti influenzerà maggiormente.


1
potresti fornire un esempio di tale app commerciale?
Alexander Malakhov,

1
@ Alexander Malakhov: A ... hmm ... bella domanda .... sono felice che tu abbia chiesto se esiste un'app commerciale .... domanda ben pensata ... sicuramente ..... ammiro ... ... questo è il tipo di domande che dovremmo porre ..... mostra il tuo intelletto ..... hmm ... fammi cercare ... App commerciale in D ... hmm .... beh .. Aspetta ... lo so ma ... non riesco proprio a ricordarlo ... ce ne sono certamente .... aspetta ... Sto ancora cercando ... aspetta!
Simple Fellow,

7

D è piuttosto impressionante e il libro di Andrei su di esso è ben scritto. Ma come altri hanno già detto, hai bisogno degli strumenti e del supporto della piattaforma. GDC può, nel tempo, essere la risposta ad entrambi.

Hai visto questo?

"GNU Debugger aggiunge il supporto per il linguaggio D": http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

Inoltre, il sito digitalmars ha pagine che parlano dell'interfaccia con C e C ++ (per quelle librerie senza le quali non puoi vivere). Mi chiedo se ci siano degli strumenti che, dato un file di intestazione C, saranno in grado di scrivere i prototipi D.

Personalmente a questo punto non spingerei per realizzare un grande progetto in D, ma userei D per gli strumenti interni, facendo esperienza con esso e introducendo altri ad esso.

La domanda originale era se D fosse un'alternativa credibile a Java e C ++. Non penso che D e Java competeranno molto nella pratica; D compete con C ++ e ora Go. Altre domande riguardano le differenze tra D e Go, ma Go è generalmente considerato più facile da usare. Quindi sospetto che il futuro di D dipenda molto dalla quantità di spazio che può respirare tra C ++, l'attuale re della collina, e Go, l'alternativa molto più semplice che ha il supporto di Google.

AGGIORNAMENTO: Ho appena scoperto che il mio capitolo preferito del libro di Andrei , quello sulla concorrenza, è disponibile gratuitamente online. Sicuramente merita una lettura!

Ed ecco una discussione moooolto sui meriti relativi / obiettivi / approcci di Go e D .


Non so molto di Rust; Sto aspettando che raggiunga 1.0. Ma hai ragione, sembra sicuramente degno di essere visto e sembra suonare in questo stesso spazio.
AmigoNico,

1
L'unica cosa che non mi piace di D è il sistema di tipi. Sembra vecchio. Le gerarchie OO sono invadenti. Non mi piace come punto di partenza. La ruggine è migliore in questo.
Germán Diago,

4

Sembra che alla domanda sia stata data una risposta. D è il linguaggio migliore rispetto a C ++.

La questione se D ai fini pratici abbia un'infrastruttura migliore è secondaria.

In breve, se sono entrambi linguaggi nuovi di zecca senza alcun supporto intorno a loro D è la lingua migliore, ergo è la lingua migliore.


4

Come linguaggio, ho sempre pensato che D fosse più vicino a C # che a C ++. Non nelle funzionalità e nelle librerie, ma nel "feeling". È molto più pulito, più bello ... divertente (rispetto al C ++). IMHO il più grande ostacolo nel diventare un'alternativa credibile è strumenti, IDE e debugger. Se D supera alcuni ostacoli di uso / adozione diffusi, si manifesteranno più strumenti e librerie. (Io stesso tornerò a D, se ci saranno IDE e debugger utilizzabili.)


che dire del plug-in mono-d ?: mono-d.alexanderbothe.com
user1284631

3

Funziona alla grande per i miei progetti di animali domestici. Lo userei per i progetti dei datori di lavoro, ma per non sapere quanto sarebbe difficile per loro trovare qualcuno che prendesse il controllo della fonte dopo che avessi passato. Non ci sono ragioni tecniche per evitarlo, almeno sulle piattaforme supportate. (toccando ferro)


3

Un approccio è quello di cercare lavoro nella tua zona. Trova i lavori che vorresti fare e vedi quali competenze stanno chiedendo. Se stanno chiedendo C ++ o Ruby o Oracle o D, questa è l'abilità che è principalmente per aiutarti a ottenere il lavoro che desideri.


3

Sembra un linguaggio molto ben progettato; molto meglio di C - C ++ - Obiettivo C. Posso vivere senza un IDE o un debugger per un po ', ma non senza una buona libreria documentata per D 2.0.

Controllerò tra 6 mesi ...

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.