कम्पाइलर की मूल बातें और फ़ंक्शन क्या है?5 min read

इस ट्यूटोरियल में, हम सॉफ्टवेयर के मूल सिद्धांतों को सीखने जा रहे हैं। यह जानना अनिवार्य है कि हम एक सिस्टम में अपना कोड कहां लिख रहे हैं, और यह सिस्टम में कैसे काम कर रहा है। ये विषय संकलन के चरणों को जानने के लिए स्टार्टअप विषय हैं। और इस ट्यूटोरियल में फंक्शन की गहराई से जानकारी है।

To read this tutorial in English, Click here!

प्रोग्राम, एप्लिकेशन और प्रक्रिया के बीच अंतर।

अभी आप जिस ब्राउज़र का उपयोग कर रहे हैं वह कुछ और नहीं बल्कि एक एप्लिकेशन है जिसे आमतौर पर तकनीकी शब्दावली में निष्पादन योग्य (एक्जीक्यूटेबल) फ़ाइल के रूप में संदर्भित किया जाता है।

एक बार प्रोग्राम कंपाइलर में चला जाता है और कंपाइलर एक एक्जीक्यूटेबल फाइल देगा। जब हम इसे लॉन्च कर रहे हैं (डबल क्लिक करके) एक्जीक्यूटेबल फ़ाइल यह लॉन्चर की मदद से रैम में लोड हो जाती है। वर्तमान में लोड की गई फ़ाइल एक प्रक्रिया बन जाती है। इस तरह एक एप्लिकेशन एक प्रक्रिया बन जाता है।

 

 

Program Vs Application Vs Process illustration

बहुत आसान तरीके से समझने की कुछ परिभाषाएँ।

प्रोग्राम: यह डेवलपर द्वारा लिखा गया एक सोर्स कोड है।

एप्लिकेशन: यह एक निष्पादन योग्य (एक्जीक्यूटेबल) फ़ाइल है जिसमें संकलक (कम्पाइलर) ने सोर्स कोड का अनुवाद (translet) किया है।

प्रक्रिया: रैम (RAM) पर चलने वाले कार्य को प्रक्रिया कहा जाता है।


एक प्रणाली (System) में विभिन्न परतें

कोर भाषा सीखते समय यह जानना जरूरी है कि हमारा कोड सिस्टम में कहां काम कर रहा है।

अधिकांश समय हम एप्लिकेशन परत (an application layer) में, सॉफ़्टवेयर के “उपयोगकर्ता इंटरफ़ेस भाग” (User interface part) का उपयोग करते हैं। हमारा टर्मिनल सॉफ्टवेयर, एप्लीकेशन लेयर पर काम करता है। तो इस तरह, हम एक सिस्टम की एप्लिकेशन लेयर में अपना कोड लिखते हैं।

application layer, kernel layer, hardware layer

आवेदन परत (Application layer): यह एक कोर परत नहीं है। जहां हम आम तौर पर काम करते हैं। उदाहरण के लिए, Microsoft सॉफ़्टवेयर का उपयोग करना, क्रोम ब्राउज़र का उपयोग करना, आदि।

कर्नेल परत (Kernel layer): यह एक कोर परत है और यह सेवाएं प्रदान करती है। उदाहरण के लिए, CPU प्रबंधन प्रणाली, फ़ाइल प्रबंधन, थ्रेड प्रबंधन, आदि।

हार्डवेयर परत (Hardware layer): जहां मुख्य भौतिक घटक काम करते हैं। उदाहरण के लिए, सीपीयू, रैम, हार्ड डिस्क, आदि।

अधिक, हम कोर लिनक्स सिस्टम ट्यूटोरियल में सीखेंगे।


संकलक (Compiler)

संकलक दो प्रकार के होते हैं।

  1. मूल संकलक (Native compiler)
  2. क्रॉस कंपाइलर (Cross compiler)

मूल संकलक ( Native compiler)

  • स्रोत कोड (Source code) और लक्ष्य हार्डवेयर (target haedware) दोनों एक ही तकनीक पर चलते हैं, इसे चलाने के लिए समान ऑपरेटिंग सिस्टम या समान प्लेटफ़ॉर्म की आवश्यकता होती है। उदाहरण के लिए, विंडोज।
  • यह ‘.exe’ या अन्य एक्सटेंशन जैसी निष्पादन योग्य (executable files) फ़ाइलों को बनाने में सक्षम है।
  • टर्बो सी (Turbo C)और जीसीसी (GCC) एक मूल संकलक के अच्छे उदाहरण हैं।
  • संकलन प्रक्रिया (compilation process) के लिए टर्बो सी विभिन्न चरणों (प्रीप्रोसेसर, अनुवादक, असेंबलर और लिंकर) (Preprocessor, Translator, Assembler, and Linker)  से गुजरता है।

Turbo C compilation stages in detail

क्रॉस कंपाइलर

  • क्रॉस कंपाइलर उस प्लेटफॉर्म के लिए एक निष्पादन योग्य कोड (executable code) बना सकता है जिस पर वह चल रहा है और अन्य प्लेटफार्मों के लिए भी।
  • संकलन के दौरान, हम प्रौद्योगिकी (technology) का चयन कर सकते हैं (उदाहरण के लिए इंटेल (Intel), एआरएम (ARM) …) जिस पर उपयोगकर्ता कोड का उपयोग करने जा रहा है।
  • क्रॉस कंपाइलर लक्ष्य हार्डवेयर (target hardware) और ऑपरेटिंग सिस्टम से स्वतंत्र हैं। इसके अलावा, यह RAW कोड, BIN (बाइनरी) फ़ाइल, कोड की Hex (हेक्साडेसिमल) उत्पन्न कर सकता है।
  • केइल (Keil) एक क्रॉस कंपाइलर का बहुत अच्छा उदाहरण है।
नोट: टर्बो सी केइल के विपरीत, प्रौद्योगिकी-आधारित संकलन (technology-based compilation) का चयन करने का विकल्प नहीं है।

— — — — —

हम C का उपयोग क्यों कर रहे हैं?

  1. यह पुन: प्रयोज्य (Reusable) है।
  2. पोर्टेबिलिटी: कोर के संकलक (core’s compiler) का उपयोग करके एक ही कोड (शायद कुछ संशोधन के साथ) का उपयोग विभिन्न प्रौद्योगिकी (different technology) में किया जा सकता है।
  3. C भाषा असेंबली कोड के निकट है। उदाहरण के लिए, C प्रोग्राम में आप C भाषा और असेंबली दोनों का उपयोग कर सकते हैं।
 नोट: C भाषा को एक मध्य-स्तरीय भाषा भी कहा जाता है क्योंकि C प्रोग्राम में हम C भाषा & असेंबली भाषा दोनों का उपयोग कर सकते हैं।

फ़ंक्शन क्या है?

C भाषा एक ब्लॉक-स्ट्रक्चर्ड भाषा है (C जिसे डेटा-ओरिएंटेड भाषा भी कहा जाता है)।

ब्लॉक स्ट्रक्चर्ड: निष्पादन के लिए (for execution) प्रत्येक कथन को फ़ंक्शन ब्लॉक के अंदर लिखा जाना चाहिए।

फ़ंक्शन ब्लॉक: फ़ंक्शन / सबरूटीन, एक विशिष्ट कार्य करने के लिए एक आत्म-निहित ब्लॉक (self-contained block) है।

नोट: फ़ंक्शन को सबरूटीन भी कहा जाता है।

function calling explanation

 

पिछले ब्लॉग में, हमने सी की संरचना के बारे में सीखा।

संक्षेप में, “main” एक कॉलिंग फंक्शन है जो उपरोक्त इमेज में हरे रंग का बॉक्स दिखाया गया है। ओर जो लाल रंग का बॉक्स है वो “mul” कॉल्ड फ़ंक्शन है

ध्यान से पढ़ें। तकनीकी शब्दों का इस्तेमाल किया जा रहा है। साक्षात्कार में बहुत उपयोगी (Very useful in interviews):

“main” एक कॉलिंग फ़ंक्शन है; “mul” एक कॉल्ड फंक्शन है।

  • जब कॉलिंग फ़ंक्शन एक फ़ंक्शन को कॉल करता है, तो कॉलिंग फ़ंक्शन अपने कार्य को रोक देता है, जब कॉल्ड फंक्शन अपनी return वैल्यू कॉलिंग फंक्शन (main) को देता है तभ फिर कॉलिंग फंक्शन अपना प्रोग्राम की बाद वाली लाइन एक्सेक्यूट करता है।

— — — — —

फ़ंक्शन की घोषणा क्यों?

फ़ंक्शन एक पहचानकर्ता (identifier) है। इसलिए, यह घोषित किया जाना चाहिए ताकि संकलक (compiler) को पता चले कि यह किस प्रकार का डेटा है।

पहचानकर्ताओं (identifiers) और कीवर्ड और टोकन के बारे में हम आगामी ट्यूटोरियल में सीखेंगे।

नोट: सी भाषा अनुदेश (instructions) मशीन-स्वतंत्र हैं। असेंबलर निर्देश मशीन-निर्भर हैं

— — — — —

हेडर फ़ाइल के बिना प्रिंटफ (printf) घोषणा का उदाहरण

Print function execution without header file

printf execution without header output

 

उपरोक्त कोड में कोई हेडर फ़ाइल नहीं है, लेकिन फिर भी, इसे सफलतापूर्वक संकलित (compiled) किया गया है और स्क्रीन पर वांछित आउटपुट मुद्रित किया गया है। कैसे?

क्या आप जानने के लिए उत्सुक हैं?

हर कोड कुछ संकलन चरणों के तहत जाता है। समाधान अगले भाग में विस्तार से बताया गया है।


असाइनमेंट

  1. सी भाषा की बुनियादी बातों का पुनर्परीक्षण करें।

 

Leave a Comment