Pour développer mes commentaires, le texte de ce livre n'est pas clair, ce qui obscurcit le problème.
Comme je l'ai commenté, ce livre essaie de dire: "obtenons un nombre infini de singes pour écrire toutes les fonctions C ++ imaginables qui pourraient être écrites. Il y aura des cas où si nous choisissons une variable qui (une fonction particulière que les singes ont écrite) utilise, nous ne pouvons pas déterminer si la fonction changera cette variable. "
Bien sûr, pour certaines (voire plusieurs) fonctions dans une application donnée, cela peut être déterminé par le compilateur, et très facilement. Mais pas pour tous (ou forcément pour la plupart).
Cette fonction peut être facilement analysée:
static int global;
void foo()
{
}
"foo" ne modifie clairement pas "global". Cela ne modifie rien du tout, et un compilateur peut résoudre ce problème très facilement.
Cette fonction ne peut pas être analysée ainsi:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Puisque les actions de "foo" dépendent d'une valeur qui peut changer à l'exécution , il est manifestement impossible de déterminer au moment de la compilation si elle modifiera "global".
Tout ce concept est beaucoup plus simple à comprendre que les informaticiens ne le prétendent. Si la fonction peut faire quelque chose de différent en fonction des choses qui peuvent changer au moment de l'exécution, vous ne pouvez pas déterminer ce qu'elle fera jusqu'à ce qu'elle s'exécute, et chaque fois qu'elle s'exécute, elle peut faire quelque chose de différent. Que ce soit prouvé impossible ou non, c'est évidemment impossible.