Para ampliar mis comentarios, el texto de ese libro no está claro, lo que confunde el problema.
Como comenté, ese libro está tratando de decir: "Consigamos un número infinito de monos para escribir todas las funciones concebibles de C ++ que se puedan escribir. Habrá casos en los que si elegimos una variable que (alguna función particular que escribieron los monos) utiliza, no podemos determinar si la función cambiará esa variable ".
Por supuesto, para algunas (incluso muchas) funciones en cualquier aplicación, esto puede ser determinado por el compilador y muy fácilmente. Pero no para todos (o necesariamente para la mayoría).
Esta función se puede analizar fácilmente:
static int global;
void foo()
{
}
"foo" claramente no modifica "global". No modifica nada en absoluto, y un compilador puede resolver esto muy fácilmente.
Esta función no se puede analizar así:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Dado que las acciones de "foo" dependen de un valor que puede cambiar en tiempo de ejecución , es evidente que no se puede determinar en tiempo de compilación. si modificará "global".
Todo este concepto es mucho más sencillo de entender de lo que los científicos informáticos creen. Si la función puede hacer algo diferente en función de las cosas que pueden cambiar en tiempo de ejecución, entonces no puede averiguar qué hará hasta que se ejecute, y cada vez que se ejecute puede hacer algo diferente. Ya sea demostrablemente imposible o no, obviamente es imposible.