Delphi contro C ++ Builder - che è la scelta migliore per un programmatore Java che fa Win32

StackOverflow https://stackoverflow.com/questions/180358

Domanda

Sono un programmatore Java piuttosto esperto che ha fatto un bel po 'di cose su Win32 negli ultimi due anni. Principalmente sto usando VB6, ma ho davvero bisogno di passare a qualcosa di meglio.

Ho trascorso circa un mese a giocare con Delphi 2009. Mi piacciono le cose della GUI VCL, Delphi sembra più adatto alle chiamate API di Windows rispetto a VB6, mi piace molto il fatto che su OO sia molto meglio di VB6, e io come il framework di unit test che viene fornito con l'IDE.

Ma ho davvero problemi con il fatto che non esiste un garbage collector ampiamente utilizzato per Delphi: dover liberare manualmente tutti gli oggetti o utilizzare le interfacce per tutto sembra avere un impatto piuttosto grande sul modo in cui puoi fare le cose in modo efficace in un modo orientato agli oggetti. Inoltre non sono particolarmente interessato alla sintassi o al fatto che devi dichiarare le variabili tutte all'inizio di un metodo.

Sono in grado di gestire Delphi, ma mi chiedo se C ++ Builder 2009 potrebbe essere una scelta migliore per me. So molto poco di C ++ Builder e C ++, ma poi so anche molto poco di Delphi. So che c'è molto nel linguaggio C ++, ma sospetto che sia necessario conoscerne solo un sottoinsieme per fare le cose in modo produttivo ... Ho sentito che il C ++ di oggi è molto più produttivo da programmare rispetto al C ++ di 10 anni fa.

Farò solo un nuovo sviluppo, quindi non avrei bisogno di padroneggiare ogni aspetto del linguaggio C ++ - se trovo un equivalente per ciascuna delle funzionalità del linguaggio Java sarò abbastanza felice e man mano che avanzi potrebbe iniziare a guardare le cose più avanzate un po 'di più. (Scusate se sembra dolorosamente ingenuo - in tal caso, per favore, mettetemi dritto!)

Quindi, per un programmatore Java che è nuovo sia per Delphi sia per C ++ Builder, quale considerereste una scelta migliore per lo sviluppo produttivo di exe e dll Win32, e perché? Quali ritieni siano i pro e i contro di ciascuno?

È stato utile?

Soluzione

Delphi o C ++ Builder: è una scelta difficile!

Come sapete, sono sostanzialmente molto simili, dal punto di vista IDE e RAD.

I pro ei contro di ciascuno - indipendentemente dallo sfondo - sono un po 'così. Entrambi condividono un ottimo modulo di progettazione e framework RAD (VCL) a 2 vie, ideali per lo sviluppo nativo di Windows.

Delphi:

  • FOR: comunità grande, attiva, entusiasta
  • FOR: Delphi 2009 è la migliore versione per molti anni
  • FOR: Delphi "unità" fa sembrare arcaiche le coppie di file sorgente / intestazione C
  • CONTRO: nessuna distruzione automatica poiché gli oggetti lasciano l'ambito, quindi molti "finalmente sono nel tuo codice
  • CONTRO: il linguaggio può essere 'prolisso', il che è una questione di gusti
  • CONTRO: L'uso di DLL o librerie di terze parti in altre lingue (in particolare C) richiede la scrittura di file di intestazione Delphi

C ++ Builder

  • FOR: C ++ Builder 2009 è probabilmente la migliore versione di sempre
  • FOR: il linguaggio RAII semplifica enormemente la gestione della memoria
  • FOR: i modelli sono incredibilmente utili e potenti, anche se l'implementazione di C ++ Builder presenta alcuni bug.
  • FOR: supporto per BOOST e altre librerie moderne basate su template (anche se il supporto Boost non è al 100%)
  • FOR: una grande interoperabilità con Delphi consente di utilizzare facilmente la maggior parte dei componenti Delphi.
  • FOR: facile da usare con DLL / librerie di terze parti con intestazioni C / C ++.
  • FOR: C ++ potrebbe apparire migliore su un CV rispetto a Delphi.
  • CONTRO: CB2009 è "solo unicode" - le implicazioni di ciò per la portabilità del codice sono diverse e meno ponderate rispetto a Delphi
  • CONTRO: la base utenti di C ++ Builder è molto più piccola di Delphi. Forse il 20% o meno.
  • CONTRO: Borland / Inprise ha quasi ucciso BCB alcuni anni fa, e è stato resuscitato solo dopo importanti sforzi da parte della comunità. (Tuttavia, l'impegno di Codegear / Embarcadero sembra impressionante)
  • CONTRO: C ++ Builder non è in cima alla pila in Codegear.
  • CONTRO: i fornitori di componenti di terze parti non sempre comprendono / supportano C ++ Builder

Questo è tutto. Giusto per affermare la mia posizione, sono un felice utente di BCB2007 / 2009 (dal BCB5) e utilizzo raramente Delphi. Qualche anno fa, ho considerato il passaggio dal C ++ a Delphi, ma la mancanza del linguaggio RAII è stata l'unica cosa che ho trovato difficile da affrontare.

Altri suggerimenti

Vai con Delphi e puoi utilizzare Boehm Garbage Collector API scritto da Barry Kelly in modo da poter avere la raccolta dei rifiuti in Delphi. Barry ha scritto questo prima di andare a lavorare per CodeGear come architetto di compilatore. Ha problemi con applicazioni molto grandi e molto probabilmente non funzionerà con Delphi a 64 bit. Ne parla parecchio in questa intervista podcast .

Anche se non usi quel gestore di memoria per la raccolta dei rifiuti, consiglierei comunque Delphi su C ++. L'unico vantaggio offerto da C ++ per lo sviluppo generale è la sintassi del tutore riccio. Se non ti dispiace la sintassi di Delphi, allora per la maggior parte delle cose la troverai meglio. Concesso C ++ Builder ha l'intero Delphi VCL e RTL, quindi non è così male come Visual C ++, ma penso ancora che Delphi sarebbe una scelta migliore.

Per i componenti aggiuntivi di Excel (come hai menzionato nel tuo commento), consiglierei Delphi su C ++ builder perché ha un miglior supporto COM (che credo tu abbia bisogno per i componenti aggiuntivi di Excel).

Delphi sarà molto più facile per te fare i conti, sicuro che devi gestire la tua memoria, ma è molto semplice

MyObj = TMyObj.Create;

try
  MyObj.DoSomething;
finally
  MyObj.Free;
end

In Delphi tutti i tuoi oggetti sono allocati nell'heap, quindi la regola è molto semplice se lo crei lo liberi.

C ++ con i suoi objs basati su stack e heap significa che hai un po 'di più da imparare e più possibilità di metterti nei guai.

Dopo aver lavorato con i compositori Borland C e C ++ dal BCC 4.1 / DOS e Delphi dal 3.0 al 2007, posso dirti onestamente che sei comunque in una grande avventura. Passare da C / C ++ su Borland's Builder e RAD IDE è un sostanziale cambiamento di paradigma (e curva di apprendimento) da Microsoft VC ++, C ++ e .NET (hanno usato VC dalla prima versione MS-DOS - i mini leganti a tre anelli beige).

La scelta tra C ++ e Delphi è quella che ti suggerisco di fare dopo aver bagnato i piedi su alcuni progetti di dimensioni medio-piccole in entrambe le lingue. Ho iniziato con un programmatore C e dopo circa cinque anni sono passato a Delphi (V3.0) quando VCL ha reso la programmazione Windows molto più semplice e produttiva.

Attenzione, Delphi è un linguaggio seducente per i programmatori provenienti da altre lingue come COBOL, FORTRAN, VisualBasic perché la sua sintassi e le regole del codice impongono un tipo di disciplina che tiene fuori dai guai. La forza e la potenza del metallo grezzo di C lo rendono un ottimo linguaggio di programmazione di sistemi (driver di dispositivo, codice O / S, programmazione integrata in tempo reale), ma in mani inesperte ti può mordere.

Il C ++ Builder di Borland (il VCL di Delphi aggiunto al compilatore C ++) toglie molti spigoli vivi del C ++ ed è la mia seconda lingua preferita. Da quando Borland ha aggiunto il supporto .NET ad entrambe le lingue c'è un forte argomento per usare Builder invece di VC ++ per la programmazione di framework MS. Sebbene C # abbia una buona dose di "cordialità" integrata rispetto al C ++, se spinto mi atterrerei ancora a Delphi o Builder se avessi appena iniziato.

Per l'apprendimento delle corde, per la prototipazione e i programmi di concept rapido, semplicemente non esiste un linguaggio in grado di battere Delphi, specialmente con il VCL e i componenti di terze parti. Nessuna pubblicità, solo fatti.

Personalmente, penso che ci siano altre considerazioni importanti oltre alle differenze tra le lingue. Ad esempio, l'IDE Delphi è assolutamente fantastico per la creazione di GUI in modo WYSIWYG. Non ho usato l'IDE del builder C ++, ma sarei davvero sorpreso se avesse un builder GUI bello come Delphi.

Sebbene superficialmente la sintassi di C ++ assomigli di più a quella di Java, il modello a oggetti di Delphi è in realtà più vicino a quello di Java. Sebbene in Delphi siano presenti puntatori, in pratica i riferimenti agli oggetti (come quelli in Java) vengono utilizzati il ??99% delle volte. Anche nel C ++ moderno, non credo sia possibile evitare i puntatori. Non che ci sia qualcosa di sbagliato nei puntatori di per sé, ma in pratica ....

Per una nota personale, in questi giorni sono principalmente un ragazzo Java, ma ho trascorso 2 anni a lavorare con Delphi e ci tornerei in un baleno. Al contrario, ho solo un'esperienza molto limitata con il C ++ e preferirei pulire i bagni piuttosto che tornare a quella lingua :)

Naturalmente java sintax è più simile a c ++ che a delphi, ma penso che il modello a oggetti sia più simile a delphi:

  • singola eredità. Esistono interfacce ma sono più simili a COM che a interfacce Java.
  • gli oggetti sono allocati sull'heap e vi si accede per riferimento

puoi trovare un documento che confronta le tre lingue qui

Penso che se vai con Delphi lo troverai più facile dopo alcune volte di utilizzo, inoltre ha più supporto di terze parti e alcune delle funzionalità introdotte in Delphi prima di C ++ Builder

leggi anche questo blog dall'ex Java e ora il ragazzo dietro la maggior parte del lavoro di database e datasnap in Delphi Steve Shaughnessy, sulla sua esperienza sulla programmazione di Delphi dopo 10 anni di Java :-) http://blogs.codegear.com/steveshaughnessy/2006/12/03/ 30193

Non c'è nulla che non sia stato in grado di fare in C ++ VCL che non avrei potuto fare con Delphi VCL e quasi tutti i componenti di Delphi funzionano bene in C ++ Builder. Dal momento che programma sia per Windows che per UNIX, C ++ è più portatile.

Se usi C ++ STL o un'altra libreria ben progettata per i tuoi contenitori, la raccolta dei rifiuti in un certo senso diventa un punto controverso, altrimenti il ??GC manuale non è difficile (si imparano rapidamente buone abitudini - che dovresti comunque praticare indipendentemente da un GC). Fintanto che usi RAII, ove possibile, mantieni incapsulata la gestione della memoria in contenitori, sii chiaro sulla proprietà dell'oggetto e usa solo i puntatori come riferimenti nilabili (tutto ciò che dovresti fare anche indipendentemente dalla lingua), GC non dovrebbe davvero essere un problema.

" Ad esempio, l'IDE Delphi è assolutamente fantastico per la creazione di GUI in modo WYSIWYG. Non ho usato l'IDE del builder C ++, ma sarei davvero sorpreso se avesse un builder GUI bello come Delphi. & Quot;

In realtà l'editor della GUI di C ++ Builder è esattamente lo stesso editor e funziona allo stesso modo. È fantastico.

.Net ha un numero enorme di classi, proprio come Java. C # ha una sintassi simile a Java e grazie all'enorme libreria di classi funziona in modo abbastanza simile. Ed è un ambiente perfettamente adeguato in cui programmare. Ma francamente Delphi è un linguaggio molto più piacevole, IDE e un ambiente generale con cui lavorare. C # è stato progettato dalla stessa persona che ha progettato Delphi e "si sente" molto simile in molti modi, quindi non dare per scontato che poiché Delphi si compila in codice nativo (anche se puoi usare anche Delphi .Net) è fondamentalmente più difficile da usare. Non lo è affatto.

La mia raccomandazione personale sarebbe per Delphi, perché è un bel linguaggio. Tuttavia, se sei interessato a imparare il C ++, C ++ Builder è probabilmente il modo migliore per farlo.

Ho programmato professionalmente in Delphi negli ultimi 10 anni e ho una buona conoscenza del C ++. Andrei alla maniera di Delfi. La sintassi è molto più semplice e anche la gestione della memoria. Quel GC per Delphi nativo non ho ancora sentito ... Anche se non mi sono piaciute molto le trappole sul codice Delphi.Net introdotte a causa del .NET gc, non mi piace molto il gcs; -)

Una cosa che ho dimenticato di menzionare prima:

Dal punto di vista dei costi, non è necessario scegliere. Acquista il pacchetto RAD Studio e, a un costo aggiuntivo modesto in una singola lingua, ottieni le personalità Delphi e C ++ Builder nello stesso IDE.

E vale la pena ricordare che il pacchetto C ++ Builder include il compilatore Delphi, e puoi scrivere / aggiungere file Delphi .pas e includerli come parte dei tuoi progetti C ++.

Se hai intenzione di fare molta programmazione di Windows, impara il C ++. Impareresti il ??tedesco in preparazione per un viaggio in Francia? C / C ++ è la lingua nativa dell'API di Windows. Gestire le strutture dati e le chiamate di WinAPI è molto più semplice in C / C ++. Per quanto riguarda RAD, ho usato MSVC per circa 13 anni e posso montare un'app GUI con la stessa velocità di chiunque usi l'editor GUI di Visual Studio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top