Codice morto

Da Teknopedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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.

int foo (int iX, int iY)
{
	int iZ = iX/iY;	// Può accadere una divisione per zero
	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

[modifica | modifica wikitesto]

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.

  1. ^ Saumya K. Debray, William Evans e Robert Muth, Compiler techniques for code compaction, in ACM Trans. Program. Lang. Syst., vol. 22, n. 2, 1º marzo 2000, pp. 378–415, DOI:10.1145/349214.349233.
  2. ^ Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press.

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Teknopedia che trattano di informatica