ऑर्थोडॉक्स C++ (2016)
“ऑर्थोडॉक्स C++” पर समग्र प्रतिक्रिया
- कई लोगों को लेख सतही या सिद्धांतवादी लगता है: यह सूक्ष्म मार्गदर्शन या तर्क देने के बजाय निषेधों की सूची देता है।
- अन्य, खासकर गेम/एम्बेडेड पृष्ठभूमि वाले, कहते हैं कि यह लंबे समय से चली आ रही व्यावहारिक प्रथा को ही काफी हद तक दर्शाता है: छोटा subset, RTTI/exception नहीं, सीमित stdlib।
- कई लोग नोट करते हैं कि C++ स्वभाव से multi-paradigm है और हर गंभीर टीम पहले से ही अपना subset चुनती है; “orthodox” बस एक और flavor है।
C बनाम C++ और भाषा की जटिलता
- कुछ C प्रोग्रामर तर्क देते हैं कि C++ मानसिक बोझ बहुत बढ़ा देता है: C की तुलना में अधिक hidden behavior, lifetime rules, और “footguns”।
- अन्य जवाब देते हैं कि C में भी hidden complexity और UB की कमी नहीं है; C++ कम से कम stronger typing और बेहतर abstractions देता है।
- एक बार-बार आने वाला विषय: इंजीनियर domain problems हल करने में व्यस्त रहते हैं और हर नए C++ feature या version को ट्रैक नहीं करना चाहते।
Modern features: auto, range-for, RTTI, exceptions
autoके साथ range-based for को व्यापक रूप से readable और iterator boilerplate की तुलना में कम error-prone माना जाता है।- आलोचक कहते हैं कि
autocode reviews और diffs में types को अस्पष्ट कर देता है; समर्थक जवाब देते हैं कि type inference कई भाषाओं में standard है और IDEs इसे हल कर देते हैं। - RTTI और
dynamic_castपर रोक को कुछ लोग अनावश्यक मानते हैं; अन्य इसे code smell कहते हैं और performance/control के लिए manual या custom RTTI को पसंद करते हैं। - Exceptions बेहद विवादास्पद हैं:
- anti-exception पक्ष unpredictability, debugging में कठिनाई, determinism की चिंताएँ, और “यह function क्या throw कर सकता है?” जैसे अस्पष्ट contract का हवाला देता है।
- pro-exception पक्ष जोर देता है कि इन्हें केवल वास्तव में exceptional contract violations के लिए इस्तेमाल किया जाए, routine error handling के लिए नहीं।
Standard library, containers, और I/O
std::map,std::unordered_map,std::deque, और यहाँ तक किstd::vectorकी performance, cache behavior, concurrency, और awkward APIs के लिए कड़ी आलोचना की जाती है।- अन्य तर्क देते हैं कि वे वास्तविक दुनिया के विशाल कोड के लिए पूरी तरह पर्याप्त हैं; समस्याएँ मुख्यतः extreme high-throughput/low-latency contexts में आती हैं।
- iostreams को व्यापक रूप से नापसंद किया जाता है; कई लोग C-style
printfया नएfmt/<format>APIs को पसंद करते हैं। कुछ कहते हैं कि iostream से बचते हुए भी type-safe formatting का उपयोग करना ही समझदारी वाला मध्य मार्ग है।
Template metaprogramming और विकल्प
- कुछ लोग भारी template metaprogramming और functional styles का उत्सव मनाते हैं, खासकर नए
constexpr/consteval/conceptsके साथ, क्योंकि ये अनोखी शक्ति देते हैं। - अन्य compilation times और unreadable errors की शिकायत करते हैं, और संयमित उपयोग की वकालत करते हैं।
- Rust, Zig, Nim, D, और “better C” approaches जैसे विकल्प बार-बार सामने आते हैं; जहाँ चुनाव उपलब्ध हो, कई लोग कहते हैं कि वे C++ से पूरी तरह बचना चाहेंगे।