x
1

Código inalcanzable



En programación, el código inalcanzable es una parte del código fuente que nunca podrá ser ejecutado porque no existe ningún camino dentro de las estructuras de control en el resto del programa para llegar a este código.[1]

Suele referirse a este tipo de código como código muerto, aunque entre ellos hay una diferencia (el código muerto se ejecuta pero no produce cambios en la salida del programa).[2]

El código inalcanzable generalmente se considera indeseable por las siguiente razones:

La existencia de código inalcanzable puede ser debido a varios factores, tales como:

En los últimos cinco casos, el código que es inalcanzable, a menudo existe como parte de un legado, es decir, código que una vez fue útil, pero ya no se utiliza o no se requiere. Sin embargo, el código inalcanzable también puede ser parte de un componente complejo (biblioteca, módulo o rutina), donde el código sigue siendo útil en conjunción con diferentes datos de entrada (nunca generada por la aplicación actual) o en condiciones que no se cumplen en el entorno de ejecución actual, haciendo el código correspondiente inalcanzable, pero puede ocurrir en otros entornos de ejecución, para que el componente no ha sido desarrollado.

Un ejemplo de tal código condicionalmente inalcanzable puede ser la implementación de una función printf() en la biblioteca de tiempo de ejecución de un compilador, el cual contiene el código complejo para procesar todos los argumentos de cadenas posibles, de los que en realidad es sólo un pequeño subconjunto utilizados en el programa. Sin tener que recompilar la biblioteca de ejecución, los compiladores normalmente no serán capaces de eliminar las secciones de código no utilizadas en tiempo de compilación.

Considerando el siguiente código en C:

La definición de Z = X*Y nunca es alcanzada debido a que la función retorna el flujo del programa a la parte que la llamó antes, de esta manera dicha definición puede ser descartada.

La detección de código inalcanzable es una forma de análisis estático y consiste en realizar un análisis de control de flujo para encontrar el código que nunca se ejecutará independientemente de los valores de las variables y otras condiciones en tiempo de ejecución. En algunos lenguajes (como Java[3]​) algunas formas de código inalcanzable no están permitidas y no es posible compilar el programa con este tipo de código. Se conoce a la optimización que remueve código inalcanzable como eliminación de código muerto (que es la misma para el código muerto y código redundante).

A veces el código puede volverse inalcanzable por alguna optimización introducida por el compilador como por ejemplo: eliminación de subexpresiones comunes.

En la práctica la sofisticación del análisis realizado tiene un impacto significativo en la cantidad de código inalcanzable que se detecta. Por ejemplo, el plegamiento de constantes y un simple análisis de control de flujo muestra que la declaración a = 2 en el siguiente código no se puede alcanzar:

Sin embargo se necesita más sofisticación para determinar si esta declaración a = 2 es o no inalcanzable debido que con un método tradicional habría que calcular la raíz cuadrada en tiempo de compilación:

A veces se pueden utilizar profilers para detectar código inalcanzable, un profiler no prueba nada acerca de si el código realmente es o no inalcanzable pero es una buena heurística para buscar código potencialmente inalcanzable. Una vez detectado las partes potenciales se puede llevar a cabo en las mismas un análisis más profundo.



Escribe un comentario o lo que quieras sobre Código inalcanzable (directo, no tienes que registrarte)


Comentarios
(de más nuevos a más antiguos)


Aún no hay comentarios, ¡deja el primero!