সি ++ প্রোগ্রামাররা ব্যতিক্রমের নির্দিষ্টকরণের সন্ধান করে না। তারা ব্যতিক্রম গ্যারান্টি জন্য সন্ধান করুন।
ধরুন কোনও অংশের কোড ব্যতিক্রম করেছে throw প্রোগ্রামার কী অনুমানগুলি এখনও বৈধ হতে পারে? কোডটি যেভাবে লেখা হচ্ছে, তার ব্যতিক্রমের পরে কোড কী গ্যারান্টি দেয়?
অথবা এটি কি সম্ভব যে কোনও নির্দিষ্ট কোডের গ্যারান্টি দিতে পারে না যে তারা কখনই ছোঁড়াবে না (যেমন ওএস প্রক্রিয়াটি সমাপ্ত হচ্ছে না)?
"রোল ব্যাক" শব্দটি ব্যতিক্রম সম্পর্কে আলোচনায় প্রায়শই ঘটে। কোনও বৈধ অবস্থায় ফিরে যেতে সক্ষম হওয়া (এটি স্পষ্টভাবে ডকুমেন্টেড) ব্যতিক্রম গ্যারান্টির একটি উদাহরণ। যদি কোনও ব্যতিক্রমের গ্যারান্টি না থাকে তবে একটি প্রোগ্রাম ঘটনাস্থলে সমাপ্ত হতে হবে কারণ এটির গ্যারান্টিও নেই যে এরপরে এটি কার্যকর করে এমন কোনও কোড ইচ্ছাপূর্নভাবে কাজ করবে - বলুন, স্মৃতি যদি দূষিত হয়ে থাকে তবে পরবর্তী কোনও ক্রিয়াকলাপ প্রযুক্তিগতভাবে অপরিজ্ঞাত আচরণ।
বিভিন্ন সি ++ প্রোগ্রামিং কৌশল ব্যতিক্রম গ্যারান্টি প্রচার করে। আরআইআইআই (স্কোপ-ভিত্তিক রিসোর্স ম্যানেজমেন্ট) ক্লিনআপ কোড কার্যকর করতে এবং সাধারণ ক্ষেত্রে এবং ব্যতিক্রমী ক্ষেত্রে উভয় ক্ষেত্রেই রিসোর্সগুলি মুক্তি পেয়েছে তা নিশ্চিত করার একটি ব্যবস্থা সরবরাহ করে। অবজেক্টগুলিতে পরিবর্তনগুলি সম্পাদন করার আগে ডেটার একটি অনুলিপি তৈরি করা যদি অপারেশন ব্যর্থ হয় তবে তাকে সেই অবজেক্টের অবস্থা পুনরুদ্ধার করতে দেয়। ইত্যাদি।
এই স্ট্যাকওভারফ্লো প্রশ্নের উত্তরগুলি সি -++ প্রোগ্রামারদের তাদের কোডের সাথে সংঘটিত সমস্ত সম্ভাব্য ব্যর্থতা মোডগুলি বুঝতে এবং ব্যর্থতা সত্ত্বেও প্রোগ্রামের রাষ্ট্রের বৈধতা রক্ষা করার চেষ্টা করে to সি ++ কোডের লাইন বাই লাইন বিশ্লেষণ একটি অভ্যাসে পরিণত হয়।
সি ++ (উত্পাদন ব্যবহারের জন্য) এ বিকাশ করার সময়, কেউ বিশদটি গ্লস করতে পারে না। এছাড়াও, বাইনারি ব্লব (নন-ওপেন সোর্স) হ'ল সি ++ প্রোগ্রামারদের নিষিদ্ধকরণ। যদি আমাকে কিছু বাইনারি ব্লব কল করতে হয় এবং ব্লবটি ব্যর্থ হয়, তবে বিপরীত ইঞ্জিনিয়ারিং হ'ল একটি সি ++ প্রোগ্রামার কী করবে।
তথ্যসূত্র: http://en.cppreferences.com/w/cpp/language/exception#Exception_safety - ব্যতিক্রম সুরক্ষার অধীনে দেখুন।
ব্যতিক্রমীকরণের উল্লেখগুলি কার্যকর করতে সি ++ এর একটি ব্যর্থ প্রচেষ্টা ছিল। পরে অন্যান্য ভাষায় বিশ্লেষণ বলে যে ব্যতিক্রম সংক্রান্ত নির্দিষ্টকরণগুলি কেবল ব্যবহারিক নয়।
কেন এটি একটি ব্যর্থ প্রচেষ্টা: কঠোরভাবে এটি প্রয়োগ করতে, এটি টাইপ সিস্টেমের অংশ হতে হবে। তবে তা নয়। সংকলক ব্যতিক্রম নির্দিষ্টকরণের জন্য পরীক্ষা করে না।
সি ++ কেন এটি বেছে নিয়েছে এবং কেন অন্য ভাষা (জাভা) এর অভিজ্ঞতা প্রমাণ করে যে ব্যতিক্রমের স্পেসিফিকেশনটি মোট: এক হিসাবে কোনও ফাংশনের বাস্তবায়ন সংশোধন করা হয় (উদাহরণস্বরূপ, এটি একটি নতুন ফাংশনে কল করতে হবে যা একটি নতুন ধরণের নিক্ষেপ করতে পারে ব্যতিক্রম), একটি কঠোর ব্যতিক্রম স্পেসিফিকেশন প্রয়োগকারী মানে আপনাকে সেই স্পেসিফিকেশনটিও আপডেট করতে হবে। এটি প্রচার করে - সাধারণ পরিবর্তন কীসের জন্য আপনি কয়েক ডজন বা কয়েকশ ফাংশনের ব্যতিক্রম স্পেসিফিকেশন আপডেট করতে পারেন। বিমূর্ত বেস ক্লাসগুলির জন্য বিষয়গুলি আরও খারাপ হয়ে যায় (সি ++ ইন্টারফেসের সমতুল্য)। ইন্টারফেসে যদি ব্যতিক্রমের স্পেসিফিকেশন প্রয়োগ করা হয়, তবে ইন্টারফেসের বাস্তবায়নগুলিকে বিভিন্ন ধরণের ব্যতিক্রম ছুঁড়ে ফাংশনগুলিতে কল করার অনুমতি দেওয়া হবে না।
তথ্যসূত্র: http://www.gotw.ca/publications/mill22.htm
সি ++ 17 দিয়ে শুরু হচ্ছে [[nodiscard]]
বৈশিষ্ট্যটি ফাংশন রিটার্ন মানগুলিতে ব্যবহার করা যেতে পারে (দেখুন: https://stackoverflow.com -চেনা-করা-উপেক্ষা )।
সুতরাং যদি আমি একটি কোড পরিবর্তন করি এবং এটি একটি নতুন ধরণের ব্যর্থতার শর্ত (যেমন একটি নতুন ধরণের ব্যতিক্রম) উপস্থাপন করে, তবে এটি কি একটি ব্রেকিং পরিবর্তন? ফোন কলকারীকে কোডটি আপডেট করতে বাধ্য করা উচিত ছিল, বা কমপক্ষে পরিবর্তনের বিষয়ে সতর্ক করা উচিত?
আপনি যদি যুক্তিগুলি গ্রহণ করেন যে সি ++ প্রোগ্রামাররা ব্যতিক্রমের নির্দিষ্টকরণের পরিবর্তে ব্যতিক্রম গ্যারান্টির সন্ধান করে, তবে উত্তরটি হ'ল যদি নতুন ধরণের ব্যর্থতা শর্তটি ব্যতিক্রম না করে তবে পূর্বের প্রতিশ্রুতি কোডের গ্যারান্টি দেয়, এটি কোনও ব্রেকিং পরিবর্তন নয়।