Là một chương trình cần thiết để chấm dứt? Nói cách khác là một chương trình chạy mãi mãi về mặt kỹ thuật Hành vi không xác định? Lưu ý đây không phải là về các vòng lặp trống. Nói về các chương trình làm "công cụ" (tức là hành vi có thể quan sát) mãi mãi.
Ví dụ như một cái gì đó như thế này:
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
}
}
}
Đây là một câu hỏi học thuật nhiều hơn, vì theo kinh nghiệm, tất cả các trình biên dịch lành mạnh sẽ tạo mã dự kiến cho loại chương trình trên (tất nhiên giả sử không có nguồn UB nào khác). Và vâng, tất nhiên có rất nhiều chương trình không bao giờ chấm dứt (os, nhúng, máy chủ). Tuy nhiên, tiêu chuẩn đôi khi kỳ quặc, do đó, câu hỏi.
Tiếp tuyến: nhiều định nghĩa (một số?) Của "thuật toán" yêu cầu thuật toán phải chấm dứt , tức là một loạt các hoạt động không bao giờ chấm dứt không được coi là một thuật toán.
Tiếp tuyến. Vấn đề tạm dừng nói rằng không thể tồn tại một thuật toán để xác định xem một chương trình tùy ý kết thúc cho một đầu vào. Tuy nhiên, đối với chương trình cụ thể này vì không có chi nhánh nào dẫn đến thoát khỏi chính, trình biên dịch có thể dễ dàng xác định chương trình sẽ không bao giờ kết thúc. Tuy nhiên điều này không liên quan vì câu hỏi là luật sư ngôn ngữ.