Confronto: C++ con C#

Dopo aver programmato per oltre 10 anni in C++ e da poco più di 2 anni in C#, posso trarre alcune considerazioni su questi due linguaggi che penso di conoscere in modo approfondito.

 

C++  (non gestito, non .NET)

Pro

Contro

Alta velocità in esecuzione

Complessità del linguaggio

 (puntatori, allocazione della memoria, …)

Potenza dei Template (generics in C#)

Compilazioni molto lente

 

Files .H

 

Tools di gestione del codice molto lenti

 

Molto tempo per scrivere codice affidabile

 

 

 

C#  (gestito,  .NET)

Pro

Contro

Semplicità del linguaggio

Media velocità in esecuzione

Potenza del linguaggio (considerando C# 3.0)

Scarsa potenza dei Generics (Template in C++)

Compilazioni molto veloci

 

Assenza dei files .H

 

Tools di gestione del codice molto veloci

 

Multicore sfruttato meglio

 

Semplice passaggio da 32 a 64 bit

 

Minore quantità di codice da scrivere

(dal 20 al 30 % in meno rispetto al C++)

 

 

Come tutte le persone, quando si cambia, si vuole cambiare sempre in meglio.

 

Passando da C++ a C#, per me, la prima e più tangibile differenza è stato un aumento notevole della produttività dovuta al fatto che il tempo delle compilazioni si è ridotto notevolmente!

Un mio progetto in C++ di 200.000 righe di codice veniva compilato in 45 minuti, mentre lo stesso progetto in C#, si è ridotto a 100.000  righe di codice (ho ottimizzato anche l’architettura) e lo compila in 15 secondi!!

 

Per quanto riguarda le prestazioni a tempo d’esecuzione (a runtime), passando da C++ a C# si erano ridotte, ma ho ottimizzato l’architettura e sfruttato il multi-thread ottenendo così prestazioni addirittura superiori.

Voi vi chiederete, perché non l’ho fatto anche in C++, semplice, perché i tools di gestione del codice non sono molto efficienti (reattivi) come quelli in C# e ci vuole molto più tempo per ottenere un’architettura complessa (che sfrutta il multi-thread)  ottimizzata al massimo.

 

Per quanto riguarda i Template (generics) qui è il punto dolente che non sono riuscito a colmare.

Così come sono implementati, i Generics in C#, sono poco utili (esempio banale, non è possibile fare A + B se A e B sono tipi generici).

Niente di nuovo è arrivato con C# 3.0 in quanto si basa ancora su .NET 2.0 che è la causa del problema menzionato.

Spero che .NET 4.0 colmi finalmente questo problema che io sento in modo particolare!

 

Risultato finale:

C# promosso!... con riserva.

Print | posted @ giovedì 13 dicembre 2007 22.06

Comments on this entry:

Gravatar # re: Confronto: C++ con C#
by Matteo Baglini at 13/12/2007 23.58

Non so se ho capito male io ma A+B lo puoi fare con i generics basta impostare in maniera corretta i Constraints:
http://msdn2.microsoft.com/en-us/library/d5x73970(VS.80).aspx

Ciao!
  
Gravatar # re: Confronto: C++ con C#
by Paolo at 14/12/2007 0.08

Detto così il problema che citi sui generics non ha molto senso, puoi spiegare meglio? ciao.
  
Gravatar # re: Confronto: C++ con C#
by Marco Minerva at 14/12/2007 0.44

Però... Programmi da poco più di due anni in C# e già dici di conoscerlo in modo approfondito... Complimenti :-D
  
Gravatar # re: Confronto: C++ con C#
by Alessandro Pulvirenti at 14/12/2007 3.48

Sfortunatamente anche impostando correttamente i Constraints non si riesce ad eseguire nessuna delle operazioni matematiche, in quanto non esiste un Constraint che dice che quel tipo deve essere un tipo valore non aggregato (in quanto anche le struct sono di tipo valore e su di esse le operazioni matematiche non funzionano).
Qui (http://www.codeproject.com/KB/cs/genericnumerics.aspx ) un articolo che parla di questi limiti.
  
Gravatar # re: Confronto: C++ con C#
by Angella Andrea at 14/12/2007 6.25

Ancora non ho avuto modo di affrontare progetti così impegnativi in termini di numero di righe di codice....ma sono rimasto a bocca aperta sui tempi di compilazione !!! In effetti i template di C++ sono potenti ma comportano la generazione da parte del compilatore di una sacco di codice.
L'introduzione dei generics nel framework 2.0 è stato davvero un grande passo, non se ne può fare a meno. Per quello che so io è vero che i contraints non permettono di specificare che un tipo faccia l'override di un qualche operatore. Ciò costringe a utilizzare delle interfacce, che per operazioni matematiche in particolare portano ad una notevole riduzione della leggibilità del codice. E' più bello scrivere "a = b + c" che "c = b.Add(c)" in particolare se bisogna fare più operazioni.
Ho parlato dei tipi di constraints permessi in questo post http://blogs.ugidotnet.org/angellaa/archive/2007/10/16/88971.aspx
  
Gravatar # re: Confronto: C++ con C#
by Alessandro Pulvirenti at 14/12/2007 8.48

Non sono i Template che fanno perdere tempo al compilatore, ma sono i .H che vengono inclusi in ogni file sorgente .cpp. Mi ricordo che per compilare solo 100.000 linee di codice, il compilatore compilava 100 milioni di linee di codice che trovava nei files .H che includeva.
I Generics di .NET 2.0 sono un grande passo avanti rispetto a .NET 1.0, ma sono sempre un passo indietro rispetto ai Template del C++.
  
Gravatar # re: Confronto: C++ con C#
by Lorenzo Barbieri at 15/12/2007 8.39

Template e
Generics sono cose diverse da utilizzare per fini diversi.
Per questo hanno nomi diversi.

Esistono vari modi per "simulare" i template in C#, alla fine è un lavoro da "preprocessore" e lo si faceva anche in C# 1.x. Il punto dei Generics è che vengono "espansi" a runtime, con tutti i vantaggi e gli svantaggi del caso.
  
Gravatar # re: Confronto: C++ con C#
by Alessandro Pulvirenti at 15/12/2007 19.42

E' vero che sono due cose diverse i Generics e i Template, ma io mi chiedo è possibile avere i Template in C#? anche in una versione futura di .NET e di C#?
  
Gravatar # re: Confronto: C++ con C#
by Lorenzo Barbieri at 15/12/2007 20.06

Questa è una domanda a cui solo Anders può rispondere. Secondo me stanno andando in un'altra direzione, ma se vuoi, vai sul forum MSDN di C# e chiedilo, oppure vai su Connect e apri la richiesta e invita la gente a votarla.
Oppure cerca se altri hanno la stessa richiesta e vota la loro.
  

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 4 and 4 and type the answer here: