" As-if " বিধি কি?
" হিসাবে যদি " বিধিটি মূলত সংজ্ঞায়িত করে যে কোনও আইনী সি ++ প্রোগ্রামে কোনও বাস্তবায়ন অনুমোদিত কি রূপান্তরগুলি। সংক্ষেপে, সমস্ত রূপান্তর যা কোনও প্রোগ্রামের " পর্যবেক্ষণযোগ্য আচরণ " (কোন নিখুঁত সংজ্ঞার জন্য নীচে দেখুন) প্রভাবিত করে না তা অনুমোদিত।
লক্ষ্যটি হ'ল যতক্ষণ না প্রোগ্রামটির আচরণটি একটি বিমূর্ত মেশিনের ক্ষেত্রে সি ++ স্ট্যান্ডার্ড দ্বারা নির্দিষ্ট করা শব্দার্থবিজ্ঞানের সাথে সামঞ্জস্য থাকে ততক্ষণ অপ্টিমাইজেশানগুলি সম্পাদনের স্বাধীনতা দেওয়া।
স্ট্যান্ডার্ড এই নিয়মটি কোথায় প্রবর্তন করে?
সি ++ 11 স্ট্যান্ডার্ড অনুচ্ছেদ 1.9 / 1 এ " হিসাবে যদি " বিধি প্রবর্তন করে :
এই আন্তর্জাতিক স্ট্যান্ডার্ডের অর্থ সংক্রান্ত বিবরণগুলি একটি প্যারামিটারাইজড ননডেটারিস্টিনিস্টিক অ্যাবস্ট্রাক্ট মেশিনকে সংজ্ঞায়িত করে। এই আন্তর্জাতিক মান বাস্তবায়ন কাঠামোর উপর কোনও প্রয়োজন রাখে না। বিশেষত, তাদের বিমূর্ত মেশিনের কাঠামো অনুলিপি করা বা অনুকরণ করার দরকার নেই। পরিবর্তে, নীচে বর্ণিত বিমূর্ত মেশিনের পর্যবেক্ষণযোগ্য আচরণ (কেবলমাত্র) অনুকরণ করার জন্য যথাযথ বাস্তবায়নগুলি প্রয়োজন ।
এছাড়াও, একটি ব্যাখ্যামূলক পাদটীকা যোগ করেছে:
এই বিধানটিকে কখনও কখনও "বিস্ময়কর" বিধি বলা হয় , কারণ কোনও বাস্তবায়নের ক্ষেত্রে এই আন্তর্জাতিক মানক যে কোনও প্রয়োজনীয়তা উপেক্ষা করা যায় যতক্ষণ না ফলস্বরূপ যে প্রয়োজনীয়তা মানানো হয়েছে ততক্ষণ পর্যবেক্ষণযোগ্য আচরণ থেকে নির্ধারণ করা যেতে পারে প্রোগ্রামের। উদাহরণস্বরূপ, প্রকৃত বাস্তবায়নের জন্য কোনও অভিব্যক্তির অংশটি মূল্যায়ন করা দরকার না যদি এটির মূল্য নির্ধারণ করা যায় না এবং প্রোগ্রামের পর্যবেক্ষণযোগ্য আচরণকে প্রভাবিত করে এমন কোনও পার্শ্ব প্রতিক্রিয়া তৈরি হয় না।
নিয়ম ম্যান্ডেট ঠিক কি করে?
অনুচ্ছেদ 1.9 / 5 আরও নির্দিষ্ট করে:
একটি সুগঠিত প্রোগ্রাম সম্পাদনকারী একটি কার্যকর বাস্তবায়ন একই প্রোগ্রাম এবং একই ইনপুট সহ বিমূর্ত মেশিনের সংশ্লিষ্ট দৃষ্টান্তের সম্ভাব্য মৃত্যুদণ্ডের মধ্যে একটি হিসাবে একই পর্যবেক্ষণযোগ্য আচরণ তৈরি করবে । যাইহোক, যদি এইরকম কোনও কার্যকরকরণের একটি অপরিজ্ঞাত অপারেশন থাকে তবে এই আন্তর্জাতিক স্ট্যান্ডার্ডটি সেই ইনপুট দিয়ে সেই প্রোগ্রামটি সম্পাদন করে এমন বাস্তবায়ন করার কোনও প্রয়োজন রাখে না (এমনকি প্রথম অপরিবর্তিত অপারেশন পূর্ববর্তী অপারেশনগুলির ক্ষেত্রেও নয়)।
এটা জোর দিয়ে বলা যায় যে কেবলমাত্র "একটি সুগঠিত প্রোগ্রাম সম্পাদন করার সময় " এই সীমাবদ্ধতা প্রযোজ্য এবং অপরিজ্ঞাত আচরণযুক্ত এমন কোনও প্রোগ্রাম কার্যকর করার সম্ভাব্য ফলাফলগুলি সংবিধানবিরোধী। এটি অনুচ্ছেদ 1.9 / 4 এও স্পষ্ট করে দেওয়া হয়েছে:
কিছু অন্যান্য ক্রিয়াকলাপ এই আন্তর্জাতিক স্ট্যান্ডার্ডে অপরিজ্ঞাত হিসাবে বর্ণনা করা হয়েছে (উদাহরণস্বরূপ, কোনও কনস্ট বস্তুটি সংশোধন করার চেষ্টা করার প্রভাব)। [দ্রষ্টব্য: এই আন্তর্জাতিক স্ট্যান্ডার্ডটি এমন প্রোগ্রামগুলির আচরণের জন্য কোনও প্রয়োজনীয়তা আরোপ করে না যার মধ্যে অপরিজ্ঞাত আচরণ রয়েছে । অন্তর্ভুক্ত নোট]
পরিশেষে, " পর্যবেক্ষণযোগ্য আচরণ " এর সংজ্ঞা সম্পর্কে , অনুচ্ছেদ 1.9 / 8 নিম্নরূপ:
মেনে চলার ক্ষেত্রে সর্বনিম্ন প্রয়োজনীয়তা হ'ল:
- বিমূর্ত যন্ত্রের অ্যাক্সেসটি বিমূর্ত মেশিনের নিয়ম অনুসারে কঠোরভাবে মূল্যায়ন করা হয়।
- প্রোগ্রাম সমাপ্তির সময়, ফাইলগুলিতে লিখিত সমস্ত ডেটা সম্ভাব্য ফলাফলগুলির সাথে সমান হবে যেটি অ্যাবস্ট্রাক্ট শব্দার্থবিজ্ঞান অনুসারে প্রোগ্রামটি কার্যকর করা হতে পারে।
- ইন্টারেক্টিভ ডিভাইসের ইনপুট এবং আউটপুট গতিবিদ্যা এমন ফ্যাশনে সঞ্চালিত হবে যে কোনও প্রোগ্রামের ইনপুটটির জন্য অপেক্ষা করার আগে প্রম্প্টিং আউটপুট প্রকৃতপক্ষে সরবরাহ করা হয়। একটি ইন্টারেক্টিভ ডিভাইস যা গঠন করে তা বাস্তবায়ন-সংজ্ঞায়িত।
এগুলি সম্মিলিতভাবে প্রোগ্রামটির পর্যবেক্ষণযোগ্য আচরণ হিসাবে চিহ্নিত করা হয় । [ দ্রষ্টব্য : বিমূর্ত এবং প্রকৃত শব্দার্থবিদ্যার মধ্যে আরও কড়া চিঠিপত্র প্রতিটি বাস্তবায়ন দ্বারা সংজ্ঞায়িত করা যেতে পারে। - শেষ নোট ]
এই নিয়মটি প্রয়োগ হয় না এমন পরিস্থিতি কি আছে?
আমার জ্ঞান, এর একমাত্র ব্যতিক্রম শ্রেষ্ঠ করার জন্য " যেমন-যদি " নিয়ম কপি / পদক্ষেপ বিলোপ, যা যদিও কপি কন্সট্রাকটর, স্থানান্তর কন্সট্রাকটর, অথবা একটি ক্লাসের বিনাশকারী পার্শ্ব প্রতিক্রিয়া আছে অনুমতি দেওয়া হয়। এর জন্য সঠিক শর্তাদি অনুচ্ছেদ 12.8 / 31 এ নির্দিষ্ট করা হয়েছে:
যখন নির্দিষ্ট মানদণ্ডগুলি পূরণ করা হয়, কোনও প্রয়োগকে ক্লাস অবজেক্টের অনুলিপি / সরানো নির্মাণকে বাদ দিতে দেওয়া হয়, এমনকি অনুলিপি / মুভ অপারেশনের জন্য নির্বাচিত কনস্ট্রাক্টর এবং / অথবা অবজেক্টের ডেস্ট্রাক্টরের পার্শ্ব প্রতিক্রিয়া থাকলেও । [...]