क्या एक कार्यक्रम को समाप्त करने के लिए आवश्यक है? दूसरे शब्दों में एक प्रोग्राम है जो हमेशा के लिए तकनीकी रूप से अपरिभाषित व्यवहार चलता है? ध्यान दें कि यह खाली छोरों के बारे में नहीं है। उन कार्यक्रमों के बारे में बात करना जो हमेशा के लिए "सामान" (यानी अवलोकनीय व्यवहार) करते हैं।
कुछ इस तरह:
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
}
}
}
यह एक अकादमिक प्रश्न है, जैसा कि आनुभविक रूप से सभी समझदार संकलक उपरोक्त प्रकार के कार्यक्रम के लिए अपेक्षित कोड उत्पन्न करेंगे (निश्चित रूप से यूबी का कोई अन्य स्रोत नहीं है)। और हां, निश्चित रूप से बहुत सारे प्रोग्राम हैं जो कभी भी समाप्त नहीं होते हैं (ओएस, एंबेडेड, सर्वर)। हालांकि मानक कभी-कभी विचित्र होता है, इस प्रकार प्रश्न।
स्पर्शरेखा: "एल्गोरिथम" की कई (कुछ?) परिभाषाओं के लिए आवश्यक है कि एक एल्गोरिथ्म को समाप्त किया जाना चाहिए , अर्थात ऑपरेशन की एक श्रृंखला जो कभी समाप्त नहीं होती है उसे एल्गोरिथ्म नहीं माना जाता है।
स्पर्शरेखा। हॉल्टिंग समस्या बताती है कि इनपुट के लिए कोई मनमाना प्रोग्राम पूरा हो जाए, यह निर्धारित करने के लिए एक एल्गोरिथ्म मौजूद नहीं हो सकता है। हालांकि इस विशेष कार्यक्रम के लिए चूंकि कोई शाखा नहीं है जो मुख्य से बाहर निकलने की ओर जाता है, कंपाइलर आसानी से निर्धारित कर सकता है कि कार्यक्रम कभी समाप्त नहीं होगा। यह हालांकि अप्रासंगिक है क्योंकि यह सवाल भाषा-वकील का है।