এমন একটি প্রোগ্রাম যা কোনও বৈধ সি ++ প্রোগ্রামটি কখনই বন্ধ করে দেয় না?


15

একটি প্রোগ্রাম কি সমাপ্ত করার প্রয়োজন? অন্য কথায় এমন একটি প্রোগ্রাম যা প্রযুক্তিগতভাবে অনির্ধারিত আচরণ চিরতরে চলে? নোট করুন এটি খালি লুপগুলি সম্পর্কে নয়। "স্টাফ" (যেমন পর্যবেক্ষণযোগ্য আচরণ) চিরকালের জন্য প্রোগ্রামগুলির বিষয়ে কথা বলা।

যেমন এরকম কিছু:

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
        }
    }
}

এটি আরও একাডেমিক প্রশ্ন, কারণ যথাক্রমে সমস্ত বুদ্ধিমান সংকলক উপরের ধরণের প্রোগ্রামের জন্য প্রত্যাশিত কোড উত্পন্ন করবে (অবশ্যই ধরে নিবেন যে ইউবির অন্য কোনও উত্স নয়)। এবং হ্যাঁ, অবশ্যই অনেকগুলি প্রোগ্রাম রয়েছে যা কখনই শেষ হয় না (ওএস, এম্বেড করা সার্ভার)। তবে মানটি মাঝে মাঝে উদ্বিগ্ন হয়, এভাবেই প্রশ্ন।


স্পর্শকাতর: "অ্যালগরিদম" এর অনেকগুলি (কিছু?) সংজ্ঞাগুলির প্রয়োজন একটি অ্যালগরিদমকে অবসান করতে হবে , অর্থাৎ এমন ক্রিয়াকলাপ যা কখনও শেষ হয় না একটি অ্যালগরিদম হিসাবে বিবেচিত হয় না।


স্পর্শিনী। থামার সমস্যাটি বলে যে একটি ইনপুট জন্য একটি স্বেচ্ছাসেবী প্রোগ্রাম শেষ হয় কিনা তা নির্ধারণ করার জন্য একটি অ্যালগরিদম থাকতে পারে না। তবে এই নির্দিষ্ট প্রোগ্রামের জন্য যেহেতু কোনও শাখা নেই যা মূল থেকে বেরিয়ে আসে, তাই সংকলক সহজেই নির্ধারণ করতে পারে যে প্রোগ্রামটি কখনই শেষ হবে না। প্রশ্নটি ভাষা-আইনজীবী হিসাবে এটি অবশ্য অপ্রাসঙ্গিক।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
স্যামুয়েল লিউ

উত্তর:


15

সি ++ স্ট্যান্ডার্ডের এমন কোনও কিছুই নেই যা সমাপ্তির জন্য প্রোগ্রাম, বা কোনও প্রদত্ত থ্রেডের প্রয়োজন। এর নিকটতম জিনিসটি হল [intro.progress] পি 1 , যা বলে

বাস্তবায়ন ধরে নেওয়া যেতে পারে যে কোনও থ্রেড অবশেষে নিম্নলিখিতগুলির মধ্যে একটি করবে:

  • বিনষ্ট,
  • I / O ফাংশনটিতে একটি লাইব্রেরিতে কল করুন
  • একটি অস্থির আঠালো মাধ্যমে অ্যাক্সেস সঞ্চালন, বা
  • একটি সিঙ্ক্রোনাইজেশন অপারেশন বা একটি পারমাণবিক অপারেশন সঞ্চালন।

[  দ্রষ্টব্য: এটি সমাপ্তি প্রমাণিত না হওয়া সত্ত্বেও খালি লুপগুলি অপসারণের মতো সংকলক রূপান্তরগুলিকে অনুমতি দেওয়ার উদ্দেশ্যে is -  শেষ নোট  ]

যতক্ষণ না কিছু পর্যবেক্ষণযোগ্য আচরণ থাকে, শেষ পর্যন্ত বা যতক্ষণ না এটি তার সমস্ত সময় I / O অপারেশন বা অন্য একটি ব্লকিং লাইব্রেরি কলগুলিতে অবরুদ্ধ করে ব্যয় করে, এটি প্রয়োগ হয় না এবং প্রোগ্রামটি বৈধ হয় (ধরে নিলে এটি সমস্তটি পূরণ করে) অন্যান্য বৈধতার মানদণ্ড)।


"একটি আই / ও অপারেশন বা অন্য একটি ব্লক করা লাইব্রেরি কল" - মানকটি বেশ পরিষ্কার এবং কেবলমাত্র I / O ক্রিয়াকলাপকে তালিকাবদ্ধ করে। আপনি কেন "বা অন্য কোনও ব্লক করা লাইব্রেরি কল" যুক্ত করছেন? এছাড়াও, যে I / O অপারেশনটি ইতিমধ্যে আপনার আগের " কিছু পর্যবেক্ষণযোগ্য আচরণ" তে অন্তর্ভুক্ত রয়েছে।
এমএসএলটাররা

1
@ এসএমএলটার্স std::mutex::lock()একটি লাইব্রেরি কল যা একটি সিঙ্ক্রোনাইজেশন অপারেশন, চতুর্থ বুলেটের আওতায় পড়ে। সুতরাং এটি ঠিক নয় যে কেবলমাত্র I / O কলগুলি উল্লেখ করা হয়েছে।
ইগোর ট্যান্ডেটনিক

এটা আটকে তাহলে ইনপুট , কিন্তু কোনো কিনা পর্যবেক্ষণযোগ্য হিসাবে গন্য এটা তর্কসাপেক্ষ পায় না।
ড্যানিয়েল এইচ

4

হ্যাঁ. থেকে[intro.progress]

বাস্তবায়ন ধরে নেওয়া যেতে পারে যে কোনও থ্রেড অবশেষে নিম্নলিখিতগুলির মধ্যে একটি করবে:

  • বিনষ্ট,
  • I / O ফাংশনটিতে একটি লাইব্রেরিতে কল করুন
  • একটি অস্থির আঠালো মাধ্যমে অ্যাক্সেস সঞ্চালন, বা
  • একটি সিঙ্ক্রোনাইজেশন অপারেশন বা একটি পারমাণবিক অপারেশন সঞ্চালন।

[ দ্রষ্টব্য: এটি সমাপ্তি প্রমাণিত না হওয়া সত্ত্বেও খালি লুপগুলি অপসারণের মতো সংকলক রূপান্তরগুলিকে অনুমতি দেওয়ার উদ্দেশ্যে is - শেষ নোট ]


আমি বিশ্বাস করি যে এই প্রোগ্রামটি I / O- এর পক্ষে যুক্তিযুক্ত হতে পারে তার একটি সামান্য বিবরণ।
কামিলকুক

সুতরাং যতক্ষণ না অপিসের উদাহরণস্বরূপ get_inputএবং put_outputফাংশনগুলি উদাহরণস্বরূপ "একটি লাইব্রেরিতে আই / ও ফাংশনটিতে কল করুন" প্রোগ্রামটি শেষ না হলেও বৈধ হওয়া উচিত?
কিছু প্রোগ্রামার ড্যুড

@ সোপাগ্রামগ্রামারডুড বা অস্থির বা পারমাণবিক মান অ্যাক্সেস করুন, হ্যাঁ
ক্যালথ

প্রাক সি ++ 11 স্ট্যান্ডার্ড সম্পর্কে কৌতূহল, যখন বর্তমান মেমরির মডেল ছিল না।
বলভ

1
compiler does not know- এটা অপ্রাসঙ্গিক। সংকলকটি ভাষা-স্তরগত দৃষ্টিকোণ থেকে জানতে পারে এবং নাও জানতে পারে - প্রশ্নটি কোনও ক্ষেত্রেই এটি বৈধ কিনা।
কামিলকুক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.