Misra C++:2023

MISRA C++:2023, सुरक्षा‑महत्वपूर्ण एम्बेडेड प्रणालियों (विशेषकर ऑटोमोटिव) में C++17 के उपयोग के लिए एक भुगतान वाला दिशानिर्देश, इसके मूल्य, दायरे और व्यावहारिक प्रभाव पर बहस को जन्म देता है। टिप्पणीकार इसे C++ का एक अधिक कड़ा, सुरक्षित उपसमुच्चय बताते हैं जो 2008 संस्करण से बेहतर है और AUTOSAR C++14 के साथ संरेखित है, लेकिन आलोचकों का कहना है कि कुछ नियम प्रतिकूल हैं, ISO मानक से पीछे हैं, और मुख्यतः अनुपालन टूल्स के विक्रेताओं को लाभ देते हैं। चर्चा का बड़ा हिस्सा अपवाद प्रबंधन, डायनामिक मेमोरी, ISO 26262 जैसे मानकों के लिए टूल क्वालिफिकेशन, और नए नियमों का पूरी तरह समर्थन करने वाले ओपन‑सोर्स स्थैतिक विश्लेषकों की सीमित उपलब्धता पर केंद्रित है.

MISRA C++:2023 का अवलोकन

  • सुरक्षा‑संबंधी/महत्वपूर्ण प्रणालियों (विशेषकर ऑटोमोटिव/एम्बेडेड) में C++17 के उपयोग के लिए दिशानिर्देश।
  • परिभाषित करता है कि कौन-सी भाषा विशेषताएँ और प्रथाएँ अनुमत हैं, सीमित हैं, या निषिद्ध हैं, ताकि पूर्वानुमेयता, सुरक्षा और विश्वसनीयता बेहतर हो सके।
  • MISRA C++:2008 की तुलना में एक बड़ा सुधार माना जाता है और AUTOSAR C++14 से काफी प्रभावित है।

C++ मानकों और अन्य दिशानिर्देशों के साथ संबंध

  • C++17 को लक्षित करता है, भले ही नए C++ मानक मौजूद हों; टिप्पणीकारों का कहना है कि कई टूलचेन अभी भी उसके साथ तालमेल बिठा रहे हैं, इसलिए सुरक्षा‑महत्वपूर्ण संदर्भों में यह स्वीकार्य है।
  • अन्य कोडिंग मानकों की तुलना में: SEI CERT C को “X का सुरक्षित उपयोग कैसे करें” के रूप में वर्णित किया गया है, जबकि MISRA आम तौर पर खतरनाक APIs को निषिद्ध या बहुत कड़ाई से सीमित करता है।
  • कुछ लोग रॉयल्टी‑मुक्त विकल्पों (जैसे जापानी एम्बेडेड कोडिंग गाइड) की ओर इशारा करते हैं, लेकिन वे अधिकतर C‑केंद्रित हैं और C++ के लिए कम उपयोगी हैं।
  • एक दृष्टिकोण: ऐसे प्रत्येक दिशानिर्देश प्रभावी रूप से एक “उपसमुच्चय भाषा” परिभाषित करते हैं, जिससे C/C++ का विखंडन बढ़ता है।

टूलिंग, लाइसेंसिंग, और ओपन सोर्स

  • यह मानक पैसे खर्च करता है और एक खुला मानक नहीं है; कुछ लोगों का कहना है कि इससे FOSS टूलिंग हतोत्साहित होती है।
  • स्थैतिक विश्लेषण पारिस्थितिकी तंत्र मुख्यतः स्वामित्व वाले टूल्स के प्रभुत्व में है; बहुत कम ओपन टूल्स MISRA को अच्छी तरह समर्थन करते हैं।
  • ओपन‑सोर्स एनालाइज़र का उल्लेख (जैसे, NaiveSystems Analyze, Cppcheck, CodeQL-आधारित नियम) है, लेकिन कवरेज और संस्करण समर्थन पीछे रह सकते हैं या समुदाय तथा भुगतान वाले संस्करणों के बीच बँटे हो सकते हैं।

अपवाद, डायनामिक मेमोरी, और त्रुटि प्रबंधन

  • MISRA C++:2023 में डायनामिक मेमोरी निषिद्ध है; अपवाद आश्चर्यजनक रूप से अनुमत हैं और नियम अनुपालन के लिए अनुशंसित भी हैं।
  • बहस तेज है:
    • अपवाद‑समर्थक: बहु‑थ्रेडेड या बड़े सिस्टमों में त्रुटि प्रसार के लिए आवश्यक; RAII और invariants के साथ मदद करते हैं।
    • अपवाद‑विरोधी: एम्बेडेड के लिए समस्याजनक क्योंकि कोड आकार, प्रदर्शन, निर्धार्यता, और टूलचेन सीमाएँ; कई बड़े C++ प्रोजेक्ट और एम्बेडेड सिस्टम इन्हें अक्षम करते हैं।
  • अपवादों को बंद करना (-fno-exceptions) बाइनरी आकार कम कर सकता है, लेकिन यह मानक लाइब्रेरी के साथ बुरी तरह इंटरैक्ट करता है, जिससे संभावित UB या अनिर्दिष्ट std::terminate व्यवहार पर निर्भरता हो सकती है।

ऑटोमोटिव और सुरक्षा‑महत्वपूर्ण संदर्भ

  • MISRA आम तौर पर सुरक्षा‑महत्वपूर्ण ECUs (इंजन, ब्रेक, एयरबैग, आदि) पर लागू होती है, infotainment पर नहीं।
  • कुछ लोग ऑटोमोटिव सॉफ़्टवेयर की गुणवत्ता की आलोचना करते हैं, लेकिन अधिकांश सहमत हैं कि MISRA मुख्य समस्या नहीं है; प्रक्रिया, प्रबंधन, आउटसोर्सिंग, AUTOSAR, और जटिलता बड़ी समस्याएँ हैं।
  • टूल क्वालिफिकेशन और ISO 26262 अनुपालन प्रमुख बाधाएँ हैं; सुरक्षा‑महत्वपूर्ण कोड में मुख्यधारा के कंपाइलरों का उपयोग भारी दस्तावेज़ीकरण और परीक्षण माँगता है।

C++ बनाम “सुरक्षित भाषाएँ”

  • कुछ का तर्क है कि C++ की जटिलता और undefined behavior इसे मूल रूप से सुरक्षा के लिए अनुपयुक्त बनाते हैं, और Rust को “सुरक्षित C++” के रूप में सुझाते हैं।
  • अन्य लोग “Rust के लिए MISRA” जैसे विचार प्रस्तावित करते हैं और नोट करते हैं कि अधिक सुरक्षित भाषाओं में भी, शैलीगत दिशानिर्देश और उपसमुच्चय मूल्यवान होंगे।