গ্রন্থাগারগুলিতে কীভাবে ত্রুটি বা অন্যান্য ব্যতিক্রমী অবস্থার সাথে লড়াই করা উচিত সে সম্পর্কে বিভিন্ন সফটওয়্যার ইঞ্জিনিয়ারিং শাখায় অনেকগুলি দর্শন রয়েছে। আমি যেগুলি দেখেছি তাদের মধ্যে কয়েকটি:
- পয়েন্টার যুক্তি দিয়ে ফলাফলের সাথে একটি ত্রুটি কোডটি ফিরিয়ে দিন। পিইটিএসসি এটিই করে।
- একটি সেন্ডিনেল মান দ্বারা ত্রুটিগুলি ফিরিয়ে দিন। উদাহরণস্বরূপ, ম্যালোক NULL প্রদান করে যদি এটি মেমরি বরাদ্দ করতে না পারে,
sqrt
আপনি নেতিবাচক সংখ্যায় পাস করলে NaN ফিরিয়ে দেয় etc. ইত্যাদি approach - ব্যতিক্রম নিক্ষেপ। আই.আই, ত্রিলিনোস ইত্যাদিতে ব্যবহৃত হয়
- বৈকল্পিক প্রকারটি ফেরত দিন; উদাহরণস্বরূপ একটি সি ++ ফাংশন যা টাইপের কোনও অবজেক্টকে
Result
সঠিকভাবে চালিত করে এবংError
এটি কীভাবে ব্যর্থ হয়েছিল তা কীভাবে ফিরে আসবে তা বর্ণনা করতে কোনও প্রকার ব্যবহার করেstd::variant<Error, Result>
। - দৃsert়তা এবং ক্রাশ ব্যবহার করুন। P4est এবং ইগ্রাফের কিছু অংশে ব্যবহৃত হয়।
প্রতিটি পদ্ধতির সাথে সমস্যা:
- প্রতিটি ত্রুটির জন্য অনুসন্ধান করা অতিরিক্ত প্রচুর কোডের পরিচয় দেয়। যে মানগুলিতে ফলাফল সংরক্ষণ করা হবে সেগুলি সর্বদা প্রথমে ঘোষণা করতে হবে, প্রচুর অস্থায়ী ভেরিয়েবলগুলি প্রবর্তন করা হবে যা কেবল একবার ব্যবহার করা যেতে পারে। এই পদ্ধতির ব্যাখ্যায় কী ত্রুটি ঘটেছে তা ব্যাখ্যা করা হয়েছে তবে কেন বা একটি গভীর কল স্ট্যাকের জন্য, কোথায় তা নির্ধারণ করা কঠিন hard
- ত্রুটি কেস উপেক্ষা করা সহজ। সর্বোপরি, আউটপুট প্রকারের পুরো পরিসীমা যদি একটি ফলস্বরূপ ফলাফল হয় তবে অনেকগুলি ক্রিয়াকলাপের কাছে একটি অর্থবহ প্রেরণিকা মানও থাকতে পারে না। # 1 হিসাবে একই সমস্যা অনেক।
- কেবল সি ++, পাইথন ইত্যাদিতেই সম্ভব, সি বা ফোর্টরানে নয়। সিটজ্যাম্প / লংজ্যাম্প জাদু বা লাইবুনউইন্ড ব্যবহার করে সিতে নকল করা যায় ।
- কেবল সি ++, মরিচা, ওক্যামেল ইত্যাদিতেই সম্ভব, সি বা ফোর্টরানে নয়। ম্যাক্রো যাদুবিদ্যার সাহায্যে সি তে নকল করা যায়।
- তর্কযুক্তভাবে সবচেয়ে তথ্যবহুল। তবে আপনি যদি সি সি লাইব্রেরির জন্য এই পদ্ধতিটি অবলম্বন করেন তবে আপনি পাইথন মোড়কের জন্য লিখেছেন, অ্যারির বাইরে সীমানা সূচকটি পাস করার মতো মূর্খ ভুলটি পাইথন ইন্টারপ্রেটারকে ক্র্যাশ করবে।
ত্রুটি-পরিচালনা সম্পর্কে ইন্টারনেটে বেশিরভাগ পরামর্শ অপারেটিং সিস্টেম, এমবেডড ডেভলপমেন্ট বা ওয়েব অ্যাপ্লিকেশনগুলির দৃষ্টিকোণ থেকে লেখা। ক্র্যাশগুলি অগ্রহণযোগ্য এবং আপনাকে সুরক্ষা সম্পর্কে চিন্তা করতে হবে। বৈজ্ঞানিক অ্যাপ্লিকেশনগুলিতে প্রায় একই পরিমাণে এই সমস্যাগুলি নেই if
আর একটি বিবেচনা হ'ল কী ধরণের ত্রুটিগুলি পুনরুদ্ধারযোগ্য। কোনও ম্যালোক ব্যর্থ পুনরুদ্ধারযোগ্য নয় এবং কোনও অবস্থাতেই, ওএস-অফ-মেমরির কিলার এটি করার আগে এটি পেয়ে যাবে। একটি অ্যারের আকারের সীমা ছাড়িয়ে একটি সূচকও পুনরুদ্ধারযোগ্য নয়। ব্যবহারকারী হিসাবে আমার জন্য, গ্রন্থাগারটি করতে পারে এমন সর্বোত্তম জিনিসটি একটি তথ্যবহুল ত্রুটির বার্তাটি ক্রাশ করা। অন্যদিকে, বলার ব্যর্থতা, রূপান্তরকরণের একটি পুনরাবৃত্ত লিনিয়ার সলভার প্রত্যক্ষ ফ্যাক্টেরাইজেশন সলভার ব্যবহার করে পুনরুদ্ধার করা যেতে পারে।
কীভাবে বৈজ্ঞানিক গ্রন্থাগারগুলির ত্রুটিগুলি প্রতিবেদন করা উচিত এবং সেগুলি পরিচালিত হওয়ার আশা করা উচিত? আমি অবশ্যই উপলব্ধি করেছি যে এটি গ্রন্থাগারটি কোন ভাষায় প্রয়োগ করা হয়েছে তার উপর নির্ভর করে But তবে যতদূর আমি বলতে পারি যে কোনও কার্যকর লাইব্রেরির জন্য লোকেরা এটি প্রয়োগ করা ভাষা ছাড়া অন্য কোনও ভাষা থেকে কল করতে চাইবে।
একদিকে যেমন, আমি মনে করি যে সি 5 লাইব্রেরির জন্য # 5 পদ্ধতির উন্নতি করা যেতে পারে যদি এটি জনসাধারণের API এর অংশ হিসাবে বিশ্বব্যাপী দৃser় হ্যান্ডলার ফাংশন পয়েন্টারটিকে সংজ্ঞায়িত করে। দৃ hand় হ্যান্ডলারটি ফাইল / লাইন নম্বর এবং ক্র্যাশিংয়ের প্রতিবেদন করতে ডিফল্ট হবে। এই লাইব্রেরির জন্য সি ++ বাইন্ডিংগুলি একটি নতুন দৃ hand় হ্যান্ডলার সংজ্ঞায়িত করবে যা পরিবর্তে একটি সি ++ ব্যতিক্রম ছোঁড়ে। তেমনি পাইথন বাইন্ডিংগুলি এমন একটি দৃ as় হ্যান্ডলারের সংজ্ঞা দেয় যা পাইথন ব্যতিক্রম ছুঁড়ে সিপিথন এপিআই ব্যবহার করে। তবে এই পদ্ধতির গ্রহণযোগ্য কোনও উদাহরণ আমি জানি না।