Czy do zakończenia programu wymagany jest program? Innymi słowy, czy program, który działa wiecznie, jest technicznie niezdefiniowanym zachowaniem? Uwaga: nie chodzi o puste pętle. Mówiąc o programach, które na zawsze wykonują „rzeczy” (tj. Obserwowalne zachowania).
Np. Coś takiego:
int main()
{
while (true)
{
try
{
get_input(); // calls IO
process();
put_output(); // calls IO, has observable behavior
// never break, exit, terminate, etc
} catch(...)
{
// ignore all exceptions
// don't (re)throw
// never go out of loop
}
}
}
Jest to raczej pytanie akademickie, ponieważ empirycznie wszystkie rozsądne kompilatory wygenerują oczekiwany kod dla powyższego rodzaju programu (zakładając oczywiście, że nie ma innego źródła UB). I tak, oczywiście, istnieje wiele programów, które nigdy się nie kończą (OS, osadzone, serwery). Jednak czasami standard jest dziwaczny, stąd pytanie.
Styczne: wiele (niektórych?) Definicji „algorytmu” wymaga, aby algorytm się zakończył , tzn. Szereg operacji, które nigdy się nie kończą, nie jest uważany za algorytm.
Styczny. Problem zatrzymania mówi, że nie może istnieć algorytm określający, czy dowolny program zakończy działanie dla danych wejściowych. Jednak w przypadku tego konkretnego programu, ponieważ nie ma gałęzi, która prowadzi do wyjścia z głównego, kompilator może łatwo stwierdzić, że program nigdy się nie skończy. Jest to jednak nieistotne, ponieważ pytanie dotyczy prawnika ds. Języka.