सामग्री पर जाएँ
Topos Uranos

सारांश

यह पाठ पाठ्यक्रम की पहली इकाई को पूरा करता है, जो C++ में प्रोग्रामिंग के पहले कदमों को समर्पित है। यह अवधारणाओं की उस शृंखला को फिर से गढ़ता है जो विनिर्दिष्ट समस्या से चलकर, एल्गोरिदम, स्रोत कोड, कंपाइलेशन और लिंकिंग, एक्ज़ीक्यूटेबल फ़ाइल और प्रोग्राम के बाहरी दुनिया से संवाद से होते हुए, प्रकट होने के क्षण के अनुसार वर्गीकृत त्रुटि तक पहुँचती है; इन सबमें से जो किसी भी भाषा में लागू होता है उसे C++ की अपनी विशेषताओं से अलग करता है; इकाई में दिखे अपरिभाषित व्यवहार को और उससे निकलने वाले पाठ्यक्रम के नियम को एक जगह रखता है, यानी हमेशा चेतावनियों के साथ कंपाइल करना और विकास के दौरान डिटेक्टरों (sanitizers) के साथ भी; अपने समापन मूल्यांकन में प्रवेश मूल्यांकन के कौशल दोहराता है; और छह चुनौतियों के साथ समाप्त होता है जो पूरी इकाई को जोड़ती हैं: सबसे कम सिक्कों में छुट्टा लौटाना, बिना लूप के संरेखित तालिका, पाँच श्रेणियों के पाँच दोषों वाला प्रोग्राम, आउटपुट बफ़र पर एक प्रयोग, नियत फ़ॉर्मैट में एक तारीख, और किसी ऐसे व्यक्ति को कंपाइलर समझाना जो केवल इंटरप्रेटेड भाषा जानता है।

अधिगम उद्देश्य

  1. बिना सहायता के समस्या के कथन से चलाए गए प्रोग्राम तक का रास्ता तय करना: विनिर्दिष्ट करना, एल्गोरिदम लिखना, उसे हाथ से चलाना, उसे C++ में लिखना, पाठ्यक्रम के विकल्पों के साथ कंपाइल करना, चलाना और उसका परिणाम जाँचना।
  2. समझाना कि उस रास्ते के हर चरण पर कौन-सा टूल काम करता है (संपादक, प्रीप्रोसेसर, कंपाइलर, लिंकर, डिटेक्टर) और हर एक क्या लेता है और क्या सौंपता है।
  3. किसी त्रुटि की श्रेणी (कंपाइल त्रुटि, लिंक त्रुटि, रनटाइम त्रुटि या तार्किक त्रुटि) उसके प्रकट होने के ढंग से पहचानना, और कई त्रुटियों को उसी क्रम में ठीक करना जिसमें वे सामने आती हैं।
  4. एक उदाहरण से समझाना कि अपरिभाषित व्यवहार क्या है और पाठ्यक्रम चेतावनियों और डिटेक्टरों के साथ क्यों कंपाइल करता है।
  5. इकाई में सीखी गई बातों में से जो किसी भी भाषा में लागू होता है उसे C++ की अपनी विशेषताओं से अलग करना।

इकाई की उपलब्धियाँ

इस इकाई का लक्ष्य था कि जिसने कभी प्रोग्रामिंग नहीं की, उसे रोज़मर्रा की भाषा में कही गई समस्या से एक ऐसे प्रोग्राम तक ले जाया जाए जो कंपाइल होता है, चलता है, डेटा पढ़ता है और परिणाम लिखता है, और साथ ही यह पता रहे कि रास्ते में हर टूल ने क्या किया। इकाई ने यह केवल उन बातों के सहारे किया जिन्हें परिचय ने ज्ञात माना था: स्कूली अंकगणित, लिखित निर्देशों का पालन करने की आदत, और फ़ाइलों तथा फ़ोल्डरों को सँभालना।

समस्या से एल्गोरिदम तक

पाठ समस्या से एल्गोरिदम तक ने स्थापित किया कि एक समस्या अपने विनिर्देश से तय होती है, जो एक अनुबंध है: वह पूर्व-शर्त पूरी करने वाले हर इनपुट के लिए पश्च-शर्त का वादा करता है, और उसके बाहर किसी चीज़ का नहीं। एल्गोरिदम एक परिमित, सुनिश्चित और व्यापक प्रक्रिया है, जो क्रमांकित चरणों में लिखी जाती है, ट्रेस तालिका से हाथ से चलाई जाती है और अनुक्रम, निर्णय और पुनरावृत्ति से बनती है; हर पुनरावृत्ति के साथ एक वैरिएंट होता है, यानी एक प्राकृत राशि जो हर चक्कर में घटती है और गारंटी देती है कि पुनरावृत्ति समाप्त होगी।

प्रोग्राम, कंपाइलर और C++

पाठ प्रोग्राम, कंपाइलर और C++ ने दिखाया कि C++ प्रोग्राम का टेक्स्ट जैसा है वैसा नहीं चलता: प्रीप्रोसेसर, कंपाइलर और लिंकर उसे एक्ज़ीक्यूटेबल फ़ाइल में बदलते हैं। इससे वह भेद निकला जो पूरी इकाई में चलता है: जो केवल टेक्स्ट पर निर्भर है वह कंपाइल या लिंक करते समय पता चलता है, और जो डेटा पर निर्भर है वह केवल चलाते समय। पाठ ने कंपाइल्ड मॉडल की तुलना इंटरप्रेटेड मॉडल से की और कारण बताया कि पाठ्यक्रम C++23 का उपयोग क्यों करता है और उसे -std=c++23 से क्यों माँगता है।

परिवेश स्थापित करना

पाठ Windows, macOS और Linux पर परिवेश स्थापित करना ने C++23 में सक्षम एक कंपाइलर और C++ एक्सटेंशन के साथ Visual Studio Code स्थापित किया। उसकी पद्धति-संबंधी सीख यह है कि संपादक कंपाइल नहीं करता, बल्कि एक ऐसे कंपाइलर को बुलाता है जिसे टर्मिनल को ढूँढ़ पाना चाहिए, और कि किसी संदेश के सटीक शब्द इंस्टॉलेशन की खराबी को बुलाने की खराबी से अलग करते हैं।

कंपाइल करना, चलाना और कॉन्फ़िगर करना

पाठ कंपाइल करना, चलाना और कॉन्फ़िगर करना ने संपादित करने, सहेजने, कंपाइल करने, चलाने और पढ़ने का कार्य-चक्र तय किया, और पाठ्यक्रम की कमांड भी। उसने त्रुटि, जो एक्ज़ीक्यूटेबल फ़ाइल बनने नहीं देती, को चेतावनी से अलग किया, जो उसे बनने देती है पर संदिग्ध कोड की ओर इशारा करती है; उसने डिटेक्टर चालू किए (मेमोरी त्रुटियों का डिटेक्टर, AddressSanitizer, और अपरिभाषित व्यवहार का डिटेक्टर, UndefinedBehaviorSanitizer), जो निष्पादन पर नज़र रखते हैं, और उनकी सीमाएँ दिखाईं; और समझाया कि फ़ाइल, कंपाइलर और कंसोल को UTF-8 पर सहमत होना चाहिए।

प्रोग्राम की बनावट

पाठ प्रोग्राम की बनावट ने न्यूनतम प्रोग्राम को खोलकर देखा: हेडर, जो हर निर्भरता की घोषणा करते हैं; main, प्रवेश बिंदु जिसका मान एग्ज़िट कोड है; नेमस्पेस std; स्टेटमेंट, ब्लॉक और टिप्पणियाँ। उसने संदेशों को पहले संदेश से पढ़ना सिखाया और पाठ्यक्रम की स्टाइल गाइड तय की।

इनपुट, आउटपुट और त्रुटियाँ

पाठ इनपुट, आउटपुट और त्रुटियाँ ने प्रोग्राम को बाहरी दुनिया के संपर्क में रखा: std::println फ़ॉर्मैट विनिर्देशों के साथ ठीक वही लिखता है जो माँगा गया, और std::cin पढ़ता है और पहले अनुपयोगी वर्ण पर रुक जाता है। जो पठन किसी ऐसे वर्ण से टकराता है जो संख्या नहीं बना सकता, वह वेरिएबल को शून्य कर देता है और स्ट्रीम को त्रुटि अवस्था में छोड़ देता है, चुपचाप (जो संख्या टाइप में नहीं समाती या जो इनपुट समाप्त हो चुका है, वे वेरिएबल में कोई और मान छोड़ते हैं, और पाठ इन स्थितियों को गिनाता है); इसीलिए पठन की जाँच की जाती है। पाठ ने त्रुटियों को उनके प्रकट होने के क्षण के अनुसार वर्गीकृत करके इकाई को पूरा किया: कंपाइल त्रुटि, लिंक त्रुटि, रनटाइम त्रुटि और तार्किक त्रुटि।