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.