"আইবি" এবং "ইউবি" এর অর্থ কী?


110

আমি "আইবি" এবং "ইউবি" শব্দটি বেশ কয়েকবার ব্যবহার করেছি, বিশেষত সি ++ এর প্রসঙ্গে। আমি তাদের গুগল করার চেষ্টা করেছি, তবে দৃশ্যত those দুটি অক্ষরের সংমিশ্রণে প্রচুর ব্যবহার দেখা যায়। : P: P

সুতরাং, আমি আপনাকে জিজ্ঞাসা করি ... তারা যখন বোঝায় যে তারা খারাপ জিনিস বলে তখন তাদের অর্থ কী?


5
যদি আপনি অন্য কারও সম্পাদনাগুলি রোল করার সিদ্ধান্ত নিয়ে থাকেন তবে দয়া করে নিশ্চিত করুন যে আপনার বানান, বিরামচিহ্ন এবং ব্যাকরণ নিখুঁত। মূল পাঠ্যের তুলনায় যথেষ্ট উন্নতি হ'ল সম্পাদনাগুলিকে ঘুরিয়ে দেওয়া অর্থহীন।
রবার্ট হার্ভে

উত্তর:


139

আইবি: বাস্তবায়ন-সংজ্ঞায়িত আচরণ। সুনির্দিষ্ট আচরণটি সংজ্ঞায়িত করার জন্য মানটি এটি নির্দিষ্ট সংকলক / প্ল্যাটফর্মের উপরে রেখে দেয় তবে এটি সংজ্ঞায়িত করা প্রয়োজন।

বাস্তবায়ন-সংজ্ঞায়িত আচরণ ব্যবহার দরকারী হতে পারে তবে আপনার কোডটি কম পোর্টেবল করে।

ইউবি: অপরিবর্তিত আচরণ hav স্ট্যান্ডার্ডটি নির্দিষ্ট করে না যে কোনও প্রোগ্রামের অনির্ধারিত আচরণের আচরণ করা উচিত। এটি "অনুনাসিক অসুর" নামেও পরিচিত কারণ তাত্ত্বিকভাবে এটি আপনার নাক থেকে অসুরগুলিকে উড়ে যেতে পারে।

অপরিজ্ঞাত আচরণ ব্যবহার করা প্রায়শই একটি খারাপ ধারণা। এমনকি যদি এটি কখনও কখনও কাজ করে মনে হয়, পরিবেশ, সংকলক বা প্ল্যাটফর্মের যে কোনও পরিবর্তন এলোমেলোভাবে আপনার কোডটি ভেঙে দিতে পারে।


11
আমি এখনও সি ++ এ অপরিবর্তিত আচরণ ব্যবহার করার কারও কারও নাক থেকে বের হয়ে একটি দৈত্যের জন্য অপেক্ষা করছি। আমি অনুমান করি যখন প্রথম সংকলকগুলি নতুন সি ++ স্ট্যান্ডার্ডের সাথে পুরোপুরি মেনে চলে।
অরেগনহোস্ট

4
@ অরেগনগোস্ট: আমার ধারণা আমি ঠিক আছি আমি এটি কয়েকবার ইউনিকর্নদের সাথে ঘটতে দেখেছি, তবে কখনও দানব নয়।
থমাস

33
@ অরেগনগোস্ট - কোনও মানুসের কত শিং থাকতে হবে তা মানটি নির্দিষ্ট করে না।
ডিভেকে

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

1
মজার বিষয় এই যে কেউ এই প্রশ্নের উত্তর না দিয়ে 30k এর চেয়ে কম খ্যাতি পেয়েছে।

19

বাস্তবায়ন-সংজ্ঞায়িত আচরণ এবং অপরিবর্তিত আচরণ

C ++ স্ট্যান্ডার্ডের বিভিন্ন নির্মানের প্রভাব সম্পর্কে খুব নির্দিষ্ট হয়, এবং বিশেষ করে আপনি সবসময় এই শ্রেণীর সচেতন হওয়া উচিত কষ্ট :

  • অপরিজ্ঞাত আচরণের অর্থ হ'ল কোনও গ্যারান্টি নেই। কোডটি কাজ করতে পারে, বা এটি আপনার হার্ডড্রাইভকে আগুন ধরিয়ে দিতে পারে বা ভূতগুলিকে আপনার নাক উড়িয়ে দিতে পারে । যতদূর সি ++ ভাষা সম্পর্কিত, একেবারে কিছু ঘটতে পারে। ব্যবহারিক দিক থেকে, এর অর্থ সাধারণত আপনার কাছে একটি অপরিশোধনযোগ্য ত্রুটি রয়েছে। যদি সেটা হয়, আপনি কি সত্যিই বিশ্বাস করতে পারি না কিছু আপনার আবেদন সম্পর্কে (কারণ এই অনির্ধারিত আচরণ প্রভাব এক মাত্র আপনার অ্যাপ বাকি দ্বারা ব্যবহৃত মেমরি আপ জগাখিচুড়ি হয়েছে পারে)। এটি ধারাবাহিক হওয়ার প্রয়োজন নেই, সুতরাং প্রোগ্রামটি দু'বার চালানো বিভিন্ন ফলাফল দিতে পারে। এটি চাঁদের পর্যায়ক্রমে, আপনি যে শার্টটি পরেছেন তার রঙ বা অন্য কোনও কিছুর উপর নির্ভর করে।

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

  • বাস্তবায়ন-সংজ্ঞায়িত আচরণ অনির্ধারিত অনুরূপ, তবে সংকলক লেখকরাও এটি নথিভুক্ত করতে হবে। এর উদাহরণ এ এর ​​ফলাফল reinterpret_castসাধারণত , ঠিকানাটি পরিবর্তন না করে এটি কেবলমাত্র কোনও পয়েন্টারের ধরণের পরিবর্তন করে তবে ম্যাপিংটি বাস্তবায়ন-সংজ্ঞায়িত হয়, তাই কোনও সংকলক এই পছন্দটিকে নথিভুক্ত না করেই সম্পূর্ণ ভিন্ন ঠিকানায় মানচিত্র করতে পারে । আর একটি উদাহরণ একটি int এর আকার। সি ++ স্ট্যান্ডার্ড এটি 2, 4 বা 8 বাইট হয় তা বিবেচনা করে না, তবে এটি অবশ্যই সংকলক দ্বারা নথিভুক্ত করা উচিত

তবে এই সমস্তগুলির জন্য সাধারণ এটি সর্বোত্তম এড়ানো। সম্ভব হলে, এমন আচরণের সাথে লেগে থাকুন যা সি ++ স্ট্যান্ডার্ড নিজেই 100% নির্দিষ্ট করে। এইভাবে, আপনি গ্যারান্টিযুক্ত বহনযোগ্যতা।

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

অপরপক্ষে নির্ধারিত আচরণ সর্বদা এড়ানো উচিত । সাধারণভাবে, আপনার কেবলমাত্র ধরে নেওয়া উচিত যে এটি আপনার প্রোগ্রামকে একরকম বা অন্য কোনও উপায়ে বিস্ফোরিত করে।


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

3
@ জেরি: না, ইউবি সম্পূর্ণরূপে সংজ্ঞায়িত হলে এড়ানো উচিত । প্ল্যাটফর্ম / বাস্তবায়ন / রানটাইম / সংকলক যদি আরও গ্যারান্টি দেয় তবে আপনি আচরণের উপর নির্ভর করতে পারেন এবং বহনযোগ্যতা হারাতে পারেন। তবে তারপরে এটি আর পুরোপুরি অপরিজ্ঞাত নয় ... যদিও বেশিরভাগ সময় আপনার কোনও গ্যারান্টি নেই, এবং অপরিজ্ঞাতটি কেবল অপরিজ্ঞাত and এবং যেকোন মূল্যে এড়ানো উচিত।
জাল্ফ

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

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

"এরপরে নিজের সাথে সমান তুলনা করতে হবে"। হুম, যদি না এটি এনএএন হয়। যাইহোক, এর ধরণের জন্য যা কিছু আচরণ প্রয়োজন তা অবশ্যই এটির থাকতে হবে।
স্টিভ জেসপ

8
  • আইবি: বাস্তবায়ন সংজ্ঞায়িত আচরণ - সংকলক অবশ্যই এটি ডকুমেন্ট করে। >>Negativeণাত্মক মান নিয়ে একটি অপারেশন করা একটি উদাহরণ an

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

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


4

সংক্ষিপ্ত সংস্করণ:

বাস্তবায়ন-সংজ্ঞায়িত আচরণ (আইবি): সঠিকভাবে প্রোগ্রাম করা তবে অনির্দিষ্টকালের জন্য *

অপরিজ্ঞাত আচরণ (ইউবি): ভুলভাবে প্রোগ্রাম করা (অর্থাত্ একটি বাগ !)

*) ভাষার মান সম্পর্কিত যতটা "অনির্দিষ্ট", অবশ্যই এটি নির্ধারিত হবে কোনও নির্দিষ্ট প্ল্যাটফর্মের উপর।


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

4

ইউবি: অপরিবর্তিত আচরণ hav

আইবি: বাস্তবায়ন-সংজ্ঞায়িত আচরণ


তাহলে আইবি ... ইন্টিগ্রেটেড ব্যারোমিটার? : পি
হতাশাগ্রস্থ

@ ফ্রাস্ট্রেটেড: আইবি সম্পর্কে নিশ্চিত ছিল না। গুগল এর জন্য ছিল। : পি
মিসিংফ্যাক্টর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.