প্রায় 10+ বছর আগে স্কুলে ফিরে তারা আপনাকে ব্যতিক্রম স্পেসিফায়ার ব্যবহার করতে শেখাচ্ছিল। যেহেতু আমার ব্যাকগ্রাউন্ড তাদের মধ্যে অন্যতম টরভাল্ডিশ সি প্রোগ্রামার যারা জেদী হয়ে সি ++ এড়িয়ে চলেন না, তবে আমি কেবল বিক্ষিপ্তভাবে সি ++ এ শেষ করি এবং যখনই আমি শেখানো হয়েছিল তখন থেকেই আমি ব্যতিক্রম স্পেসিফায়ার ব্যবহার করি।
তবে, বেশিরভাগ সি ++ প্রোগ্রামার ব্যতিক্রম স্পেসিফাইকারদের উপর নির্ভর করে বলে মনে হচ্ছে। আমি বিতর্ক এবং বিভিন্ন সি ++ গুরু থেকে যুক্তি পড়েছেন এই মত । যতদূর আমি এটি বুঝতে পারি, এটি তিনটি জিনিসে ফুটে উঠেছে:
- ব্যতিক্রম স্পেসিফায়াররা একটি টাইপ সিস্টেম ব্যবহার করে যা বাকী ভাষার ("ছায়ার ধরণের সিস্টেম") এর সাথে সঙ্গতিপূর্ণ নয়।
- যদি কোনও ব্যতিক্রম স্পেসিফায়ারযুক্ত আপনার ফাংশনটি আপনাকে নির্দিষ্ট করা ব্যতীত অন্য কোনও কিছু ফেলে দেয় তবে প্রোগ্রামটি খারাপ, অপ্রত্যাশিত উপায়ে সমাপ্ত হবে।
- ব্যতিক্রম স্পেসিফায়ারগুলি আসন্ন সি ++ স্ট্যান্ডার্ডে সরানো হবে।
আমি কি এখানে কিছু মিস করছি বা এই সমস্ত কারণ রয়েছে?
আমার নিজস্ব মতামত:
1) সম্পর্কিত: তাই কি। সি ++ হ'ল সিন্ট্যাক্স-বুদ্ধিমানভাবে তৈরি করা এখন পর্যন্ত সবচেয়ে বেমানান প্রোগ্রামিং ভাষা। আমাদের কাছে ম্যাক্রোগুলি, গোটো / লেবেল, অপরিজ্ঞাত- / অনির্ধারিত- / বাস্তবায়ন-সংজ্ঞায়িত আচরণের হর্ড (হোর্ড?), দুর্বল-সংজ্ঞায়িত পূর্ণসংখ্যার প্রকারগুলি, সমস্ত অন্তর্নিহিত ধরণের প্রচারের বিধি, বন্ধু, অটো-এর মতো বিশেষ ক্ষেত্রে কীওয়ার্ড রয়েছে , নিবন্ধন করুন, স্পষ্টত ... এবং আরও অনেক কিছু। কেউ সম্ভবত সি / সি ++ তে সমস্ত অদ্ভুততার কয়েকটি ঘন বই লিখতে পারে। তাহলে লোকেরা কেন এই বিশেষ অসঙ্গতির বিরুদ্ধে প্রতিক্রিয়া ব্যক্ত করছে, যা ভাষার আরও অনেক বিপজ্জনক বৈশিষ্ট্যের তুলনায় একটি সামান্য ত্রুটি?
2 সম্পর্কে): এটি কি আমার নিজের দায়িত্ব নয়? আমি সি ++ তে মারাত্মক বাগ লিখতে পারি এমন আরও অনেক উপায় আছে, কেন এই বিশেষ ক্ষেত্রে আরও খারাপ? throw(int)
ক্র্যাশ_টি লেখার পরে এবং ছুঁড়ে ফেলার পরিবর্তে আমিও দাবি করতে পারি যে আমার ফাংশনটি বিন্দুতে বিন্দু ফিরিয়ে দেয়, তারপরে একটি বন্য, স্পষ্ট স্পষ্ট টাইপকাস্ট তৈরি করে ক্র্যাশ_এটিতে একটি পয়েন্টার ফিরিয়ে দেয়। সি / সি ++ এর স্পিরিট সবসময়ই প্রোগ্রামারের উপর বেশিরভাগ দায়িত্ব রেখে চলেছে।
তারপরে সুবিধাগুলির কী হবে? সর্বাধিক সুস্পষ্ট হ'ল যদি আপনার ফাংশনটি আপনি নির্দিষ্ট করে ব্যতীত অন্য কোনও প্রকার স্পষ্টভাবে ছুঁড়ে ফেলার চেষ্টা করে তবে সংকলক আপনাকে একটি ত্রুটি দেবে। আমি বিশ্বাস করি যে এই (?) সম্পর্কিত মানটি পরিষ্কার। বাগগুলি কেবল তখনই ঘটবে যখন আপনার ফাংশনটি অন্য ফাংশনগুলিকে কল করে যা পরিবর্তিতভাবে ভুল ধরণের দেয়।
নির্বোধ, এমবেডেড সি প্রোগ্রামের জগত থেকে আসার পরে, আমি অবশ্যই নিশ্চিতভাবে জানতে চাই যে কোনও ফাংশন আমার কাছে কী নিক্ষেপ করবে। যদি ভাষাটিতে এমন কিছু সমর্থন করে থাকে তবে কেন এটি ব্যবহার করবেন না? বিকল্পগুলি মনে হয়:
void func() throw(Egg_t);
এবং
void func(); // This function throws an Egg_t
আমি মনে করি যে বড় মামলার সম্ভাবনা রয়েছে যে কলার দ্বিতীয় ক্ষেত্রে ট্রাই-ক্যাচ বাস্তবায়ন করতে অগ্রাহ্য / ভুলে যায়, প্রথম ক্ষেত্রে কম।
আমি এটি বুঝতে পেরেছি, এই দুটি ফর্মগুলির মধ্যে যে কোনও একটি হঠাৎ করে অন্য ধরণের ব্যতিক্রম ছুঁড়ে ফেলার সিদ্ধান্ত নিলে প্রোগ্রামটি ক্রাশ হয়ে যাবে। প্রথম ক্ষেত্রে কারণ এটি অন্য একটি ব্যতিক্রম নিক্ষেপ করার অনুমতি নেই, দ্বিতীয় ক্ষেত্রে কারণ এটি স্প্যানিশআইকুইকিউশন_t নিক্ষেপ করার জন্য কেউ প্রত্যাশা করেনি এবং তাই যেখানে প্রকাশ করা উচিত ছিল সেখানে অভিব্যক্তি ধরা পড়েনি।
পরবর্তী ক্ষেত্রে, প্রোগ্রামের সর্বোচ্চ স্তরে কিছু শেষ অবলম্বন ধরা (...) আসলে প্রোগ্রাম ক্রাশের চেয়ে ভাল বলে মনে হয় না: "আরে, আপনার প্রোগ্রামে কোথাও একটি অদ্ভুত, নিয়ন্ত্রণহীন ব্যতিক্রম ছুঁড়ে ফেলেছে । "। আপনি ব্যতিক্রম ছুঁড়ে ফেলেছিলেন এমন জায়গা থেকে একবার আপনি প্রোগ্রামটি পুনরুদ্ধার করতে পারবেন না, কেবলমাত্র আপনি যা করতে পারেন তা হল প্রোগ্রামটি থেকে বেরিয়ে আসা।
এবং ব্যবহারকারীর দৃষ্টিকোণ থেকে তারা "প্রোগ্রামটি সমাপ্ত করা হয়েছে। OSX এর ঠিকানায় ব্ল্যাব্লাবলা" বা আপনার প্রোগ্রামের একটি খারাপ বার্তা বাক্স "আনহানডেলড ব্যতিক্রম: মাইক্লাস" বলে ওএস থেকে কোনও খারাপ বার্তা বাক্স পেলে তারা কম যত্ন নিতে পারেন না। func.something "। বাগ এখনও আছে।
আসন্ন সি ++ স্ট্যান্ডার্ডের সাথে আমার কাছে ব্যতিক্রমের স্পেসিফায়ারগুলি ত্যাগ করা ছাড়া অন্য কোনও বিকল্প নেই। তবে "solidশ্বরের পবিত্রতা এটি বিবৃত করেছেন এবং এভাবে এটি হয়েছে" এর চেয়ে আমি কেন এগুলি খারাপ তা সম্পর্কে কিছু দৃ argument় যুক্তি শুনতে চাই। আমি যাদের তালিকাভুক্ত করেছি তার চেয়ে সম্ভবত তাদের বিরুদ্ধে আরও যুক্তি রয়েছে বা আমি বুঝতে পেরে তাদের পক্ষে আরও কিছু আছে?