Codice morto
In informatica il codice morto è un termine della programmazione con il quale si indica del codice sorgente di un programma che viene eseguito, ma produce un risultato che non sarà mai utilizzato in nessun'altra computazione.[1][2] L'esecuzione di codice morto comporta inoltre uno spreco di tempo computazionale.
Mentre il risultato di una computazione morta non dovrebbe essere usato, il codice morto può generare eccezioni o influire sullo stato globale, in tal modo la rimozione di tale codice può modificare l'output del programma e dar luogo a bug involontari. Se vi è ambiguità nel garantire una ininfluenza dell'output di programma, le ottimizzazioni del compilatore mantengono tipicamente un approccio conservativo e tendono quindi a non rimuovere il codice morto.
Esempi
int foo (int iX, int iY) { int iZ = iX/iY; // division by zero exception may occur return iX*iY; }
Nell'esempio sopra, la divisione di iX e iY è computata ma mai utilizzata. È perciò codice morto e può essere rimosso.
public void Metodo(){ final boolean bDebug = false; if (bDebug){ //fai qualcosa… } }
Nell'esempio sopra, "fai qualcosa" non verrà mai eseguito, è perciò codice morto. Il compilatore java è intelligente a sufficienza da non compilarlo.
Rimozione del codice morto
Eliminare il codice morto comporta due principali vantaggi: riduce la dimensione del programma, un'importante considerazione in alcuni contesti, e permette al programma di evitare l'esecuzione di operazioni irrilevanti, riducendo quindi il tempo d'esecuzione. Il codice morto include codice che non sarà mai eseguito e codice che influisce solo su variabili morte, ovvero variabili irrilevanti nell'output di programma. Consideriamo il seguente esempio scritto in C.
int foo(void) { int iA = 24; int iB = 25; /* Assegnamento della variabile morta */ int iC = iA << 2; return iC; iB = 24; /* Codice irraggiungibile */ return 0; }
A causa dell'esecuzione incondizionata dell'istruzione return, l'assegnazione di iB non verrà mai raggiunta. È pertanto possibile rimuovere tale codice.
Note
- ^ Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378-415.
- ^ Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press.
Voci correlate
- Codice ridondante
Collegamenti esterni
- UCDetector Plugin di Eclipse per trovare codice morto in Java
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/24px-Computer_n_screen.svg.png)