HeadlinesBriefing HeadlinesBriefing.com

C++26 কনট্র্যাক্ট: প্রি ও পোস্ট কন্ডিশন

Hacker News •
×

স্ট্যান্ডার্ড লাইব্রেরি হার্ডেনিং সংক্রান্ত নিবন্ধে আমরা দেখেছি যে লাইব্রেরির অনেক প্রয়োজনীয়তা "কনট্র্যাক্ট" হিসেবে প্রকাশ করা হয়। এই পোস্টে C++26-এর কনট্র্যাক্ট নিয়ে আলোচনা করা হয়েছে এবং কীভাবে সেগুলো আমাদের নিজস্ব কোডে প্রয়োগ করা যায় তা দেখানো হয়েছে।

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

P2900-এর মাধ্যমে প্রবর্তিত C++26 কনট্র্যাক্ট প্রয়োজনীয়তাটিকে ফাংশন সিগনেচারে নিয়ে যায়, প্যারামিটার তালিকার পরে বসানো pre(...) ক্লজের মাধ্যমে। এই প্রিকন্ডিশন বলে দেয় ফাংশনে প্রবেশের সময় কোন শর্তটি সত্য হওয়ার আশা করা হচ্ছে। একই প্রয়োজনীয়তা ডিক্লারেশনেও উপস্থিত থাকতে পারে, যাতে API পড়া যে কেউ তা দেখতে পায়। কনট্র্যাক্ট একাধিক মূল্যায়ন সিমান্টিক্স দেয়, যার মধ্যে পরীক্ষাটি উপেক্ষা করা, লঙ্ঘন রিপোর্ট করে এগিয়ে যাওয়া, বা প্রোগ্রাম বন্ধ করে দেওয়া অন্তর্ভুক্ত। কোনগুলো উপলব্ধ এবং কীভাবে নির্বাচন করা হবে তা কম্পাইলার ইমপ্লিমেন্টেশন নির্ধারণ করে।

কনট্র্যাক্ট আরও আলাদা করে দেখায় কলারকে কী সরবরাহ করতে হবে এবং ফাংশন কী ফেরত দেওয়ার প্রতিশ্রুতি দেয়। post দিয়ে প্রবর্তিত পোস্টকন্ডিশন প্রতিটি return স্টেটমেন্টের আগে ম্যানুয়াল পরীক্ষার প্রয়োজন ছাড়াই সেই প্রতিশ্রুতিগুলো প্রকাশ করে। ফলে রানটাইম পরীক্ষা বন্ধ থাকলেও কনট্র্যাক্ট API ডকুমেন্ট করতে কাজে আসে।

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

উৎস: Hacker News · সারাংশ: HeadlinesBriefing