अपनी स्थापना के बाद से, सी ++ प्रदर्शन-गहन अनुप्रयोगों के निर्माण के लिए प्रमुख विकल्प रहा है। लेकिन भाषा में अभी भी "समिति द्वारा डिजाइन" के कारण कुछ पुरानी प्रथाएं हैं।

19 जुलाई, 2022 को टोरंटो में CPP North C++ सम्मेलन के दौरान, Google इंजीनियर चांडलर कारुथ ने कार्बन पेश किया।

पता लगाएँ कि कार्बन क्या है और यह कैसे C++ को सफल बनाने का इरादा रखता है।

कार्बन क्या है?

Google इंजीनियरों ने विकसित किया कार्बन प्रोग्रामिंग भाषा C++ की कमियों को दूर करने के लिए।

कई मौजूदा गोलांग. जैसी भाषाएं और जंग पहले से ही मौजूद है जो सी ++ के प्रदर्शन को इसकी कमियों के बिना दर्पण करता है। दुर्भाग्य से, ये भाषाएं मौजूदा C++ कोडबेस के माइग्रेशन में महत्वपूर्ण बाधाएं पेश करती हैं।

कार्बन का लक्ष्य है जावास्क्रिप्ट के लिए टाइपस्क्रिप्ट क्या है, और कोटलिन जावा के लिए है। यह एक प्रतिस्थापन नहीं है, लेकिन सी ++ के साथ इंटरऑपरेबिलिटी के आसपास डिज़ाइन की गई उत्तराधिकारी भाषा है। इसका उद्देश्य मौजूदा कोडबेस और डेवलपर्स के लिए बड़े पैमाने पर अपनाना और माइग्रेशन करना है।

कार्बन की मुख्य विशेषताएं

कार्बन की कुछ प्रमुख विशेषताओं में C++ इंटरऑपरेबिलिटी, आधुनिक जेनरिक और मेमोरी सुरक्षा शामिल हैं।

C++ के साथ इंटरऑपरेबिलिटी

कार्बन का लक्ष्य सी ++ डेवलपर्स के लिए एक मानक, भाषा निर्माण के सुसंगत सेट के साथ एक सौम्य सीखने की अवस्था प्रदान करना है।

उदाहरण के लिए, यह सी ++ कोड लें:

// सी ++:
#शामिल
#शामिल
#शामिल
#शामिल

structघेरा {
पानी पर तैरना आर;
};

शून्यPrintTotalArea(कक्षा::अवधि मंडलियां){
पानी पर तैरना क्षेत्र = 0;

के लिये (स्थिरांक सर्कल और सी: सर्कल) {
क्षेत्र += M_PI * c.r * c.r;
}

कक्षा::अदालत << "कुल क्षेत्रफल:" << क्षेत्र << एंडली;
}

ऑटोमुख्य(पूर्णांक आर्गसी, चारो**आर्गव) ->; पूर्णांक {
कक्षा::वेक्टर मंडलियां = {{1.0}, {2.0}};

// निहित रूप से `वेक्टर` से `स्पैन` का निर्माण करता है।
PrintTotalArea (मंडलियां);
वापसी0;
}

कार्बन में अनुवादित, यह बन जाता है:

// कार्बन:
पैकेट ज्यामिति एपीआई;
आयातगणित;

कक्षाघेरा{
वर आर: एफ 32;
}

एफएन PrintTotalArea(मंडलियां: स्लाइस (सर्कल)) {
वर क्षेत्र: f32 = 0;

के लिए (सी: सर्कल में सर्कल) {
क्षेत्र += गणित.पीआई * सीआर * सीआर;
}

प्रिंट ("कुल क्षेत्रफल: {0}", क्षेत्र);
}

एफएन मुख्य() ->; i32 {
// एक गतिशील रूप से आकार की सरणी, जैसे `std:: वेक्टर`।
वर मंडलियां: सरणी(सर्कल) = ({.r = 1.0}, {.r = 2.0});

// स्पष्ट रूप से `ऐरे` से `स्लाइस` का निर्माण करता है।
PrintTotalArea (मंडलियां);
वापसी0;
}

आप किसी एप्लिकेशन के भीतर एकल C++ लाइब्रेरी को कार्बन में माइग्रेट कर सकते हैं या मौजूदा C++ कोड के शीर्ष पर नया कार्बन कोड जोड़ सकते हैं। उदाहरण के लिए:

// C++ कोड कार्बन और C++ दोनों में प्रयोग किया जाता है:
structघेरा {
पानी पर तैरना आर;
};

// कार्बन सी ++ के लिए एक फ़ंक्शन को उजागर करता है:
पैकेज ज्यामिति एपीआई;
आयात सीपीपी पुस्तकालय "घेरा।एच";
आयात गणित;

एफएन PrintTotalArea(मंडलियां: स्लाइस (सीपीपी। घेरा)){
वर क्षेत्र: f32 = 0;

के लिये (सी: सीपीपी। मंडलियों में मंडल) {
क्षेत्र + = गणित। पाई * सीआर * सीआर;
}

प्रिंट ("कुल क्षेत्रफल: {0}", क्षेत्र);
}

// सी ++ कॉलिंग कार्बन:
#शामिल
#शामिल "सर्कल एच"
#शामिल "ज्यामिति.कार्बन.एच"

ऑटोमुख्य(पूर्णांक आर्गसी, चारो**आर्गव) ->; पूर्णांक {
कक्षा::वेक्टर मंडलियां = {{1.0}, {2.0}};

// कार्बन का `स्लाइस` `std:: वेक्टर` से निहित निर्माण का समर्थन करता है,
// `एसटीडी:: स्पैन` के समान।
ज्यामिति:: PrintTotalArea (मंडलियां);
वापसी0;
}

एक आधुनिक जेनरिक प्रणाली

कार्बन जाँच परिभाषाओं के साथ एक आधुनिक जेनरिक प्रणाली प्रदान करता है। लेकिन यह अभी भी निर्बाध C++ इंटरऑपरेबिलिटी के लिए ऑप्ट-इन टेम्प्लेट का समर्थन करता है।

यह जेनरिक प्रणाली C++ टेम्पलेट्स को बहुत सारे लाभ प्रदान करती है:

  • सामान्य परिभाषाओं के लिए टाइप-चेक। यह प्रत्येक तात्कालिकता के लिए परिभाषाओं की पुन: जाँच की संकलन-समय लागत से बचा जाता है।
  • मजबूत, चेक किए गए इंटरफेस। ये कार्यान्वयन विवरण पर आकस्मिक निर्भरता को कम करते हैं और एक अधिक स्पष्ट अनुबंध बनाते हैं।

मेमोरी सुरक्षा

कार्बन स्मृति सुरक्षा को संबोधित करना चाहता है, जो C++ से ग्रस्त एक प्रमुख मुद्दा है:

  • प्रारंभिक अवस्थाओं को बेहतर तरीके से ट्रैक करना, आरंभीकरण के प्रवर्तन को बढ़ाना, और आरंभीकरण बग के खिलाफ सख्त होना।
  • डिबग और कठोर बिल्ड में गतिशील सीमा जांच का समर्थन करने के लिए मौलिक एपीआई और मुहावरों को डिजाइन करना।
  • डिफ़ॉल्ट डिबग बिल्ड मोड होना जो C++ के मौजूदा बिल्ड मोड की तुलना में अधिक व्यापक है।

कार्बन के साथ शुरुआत करना

आप कोडबेस की जाँच करके और कार्बन एक्सप्लोरर का उपयोग करके अभी कार्बन का पता लगा सकते हैं:

# Homebrew का उपयोग करके बेज़ेलिस्क स्थापित करें।
$ काढ़ा बेज़ेलिस्क स्थापित करें

# होमब्रे का उपयोग करके क्लैंग / एलएलवीएम स्थापित करें।
# कई क्लैंग/एलएलवीएम रिलीज़ उन विकल्पों के साथ नहीं बने हैं जिन पर हम भरोसा करते हैं।
$ काढ़ा llvm. स्थापित करें
$ निर्यात करना पथ = "$ (काढ़ा - उपसर्ग llvm) / बिन:${पथ}"

# कार्बन का कोड डाउनलोड करें।
$ git क्लोन https://github.com/carbon-language/carbon-lang
$ सीडी कार्बन-लैंग

# एक्सप्लोरर बनाएं और चलाएं।
$ bazel रन //एक्सप्लोरर -- ./explorer/testdata/प्रिंट/format_only.carbon

कार्बन का रोडमैप दीर्घकालिक सोच को प्रकट करता है

कार्बन रोडमैप के अनुसार, Google 2022 के अंत तक एक कोर वर्किंग वर्जन (0.1) जारी करने के साथ प्रयोग को सार्वजनिक करेगा। वे 2023 में 0.2 संस्करण और 2024-2025 में पूर्ण 1.0 रिलीज के साथ इसका पालन करने की योजना बना रहे हैं।

क्या Google अपनी अन्य भाषाओं, गोलंग और कोटलिन की सफलता को पुन: पेश करने में सक्षम होगा, यह देखा जाना बाकी है।