Comment by lmm

12 hours ago

And Alonzo Church proved in 1940 that you can avoid this problem by using a typed language in which all programs halt. But sadly some programmers still resist this.

Some correct programs are supposed to run forever.

When is an OS supposed to halt? When you shut it down, or when you power down the hardware, and no other times. So if you don't do either of those things, then the OS is supposed to run forever. Does that, by itself, mean that the program is incorrect, or that the language is inadequate? No, it means that the definition is worthless (or at least worthless for programs like OSes).

  • Two different meanings of "forever" there. An OS runs for an arbitrarily large finite time, which is different from an infinite time.

    Same way you can count to any finite integer with enough time, but you can never count to infinity.

    Those kinds of interactive programs take in a stream of input events, which can be arbitrarily long, but eventually ends when the computer is shut down.

    Termination checkers don't stop you from writing these interactive loops, they only stop non-interactive loops

  • This is not actually a problem for total languages, which simply model these kinds of processes using corecursion/coinduction/codata.