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

venerdì 23 maggio 2008

.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: ,

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) | Filed Under [ C# VB .NET .NET Compact Framework ADO .NET & SQL ASP .NET .NET 3.0 .NET Micro Framework Orcas & .NET 3.5 LINQ ]

Nuove feature per Windows Live SkyDrive

Questa mattina, come si consueto, mi sono collegato al mio SkyDrive, che ormai utilizzo come repository per i miei documenti. Ho così notato che Microsoft ha aggiornato la piattaforma con nuove funzionalità:

  • Per ogni cartella è possibile scegliere se visualizzare le icone oppure i dettagli dei file contenuti;
  • E' possibile aggiungere un commento ai file ed alle cartelle archiviate;
  • Ora lo spazio della pagina web è sfruttato in maniera più razionale: quando si seleziona un file, sulla destra appare automaticamente l'elenco degli altri documenti presenti nella stessa cartella, consentendo un più facile passaggio da uno all'altro.

Spero che presto Microsoft rilasci l'API di SkyDrive, in modo da rendere possibile lo sviluppo di applicazioni basate su questa piattaforma  Wink

Technorati Tag:

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) | Filed Under [ Tutto & Oltre :-) ]

Powered by:
Powered By Subtext Powered By ASP.NET