Per espandere i miei commenti, il testo di quel libro non è chiaro, il che offusca il problema.
Come ho commentato, quel libro sta cercando di dire, "facciamo in modo che un numero infinito di scimmie scriva ogni funzione C ++ concepibile che potrebbe mai essere scritta. Ci saranno casi in cui se scegliamo una variabile che (una funzione particolare scritta dalle scimmie) utilizza, non possiamo capire se la funzione cambierà quella variabile. "
Ovviamente per alcune (anche molte) funzioni in una data applicazione, questo può essere determinato dal compilatore e molto facilmente. Ma non per tutti (o necessariamente per la maggior parte).
Questa funzione può essere facilmente analizzata:
static int global;
void foo()
{
}
"foo" chiaramente non modifica "globale". Non modifica assolutamente nulla e un compilatore può risolverlo molto facilmente.
Questa funzione non può essere così analizzata:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Poiché le azioni di "pippo" dipendono da un valore che può cambiare in fase di esecuzione , chiaramente non puòessere determinato in fase di compilazione se modificherà "globale".
L'intero concetto è molto più semplice da capire di quanto gli scienziati informatici ritengano che sia. Se la funzione può fare qualcosa di diverso in base alle cose che possono cambiare in fase di esecuzione, allora non puoi capire cosa farà finché non viene eseguita e ogni volta che viene eseguita potrebbe fare qualcosa di diverso. Che sia provabilmente impossibile o meno, è ovviamente impossibile.