"হিসাবে যদি" ​​নিয়ম ঠিক কি?


90

যেমন শিরোনাম বলেছে,

"As-if" বিধিটি ঠিক কী?

একটি সাধারণ উত্তরটি পাবেন:

নিয়মটি যে কোনও এবং সমস্ত কোড রূপান্তরকে অনুমতি দেয় যা প্রোগ্রামটির পর্যবেক্ষণযোগ্য আচরণ পরিবর্তন করে না

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

দ্রষ্টব্য: এটি সি এবং সি ++ উভয় হিসাবে ট্যাগ করা, কারণ এটি উভয় ভাষার সাথেই প্রাসঙ্গিক।


4
এটি বিমূর্ত মেশিনকে বোঝায়।
আলেক্সি ফ্রুঞ্জ

" এটি সি এবং সি ++ উভয় হিসাবে ট্যাগ করা, কারণ এটি উভয় ভাষার সাথেই প্রাসঙ্গিক " এটি কোনও ভাষায়ই প্রাসঙ্গিক।
কৌতূহলী

@ অ্যালেক্সিফ্রুনজে " এটি অ্যাবস্ট্রাক্ট মেশিনকে বোঝায়" এটি "অ্যাবস্ট্রাক্ট মেশিন" একটি হাতিয়ার এবং শেষ নয় এবং মেনে চলার ক্ষেত্রে অপ্রাসঙ্গিক বলে এর অবস্থানকে বোঝায়, কারণ এটি "বিমূর্ত" যা একটি স্পেসিফিকেশন সরঞ্জামটি বাস্তব নয়।
কৌতূহলী

উত্তর:


100

" As-if " বিধি কি?

" হিসাবে যদি " বিধিটি মূলত সংজ্ঞায়িত করে যে কোনও আইনী সি ++ প্রোগ্রামে কোনও বাস্তবায়ন অনুমোদিত কি রূপান্তরগুলি। সংক্ষেপে, সমস্ত রূপান্তর যা কোনও প্রোগ্রামের " পর্যবেক্ষণযোগ্য আচরণ " (কোন নিখুঁত সংজ্ঞার জন্য নীচে দেখুন) প্রভাবিত করে না তা অনুমোদিত।

লক্ষ্যটি হ'ল যতক্ষণ না প্রোগ্রামটির আচরণটি একটি বিমূর্ত মেশিনের ক্ষেত্রে সি ++ স্ট্যান্ডার্ড দ্বারা নির্দিষ্ট করা শব্দার্থবিজ্ঞানের সাথে সামঞ্জস্য থাকে ততক্ষণ অপ্টিমাইজেশানগুলি সম্পাদনের স্বাধীনতা দেওয়া।


স্ট্যান্ডার্ড এই নিয়মটি কোথায় প্রবর্তন করে?

সি ++ 11 স্ট্যান্ডার্ড অনুচ্ছেদ 1.9 / 1 এ " হিসাবে যদি " বিধি প্রবর্তন করে :

এই আন্তর্জাতিক স্ট্যান্ডার্ডের অর্থ সংক্রান্ত বিবরণগুলি একটি প্যারামিটারাইজড ননডেটারিস্টিনিস্টিক অ্যাবস্ট্রাক্ট মেশিনকে সংজ্ঞায়িত করে। এই আন্তর্জাতিক মান বাস্তবায়ন কাঠামোর উপর কোনও প্রয়োজন রাখে না। বিশেষত, তাদের বিমূর্ত মেশিনের কাঠামো অনুলিপি করা বা অনুকরণ করার দরকার নেই। পরিবর্তে, নীচে বর্ণিত বিমূর্ত মেশিনের পর্যবেক্ষণযোগ্য আচরণ (কেবলমাত্র) অনুকরণ করার জন্য যথাযথ বাস্তবায়নগুলি প্রয়োজন ।

এছাড়াও, একটি ব্যাখ্যামূলক পাদটীকা যোগ করেছে:

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


নিয়ম ম্যান্ডেট ঠিক কি করে?

অনুচ্ছেদ 1.9 / 5 আরও নির্দিষ্ট করে:

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

এটা জোর দিয়ে বলা যায় যে কেবলমাত্র "একটি সুগঠিত প্রোগ্রাম সম্পাদন করার সময় " এই সীমাবদ্ধতা প্রযোজ্য এবং অপরিজ্ঞাত আচরণযুক্ত এমন কোনও প্রোগ্রাম কার্যকর করার সম্ভাব্য ফলাফলগুলি সংবিধানবিরোধী। এটি অনুচ্ছেদ 1.9 / 4 এও স্পষ্ট করে দেওয়া হয়েছে:

কিছু অন্যান্য ক্রিয়াকলাপ এই আন্তর্জাতিক স্ট্যান্ডার্ডে অপরিজ্ঞাত হিসাবে বর্ণনা করা হয়েছে (উদাহরণস্বরূপ, কোনও কনস্ট বস্তুটি সংশোধন করার চেষ্টা করার প্রভাব)। [দ্রষ্টব্য: এই আন্তর্জাতিক স্ট্যান্ডার্ডটি এমন প্রোগ্রামগুলির আচরণের জন্য কোনও প্রয়োজনীয়তা আরোপ করে না যার মধ্যে অপরিজ্ঞাত আচরণ রয়েছে । অন্তর্ভুক্ত নোট]

পরিশেষে, " পর্যবেক্ষণযোগ্য আচরণ " এর সংজ্ঞা সম্পর্কে , অনুচ্ছেদ 1.9 / 8 নিম্নরূপ:

মেনে চলার ক্ষেত্রে সর্বনিম্ন প্রয়োজনীয়তা হ'ল:

- বিমূর্ত যন্ত্রের অ্যাক্সেসটি বিমূর্ত মেশিনের নিয়ম অনুসারে কঠোরভাবে মূল্যায়ন করা হয়।

- প্রোগ্রাম সমাপ্তির সময়, ফাইলগুলিতে লিখিত সমস্ত ডেটা সম্ভাব্য ফলাফলগুলির সাথে সমান হবে যেটি অ্যাবস্ট্রাক্ট শব্দার্থবিজ্ঞান অনুসারে প্রোগ্রামটি কার্যকর করা হতে পারে।

- ইন্টারেক্টিভ ডিভাইসের ইনপুট এবং আউটপুট গতিবিদ্যা এমন ফ্যাশনে সঞ্চালিত হবে যে কোনও প্রোগ্রামের ইনপুটটির জন্য অপেক্ষা করার আগে প্রম্প্টিং আউটপুট প্রকৃতপক্ষে সরবরাহ করা হয়। একটি ইন্টারেক্টিভ ডিভাইস যা গঠন করে তা বাস্তবায়ন-সংজ্ঞায়িত।

এগুলি সম্মিলিতভাবে প্রোগ্রামটির পর্যবেক্ষণযোগ্য আচরণ হিসাবে চিহ্নিত করা হয় । [ দ্রষ্টব্য : বিমূর্ত এবং প্রকৃত শব্দার্থবিদ্যার মধ্যে আরও কড়া চিঠিপত্র প্রতিটি বাস্তবায়ন দ্বারা সংজ্ঞায়িত করা যেতে পারে। - শেষ নোট ]


এই নিয়মটি প্রয়োগ হয় না এমন পরিস্থিতি কি আছে?

আমার জ্ঞান, এর একমাত্র ব্যতিক্রম শ্রেষ্ঠ করার জন্য " যেমন-যদি " নিয়ম কপি / পদক্ষেপ বিলোপ, যা যদিও কপি কন্সট্রাকটর, স্থানান্তর কন্সট্রাকটর, অথবা একটি ক্লাসের বিনাশকারী পার্শ্ব প্রতিক্রিয়া আছে অনুমতি দেওয়া হয়। এর জন্য সঠিক শর্তাদি অনুচ্ছেদ 12.8 / 31 এ নির্দিষ্ট করা হয়েছে:

যখন নির্দিষ্ট মানদণ্ডগুলি পূরণ করা হয়, কোনও প্রয়োগকে ক্লাস অবজেক্টের অনুলিপি / সরানো নির্মাণকে বাদ দিতে দেওয়া হয়, এমনকি অনুলিপি / মুভ অপারেশনের জন্য নির্বাচিত কনস্ট্রাক্টর এবং / অথবা অবজেক্টের ডেস্ট্রাক্টরের পার্শ্ব প্রতিক্রিয়া থাকলেও । [...]


4
আমি এই উদ্ধৃতি দেখেছি। যা পরিষ্কার নয় তা পর্যবেক্ষণযোগ্য আচরণের সংজ্ঞা। পর্যবেক্ষণযোগ্য আচরণ হিসাবে ঠিক কী যোগ্য? কপি এলিজেন ব্যতিক্রম হিসাবে ব্যতিক্রম হিসাবে নিয়মটি বেশ সুপরিচিত এবং সত্যই আমার প্রশ্নের অংশ নয়।
অলোক

4
@ অলোকস্যাভ: সি স্ট্যান্ডার্ডে আমরা দেখতে পাই "একটি উদ্বায়ী বস্তু অ্যাক্সেস করা, কোনও জিনিসকে পরিবর্তন করা, কোনও ফাইলকে সংশোধন করা, বা এমন কোনও ক্রিয়াকলাপ বলা যা এই অপারেশনগুলির মধ্যে যে কোনও একটিতে পার্শ্ব প্রতিক্রিয়া"। সম্ভবত সি ++ স্ট্যান্ডার্ড (গুলি) এর সমতুল্য কিছু রয়েছে। অনানুষ্ঠানিকভাবে, আমি "বাইরের বিশ্বের সাথে এর মিথস্ক্রিয়া পরিবর্তন করে এমন কোনও কিছুই" অনুমান করি।
অলিভার চার্লসওয়ার্থ

4
বিমূর্ত মেশিনের স্থিতি পরিবর্তন করে এমন কোনও আচরণ (সুতরাং, এমন কোনও কিছু যা ভেরিয়েবলকে পরিবর্তন করে বা বিশ্বব্যাপী ভেরিয়েবল পরিবর্তন করে, বা I / O ডিভাইসগুলিতে পড়ে এবং লেখায়)।
ম্যাটস পিটারসন

4
এর অর্থ কি এই যে কোনও অসীম লুপ মুছে ফেলার অনুমতি নেই যা ততক্ষণ পর্যবেক্ষণযোগ্য কিছুই হয় না?
বর্ধিত

4
বিশেষভাবে লক্ষ করার একটি বিষয় হ'ল এটি কেবল আইনী প্রোগ্রামগুলিতে প্রযোজ্য । যেকোনো কিছু invoking অনির্ধারিত আচরণ স্পষ্টভাবে কোনো কভারেজ বাইরে।
ভনব্র্যান্ড

15

সি 11 এ নিয়মটি কখনই সেই নামে ডাকা হয় না। তবে সি, সি ++ এর মতোই বিমূর্ত মেশিনের ক্ষেত্রে আচরণটি সংজ্ঞায়িত করে। বিধি হিসাবে নিয়মটি সি 11 5.1.2.3p4 এবং পি 6 এ রয়েছে :

  1. বিমূর্ত মেশিনে, শব্দার্থবিদ্যা দ্বারা নির্দিষ্ট হিসাবে সমস্ত এক্সপ্রেশন মূল্যায়ন করা হয়। প্রকৃত বাস্তবায়নের জন্য কোনও অভিব্যক্তির অংশের মূল্যায়ন করা দরকার না যদি এটির মূল্য নির্ধারণ করা হয় না এবং কোনও প্রয়োজনীয় পার্শ্ব প্রতিক্রিয়া তৈরি হয় না (কোনও ফাংশন ডেকে বা অস্থির বস্তু অ্যাক্সেস করার কারণে যে কোনও কারণ রয়েছে)।

  2. [...]

  3. মেনে চলার ক্ষেত্রে সর্বনিম্ন প্রয়োজনীয়তা হ'ল:

    • volatileবিমূর্ত মেশিনের নিয়ম অনুসারে অবজেক্টগুলিতে অ্যাক্সেসগুলি কঠোরভাবে মূল্যায়ন করা হয়।
    • প্রোগ্রাম সমাপ্তির সময়, ফাইলগুলিতে লিখিত সমস্ত ডেটা ফলাফলের সমান হতে পারে যে বিমূর্ত শব্দার্থক অনুসারে প্রোগ্রামটি কার্যকর করা হত।
    • ইন্টারেক্টিভ ডিভাইসের ইনপুট এবং আউটপুট গতিবিদ্যা .2.২১.৩ বর্ণিত হিসাবে স্থান গ্রহণ করবে । এই প্রয়োজনীয়তার উদ্দেশ্য হ'ল আনফারযুক্ত বা লাইন-বাফার আউটপুট যত তাড়াতাড়ি সম্ভব উপস্থিত হয়, যাতে তা নিশ্চিত করা যায় যে ইনপুটটির জন্য অপেক্ষা করা কোনও প্রোগ্রামের আগে অনুরোধমূলক বার্তাগুলি প্রকৃতপক্ষে উপস্থিত হয়।

     

    এটি প্রোগ্রামটির পর্যবেক্ষণযোগ্য আচরণ।


-1

সি, সি ++, অ্যাডা, জাভা, এসএমএল ... কোনও প্রোগ্রামিংয়ের ভাষায় কোনও প্রোগ্রামের (সাধারণত অনেকগুলি সম্ভাব্য, অ-বিড়ম্বনকারী) আচরণ (গুলি) (আই / ও পোর্টগুলির সাথে ক্রিয়া সম্পর্কিত ক্রিয়াকলাপের বহিঃপ্রকাশ) বর্ণনা করে ভালভাবে নির্দিষ্ট করা হয় , বিধি হিসাবে কোনও পৃথক নেই

স্বতন্ত্র নিয়মের একটি উদাহরণ যা বলে যে শূন্য দ্বারা বিভাজন একটি ব্যতিক্রম (অ্যাডা, ক্যামেল) বা একটি নাল ডিরিফারেন্স একটি ব্যতিক্রম (জাভা) উত্থাপন করে। আপনি অন্য কিছু নির্দিষ্ট করার জন্য নিয়মটি পরিবর্তন করতে পারেন এবং আপনি একটি ভিন্ন ভাষা দিয়ে শেষ করতে পারেন (যে কিছু লোক বরং "উপভাষা" (*) বলবে a প্রোগ্রামিং ভাষার কিছু পৃথক ব্যবহার যেমন একটি স্বতন্ত্রের মতো নির্দিষ্ট করার জন্য একটি পৃথক নিয়ম রয়েছে ব্যাকরণগত নিয়ম কিছু সিনট্যাক্স নির্মাণ আবরণ ।

(*) কিছু ভাষাতত্ত্ববিদদের মতে একটি উপভাষা একটি "সেনাবাহিনী" সহ একটি ভাষা is সেই প্রসঙ্গে, এর অর্থ একটি কমিটি এবং সংকলক সম্পাদকদের একটি নির্দিষ্ট শিল্প ছাড়া প্রোগ্রামিং ভাষা হতে পারে।

বিধি-বিধান কোনও স্বতন্ত্র নিয়ম নয় ; এটি কোনও প্রোগ্রামকে বিশেষভাবে কভার করে না এবং এমন কোনও নিয়মও নয় যা আলোচনা করা, অপসারণ বা কোনওভাবেই পরিবর্তিত হতে পারে : তথাকথিত "বিধি" কেবলমাত্র প্রোগ্রামটির শব্দার্থবিজ্ঞানের সংজ্ঞা দেওয়া হয়েছে এবং কেবল বহনযোগ্য (সর্বজনীন) হতে পারে সংজ্ঞায়িত, "বহিরাগত" বিশ্বের সাথে প্রোগ্রামটির একটি সম্পাদনের দৃশ্যমান মিথস্ক্রিয়ার মেয়াদে।

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

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

সারসংক্ষেপ:

  • তথাকথিত "যেমন-নিয়ম" প্রয়োগের ক্ষেত্রে কোনও বাধা শিথিল করে না।
  • স্বতন্ত্র উপভাষা পাওয়ার জন্য দৃশ্যমান আচরণের (বহিরাগত বিশ্বের সাথে মিথস্ক্রিয়া করার জন্য কার্যকর সম্পাদনের চিহ্ন) নির্দিষ্ট হওয়া কোনও প্রোগ্রামিং ভাষায় আপনি বিধি বিধানকে সরাতে পারবেন না।
  • আপনি দৃশ্যমান আচরণের শর্তে নির্দিষ্ট না করে কোনও প্রোগ্রামিং ভাষায় বিধি বিধি যুক্ত করতে পারবেন না।

লোকেরা যদি বিশ্বাস করে যে আমি ভুল, এবং একটি আলাদা "যদি নিয়ম" থাকে তবে তারা কেন সি ++ (একটি উপভাষা) ডাব্লু / ও "বিধি" এর একটি বৈকল্পিক বর্ণনা করার চেষ্টা করবেন না? সি ++ স্পেসিফিকেশনের এমনকি ডাব্লু / ও এর অর্থ কী হবে? কোনও সংকলক অনুসারে কাজ করছে কিনা তা বলা একেবারেই অসম্ভব। বা এমনকি অনুসারে সংজ্ঞা দিতে।
কৌতূহলী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.