সি ++ টেম্পলেটগুলি দীর্ঘ, অপঠনযোগ্য ত্রুটি বার্তা উত্পন্ন করার জন্য কুখ্যাত। সি ++ তে টেমপ্লেট ত্রুটি বার্তাগুলি কেন এত খারাপ তা আমার একটি সাধারণ ধারণা। মূলত, সমস্যাটি হ'ল ত্রুটিটি ট্রিগার করা হয় না যতক্ষণ না সংকলক সংশ্লেষের মুখোমুখি হয় যা কোনও টেম্পলেটে নির্দিষ্ট ধরণের দ্বারা সমর্থিত নয়। উদাহরণ স্বরূপ:
template <class T>
void dosomething(T& x) { x += 5; }
যদি T
সমর্থন করে না +=
অপারেটর, কম্পাইলার একটি ত্রুটির বার্তা উত্পন্ন করবে। এবং যদি এটি কোনও লাইব্রেরির অভ্যন্তরে গভীরভাবে ঘটে থাকে তবে ত্রুটি বার্তাটি কয়েক হাজার লাইন দীর্ঘ হতে পারে।
তবে সি ++ টেমপ্লেটগুলি মূলত সংকলন-সময় হাঁসের টাইপিংয়ের একটি প্রক্রিয়া। সি ++ টেম্পলেট ত্রুটিটি রানটাইম টাইপের ত্রুটির সাথে ধারণার তুলনায় খুব একই রকম যা পাইথনের মতো গতিশীল ভাষায় হতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত পাইথন কোডটি বিবেচনা করুন:
def dosomething(x):
x.foo()
এখানে, যদি x
কোনও foo()
পদ্ধতি না থাকে , পাইথন দোভাষী তার একটি ব্যতিক্রম ছুঁড়ে ফেলে, এবং সমস্যাটিকে ইঙ্গিত করে এমন একটি পরিষ্কার স্পষ্ট ত্রুটি বার্তা সহ একটি স্ট্যাক ট্রেস প্রদর্শন করে। এমনকি যদি অনুবাদকরা কিছু লাইব্রেরি ফাংশনের অভ্যন্তরে গভীরতা না পাওয়া পর্যন্ত ত্রুটিটি ট্রিগার না করা হয় তবে রানটাইম-ত্রুটি বার্তাটি এখনও সাধারণ সি ++ সংকলক দ্বারা অপঠনযোগ্য বমি হিসাবে বানানো খারাপের কাছাকাছি কোথাও নেই। তাহলে কেন একটি সি ++ সংকলক ভুল হয়েছে তা সম্পর্কে আরও পরিষ্কার হতে পারে না? কিছু সি ++ টেমপ্লেট ত্রুটি বার্তাগুলি কেন আমার কনসোল উইন্ডোকে 5 সেকেন্ডের জন্য স্ক্রোল করে দেয়?
clang++
উইঙ্ক উইঙ্ক)।