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 @ venerdì 14 dicembre 2007 00:06

Comments on this entry:

Gravatar # re: Confronto: C++ con C#
by Matteo Baglini at 14/12/2007 01: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 Marco Minerva at 14/12/2007 02: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 05: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 Lorenzo Barbieri at 15/12/2007 10: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 Lorenzo Barbieri at 15/12/2007 22: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.
Comments have been closed on this topic.