Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

.NET e C++: due modi diversi di programmare

Tranquilli, non ho assolutamente intenzione di scrivere un post in cui metto a confronto .NET e C++, dicendo quale è meglio e quale è peggio... Su questo argomento è già stato scritto di tutto Smile. Vorrei invece fare una riflessione sulla diverse "filosofie di programmazione" che seguo quando lavoro in C++ rispetto a quando uso .NET.

Come i miei 25 lettori sanno bene, nell'ultimo anno ho accumulato una certa esperienza con .NET, accompagnata dal conseguimento di diverse certificazioni. Anche i lavori che ho fatto finora hanno sempre riguardato questa piattaforma.  Ultimamente, però, nella mia nuova società sto affrontando un progetto abbastanza grosso in C++: avendo a che fare con puntatori, allocazione esplicita della memoria, debugger il cui edit & continue spesso è un edit & restart, mi viene da pensare a come è diverso il modo in cui mi approccio alla scrittura di un programma in .NET rispetto a quello che sto utilizzando adesso in C++.

In .NET, so che posso contare sul garbage collector, quindi sulla gestione automatica della memoria: se creo un nuovo oggetto con una new, devo solo ricordarmi di richiamarne il metodo Dispose, nel caso in cui esso implementi l'interfaccia IDisposable. Per il resto, ci pensa il garbage collector a liberare la memoria occupata, quando ce ne è bisogno. Poi, ho a disposizione una Base class library sconfinata, contenente oggetti per le necessità più disparate, dalla spedizione delle mail alla gestione dei thread, allo sviluppo di Web service... Ancora, se commetto un errore nel codice (accesso ai metodi di un oggetto non inizializzato, recupero di elementi da un array oltre l'upper-bound, ..), il meccanismo delle eccezioni di .NET mi dice esattamente dove si è verificato il problema, fornendomi un nome che mi permette di identificarlo con estrema facilità.

In C++, invece, le cose sono molto diverse... Quando si alloca un oggetto con la new, spesso bisogna indicare espressamente quanta memoria riservargli; inoltre, se essa non viene liberata con delete, rimarrà allocata per tutta la durata del processo. Poi, se ci sono problemi con i puntatori o si cerca di accedere ad una zona di memoria non inizializzata, spesso si ottengono messaggi di errore generici del tipo "xxx.exe ha cercato di accedere alla zona di memoria 0x0432542978. La memoria non poteva essere letta", che di per sé non sono di molto aiuto (e magari, in questi casi, l'editor si apre su un file .H che fa parte del runtime del C++, quindi senza dare indicazioni del punto in cui si è verificato il problema).

Conscio di queste cose, mi sono reso conto che, quando lavoro con il C++, sono in qualche modo portato a ragionare di più su quello che sto scrivendo, perché so che, se commetto un errore, potrebbe essere difficile individuarlo in seguito. Mi capita quindi di rileggere più volte quello che ho scritto e di avviare l'esecuzione solo quando sono ragionevolmente sicuro della correttezza del codice.

Seguendo tale approccio, ultimamente mi capita di scrivere codice abbastanza complesso che funziona già al primo tentativo. Con questo non voglio assolutamente tessere le mie lodi, anzi, in qualche modo è una auto-critica... Quando lavoro in .NET, infatti, non appena ho terminato un algoritmo sono portato a premere F5 per verificare che faccia il suo lavoro, perché penso: "tanto se c'è un problema, il compilatore mi dirà esattamente dove si trova, e il debugger mi fornirà un controllo completo su quello che sta succedendo". In altre parole, so che .NET mi dà strumenti molto potenti per il debug delle applicazioni, quindi ne approfitto, forse troppo... E proprio la mia recente esperienza con il C++ mi hai aiutato a capirlo... Spero vivamente di farne tesoro!

Technorati Tag: ,

Print | posted on venerdì 23 maggio 2008 18:30 | Filed Under [ C# VB .NET .NET Compact Framework ADO .NET & SQL ASP .NET .NET 3.0 .NET Micro Framework Orcas & .NET 3.5 LINQ ]

Feedback

Gravatar

# re: .NET e C++: due modi diversi di programmare

Sono pienamente d'accordo con quello che hai scritto. A me in azienda è successa la cosa inversa, ovvero passare da C++ a .Net, e devo purtroppo ammettere che da quando pigio in .Net sono diventato molto più pigro. Pero' attenzione, non sempre si tratta di quella pigrizia furba che ti porta a cercare le soluzioni piu' eleganti ed'efficienti con il minimo sforzo (vedi assioma n.0 del programmatore : "Il programmatore è pigro"). Anzi, la maggior parte del codice "free Bugs", lo scrivo durante le sessioni di debug, con l'Edit&Continue, e non'e' raro che in questa fase capiti di pensare a dove cavolo avevo la testa quando scrissi quel codice che sto debuggando...
Insomma, alla fine ogni approccio ha i suoi lati positivi e negativi, però se dovessi esprimere un opinione prettamente personale, preferisco nettamente l'approccio alla programmazione inculcatomi dal C++!
24/05/2008 12:46 | Fabio
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET