Aby rozwinąć moje komentarze, tekst tej książki jest niejasny, co zaciemnia problem.
Jak już wspomniałem, w tej książce próbuje się powiedzieć: „zdobądźmy nieskończoną liczbę małp, aby napisać każdą możliwą funkcję C ++, jaka kiedykolwiek mogłaby zostać zapisana. Będą przypadki, w których jeśli wybierzemy zmienną, która (jakaś konkretna funkcja, którą napisały małpy) używa, nie możemy ustalić, czy funkcja zmieni tę zmienną. "
Oczywiście w przypadku niektórych (nawet wielu) funkcji w dowolnej aplikacji może to zostać określone przez kompilator i bardzo łatwo. Ale nie dla wszystkich (lub koniecznie większości).
Tę funkcję można łatwo przeanalizować:
static int global;
void foo()
{
}
„foo” wyraźnie nie zmienia „globalnego”. W ogóle niczego nie modyfikuje, a kompilator może to bardzo łatwo rozwiązać.
Ta funkcja nie może być tak analizowana:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Ponieważ akcje "foo" zależą od wartości, która może zmieniać się w czasie wykonywania , nie można oczywiście określić w czasie kompilacji, czy zmieni ona wartość "globalną".
Cała ta koncepcja jest o wiele prostsza do zrozumienia, niż uważają ją informatycy. Jeśli funkcja może zrobić coś innego w zależności od tego, co może się zmienić w czasie wykonywania, nie możesz określić, co będzie robić, dopóki nie zostanie uruchomiona, a za każdym razem, gdy zostanie uruchomiona, może zrobić coś innego. Niezależnie od tego, czy jest to niemożliwe, czy nie, jest to oczywiście niemożliwe.