C++ का नया रिलीज़ जारी: प्रोग्रामिंग भाषा में क्या बदला
C++ मानकीकरण के लिए अंतर्राष्ट्रीय समिति (ISO/IEC JTC1/SC22/WG21) ने आधिकारिक तौर पर मानक के अगले संस्करण — C++23 को मंजूरी दे दी है। यह रिलीज़ लंबे समय से प्रतीक्षित सुधार लाता है, जो भाषा को सिस्टम और एप्लिकेशन सॉफ्टवेयर दोनों के विकास के लिए अधिक सुरक्षित, अभिव्यंजक और सुविधाजनक बनाता है। हम सबसे महत्वपूर्ण नवाचारों के बारे में बता रहे हैं।
C++23 में मुख्य बदलाव
1. std::print — बिना अतिरिक्त प्रयास के फ़ॉर्मेटेड आउटपुट
सबसे उल्लेखनीय विशेषताओं में से एक std::print फ़ंक्शन का आगमन है। अब मानक स्ट्रीम में आउटपुट के लिए std::cout के साथ भारी निर्माण लिखने या टाइप त्रुटियों के जोखिम के साथ printf का उपयोग करने की आवश्यकता नहीं है। std::print टाइप-सुरक्षा और पठनीयता सुनिश्चित करते हुए std::format पर आधारित है:
- संख्याओं, स्ट्रिंग्स और उपयोगकर्ता-परिभाषित प्रकारों का स्वचालित फ़ॉर्मेटिंग।
- लोकेल और Unicode के लिए समर्थन।
- गति
printfके करीब है, लेकिन मेमोरी लीक के बिना।
2. कोरूटीन के साथ बेहतर कार्य
C++20 में पहली बार दिखाई देने वाले कोरूटीन को कई सुधार और परिवर्धन प्राप्त हुए हैं। C++23 में एसिंक्रोनस फ़ंक्शंस घोषित करने के सिंटैक्स को सरल बनाया गया है, साथ ही std::generator के लिए समर्थन जोड़ा गया है — मौके पर मानों के अनुक्रम बनाने के लिए एक नया प्रकार:
- जनरेटर मैन्युअल स्थिति प्रबंधन के बिना आलसी गणना लिखने की अनुमति देते हैं।
- कोरूटीन के साथ काम करने के लिए बॉयलरप्लेट कोड की मात्रा कम हो गई है।
3. मॉड्यूल — स्थिरता और प्रदर्शन
हालाँकि मॉड्यूल C++20 में पेश किए गए थे, लेकिन कंपाइलरों में उनका कार्यान्वयन वांछित होने के लिए बहुत कुछ छोड़ गया। नए मानक में निर्यात और आयात के नियमों को स्पष्ट किया गया है, जिसके परिणामस्वरूप:
- बड़ी परियोजनाओं के संकलन समय में 2-3 गुना तक की कमी।
- हेडर फ़ाइलों के साथ पूर्ण संगतता (हाइब्रिड मोड)।
- मानक पुस्तकालय के लिए मॉड्यूल बनाने की क्षमता (प्रयोगात्मक रूप से)।
4. constexpr और consteval की नई क्षमताएँ
स्थिर अभिव्यक्तियों के संदर्भ का विस्तार C++ के विकास के मुख्य लक्ष्यों में से एक है। C++23 में constexpr का उपयोग इसके लिए अनुमत है:
- डायनामिक मेमोरी आवंटन (
std::vectorऔरstd::string)। - वर्चुअल फ़ंक्शंस को कॉल करना।
- सटीकता खोए बिना फ़्लोटिंग पॉइंट के साथ कार्य करना।
यह संकलन चरण में अधिक से अधिक गणना करने की अनुमति देता है, जिससे runtime में तेजी आती है।
5. विशेषता [[assume]] — ऑप्टिमाइज़र के लिए संकेत
नई विशेषता [[assume(अभिव्यक्ति)]] कंपाइलर को सूचित करती है कि कोड में दिए गए बिंदु पर अभिव्यक्ति सत्य है। यह देता है:
- अधिक आक्रामक ऑप्टिमाइज़ेशन (शाखाओं को हटाना, लूप फोल्डिंग)।
- महत्वपूर्ण वर्गों (गेम इंजन, एम्बेडेड) में प्रदर्शन में वृद्धि।
6. मल्टीथ्रेडिंग का सरलीकरण
सिंक्रनाइज़ेशन के लिए नए प्रकार जोड़े गए हैं: बेहतर प्रदर्शन के साथ std::counting_semaphore और एकल-उपयोग बैरियर के लिए std::latch। इसके अलावा, std::mdspan