यह उन लोगों के बीच परिचित है जो कंप्यूटर प्रोग्रामिंग के क्षेत्र से संबंधित हैं या जो प्रोग्रामिंग भाषा विकसित करते हैं।एक कंपाइलर मानव-निर्मित कंप्यूटर भाषा को मशीन भाषा या प्रोग्रामिंग कोड में परिवर्तित करता है।
यह कई अन्य काम भी करता है जैसेकि कोड कि त्रुटियों का पता लगाना या त्रुटियों को रोकना, सिंटैक्स का विश्लेषण करना और कोड का अनुकूलन करना।अगर आप एक सॉफ्टवेयर डेवलपर बनना चाहते हैं या कंप्यूटर विज्ञान के बारे में ज्ञान प्राप्त करने में रुचि रखते हैं, तो आपको कंपाइलर्स के बारे में अच्छी तरह से जानना होगा।
तो, इस लेख में आप जान पाऐगे कि Compiler क्या है और कंपाइलर कितने प्रकार के होते हैं। कंपाइलर्स के क्या उपयोग हैं, वे कैसे काम करते हैं और उनके क्या फायदे हैं? तो आइये सबसे पहले विस्तार से जानलेते हैं कि कंपाइलर क्या है।
Table of Contents
Compiler क्या है
कंपाइलर एक कंप्यूटर प्रोग्राम या सॉफ्टवेयर प्रोग्राम है जो सोर्स प्रोग्राम को मशीन प्रोग्राम में ट्रांसलेट करता है। इस प्रोग्राम का इस्तेमाल मूल रूप से मशीन कोड या कंप्यूटर भाषा बनाने के लिए किया जाता है यानी उच्च स्तरीय प्रोग्रामिंग भाषा को निम्न स्तरीय प्रोग्रामिंग भाषा में बदलता है। वे कंप्यूटर सिस्टम को पीछे से चालू रखते हैं। वे कई अलग-अलग प्रोग्रामिंग भाषाओं जैसे C, C++ और Java Script में लिखे सोर्स कोड को परिवर्तित करते थे।
इसका उपयोग कोड को अनुकूलित करने और यह सुनिश्चित करने के लिए किया जाता है कि सोर्स कोड सही तरीके से निष्पादित हो ताकि कंप्यूटर सिस्टम के लिए कोड को समझना आसान हो जाए। यह यह भी सुनिश्चित करता है कि उत्पन्न मशीन कोड इस्तेमाल किए जा रहे हार्डवेयर के लिए सही है। इसका उपयोग कई अन्य उद्देश्यों के लिए भी किया जाता है, उदाहरण के लिए प्रोग्रामिंग कोड में किसी भी त्रुटि का पता लगाने और सोर्स कोड में पहचाने गए बग को ठीक करने के लिए।
कंपाइलर्स का उपयोग
आज पुरा जमाना computer पर depend है क्योकि ये एक ऐसी intelligent machine है जिसने लोगो कि नमुमकिन काम को भी आसान बना दिया है।आज ऐसा कोई क्षेत्र नही जहा computer का इस्तेमाल न किया जाता हो। लेकिन हम सभी जानते है कि एक computer को इतना ताकरवर बनाने के पिछे computer programming की बड़ी भुमिका होती है, क्योकि विना programming या computer language के ये एक बेजान मशिन के अलाबा ओर कुछ नही है।
क्योकि एक computer खुदसे कोई काम नही कर सकता जब तक न उसे कोई instructions न मिले। Programming ही है जो एक कंप्यूटर को निर्देश देता है कि उसे क्या करना है। इतना तो हम सभी कोो पता है कि कंप्यूटर Human language को नही समझता। उसे किया करना है इस बात को समझाने के लिए उसीकि भाषा मे निर्देश देना होता है जिसे हम Machine language के तौरपर जानते है।
जैसेकि Java, C++, Python, यह सभी Machine language का उदाहरण है। ये सभी high-level machine language होते है जिन्है Highly skilled और Professional programmer द्बारा डेवलप किया जाता है। शाएद आपको पता न हो कि कंप्यूटर कभी-कभी इन जटिल भाषाओ को समझने मे नकाम हो जाते है क्योकि एक कंप्यूटर केवल bytecode को ही आसानी से समझ पाता है और वही से Compiler का भुमिका शुरु होता।
Compiler दरसल एक interpreter कि तरह काम करता है जो प्रोग्रामिंग भाषा को मशीनि भाषा में परिवर्तित करता है ताकि कंप्यूटर उन निर्देशो को ठिक से समझ सके कि उसे करना क्या है।
कंपाइलर के विभिन्न प्रकार क्या हैं?
इन्हें मुख्य रूप से तीन प्रकारों में वर्गीकृत किया जाता है, लेकिन वे डिज़ाइन और कार्यक्षमता के आधार पर अलग-अलग प्रकार के होते हैं।
1. सिंगल पास कंपाइलर 2. टू पास कंपाइलर 3. मल्टी-पास कंपाइलर
यहाँ इसके कुछ अन्य सामान्य प्रकार दिए गए हैं ताकि आप उन्हें बेहतर तरीके से समझ सकें।
Single Pass Compilers
यह पूरे सोर्स कोड को एक बार में मशीन कोड में बदल देता है। यह सिंटैक्स, सिमेंटिक एनालिसिस, कोड जेनरेशन आदि जैसे काम बहुत तेज़ी से करता है। लेकिन इसकी त्रुटियों की जाँच करने की क्षमता तुलनात्मक रूप से कम है क्योंकि सोर्स कोड का गहराई से विश्लेषण नहीं किया जाता है।
Two Pass Compiler
इस कंपाइलर विधि के अंतर्गत विश्लेषण प्रक्रिया को दो चरणों में विभाजित किया जाता है और प्रत्येक चरण एक पास होता है। पहले पास में, यह केवल स्रोत कोड का प्राथमिक विश्लेषण करता है, और डेटा संरचना और प्रतीक तालिकाएँ बनाता है। दूसरे पास में, यह पहले पास में एकत्रित जानकारी के आधार पर कोड बनाता है। इस पास में, कोड का गहराई से विश्लेषण किया जाता है और अनुकूलन प्रक्रिया बड़े पैमाने पर होती है।
Multi-pass compiler
प्रोग्राम को कार्यात्मक बनाने के लिए सोर्स कोड को कई अलग-अलग अनुक्रमों में व्याख्यायित किया जाता है। प्रत्येक इंटरप्रेटर का एक विशिष्ट कार्य होता है और वह आउटपुट परिणामों को अगली प्रक्रिया के लिए इनपुट डेटा के रूप में उपयोग करता है। जबकि सिंगल पास कंपाइलर के मामले में सोर्स कोड को केवल एक बार व्याख्यायित किया जाता है, मल्टी-पास कंपाइलर इसका अधिक विस्तार से विश्लेषण करते हैं और कोड को अनुकूलित करते हैं। यह पूरी प्रक्रिया के गहन विश्लेषण के साथ सोर्स कोड की व्याख्या करता है।
Cross Compiler
क्रॉस कंपाइलर एक आर्किटेक्चर प्लेटफ़ॉर्म पर चलता है लेकिन दूसरे प्लेटफ़ॉर्म के लिए कोड जेनरेट करता है। इनका इस्तेमाल मूल रूप से प्रोग्राम डेवलपमेंट में एम्बेडेड सिस्टम के लिए सॉफ़्टवेयर विकसित करने या अगर स्पष्ट रूप से कहा जाए तो हार्डवेयर डिवाइस को लक्षित करने के लिए किया जाता है। यह डेवलपर्स को एक मशीन पर कोड लिखने और दूसरे के लिए संकलित करने की अनुमति देता है, जिससे पोर्टेबिलिटी और संगतता की अनुमति मिलती है।
Just in Time Compiler
यह कोड को निष्पादित होने से ठीक पहले, यानी रनटाइम पर अनुवाद करता है। इसका मतलब है कि यह प्रोग्राम निष्पादन के दौरान आवश्यकतानुसार कोड उत्पन्न करता है। इसका उपयोग आमतौर पर जावा वर्चुअल मशीन, .NET कॉमन लैंग्वेज रनटाइम जैसी वर्चुअल मशीनों के दौरान किया जाता है और ऑप्टिमाइज़ेशन द्वारा प्रदर्शन में सुधार करता है।
Ahead-of-time (AOT) compilers
AOT कंपाइलर प्रोग्राम के निष्पादित होने से पहले कोड का अनुवाद करते हैं और पूरे प्रोग्राम को समय से पहले मशीन कोड में संकलित कर देते हैं, जिसके परिणामस्वरूप स्टैंडअलोन निष्पादन होता है। यह विशेष रूप से C और C++ जैसी भाषाओं के मामले में होता है, और संकलित कोड का एक अलग प्लेटफ़ॉर्म होता है।
Source-to-Source Compilers
इसे ट्रांसपाइलर कंपाइलर के नाम से भी जाना जाता है। वे एक प्रोग्रामिंग भाषा में लिखे गए सोर्स कोड को लेते हैं और इसे दूसरी समकक्ष भाषा में कोड में अनुवाद करते हैं। इसका उपयोग अक्सर माइग्रेशन उद्देश्यों के लिए किया जाता है, जहाँ कोड को किसी विशेष प्लेटफ़ॉर्म को लक्षित करके उच्च-स्तरीय भाषा में लिखा जाता है।
Optimizing-Compilers
यह मशीन कोड की दक्षता को बेहतर बनाने में मदद करता है। और कोड के प्रदर्शन को बेहतर बनाने के लिए कई अनुकूलन तकनीकों का उपयोग कर सकता है, उदाहरण के लिए, लूप अनरोलिंग और इनलाइनिंग।
कंपाइलर कैसे काम करता है?
अब जैसा कि आप जानते हैं कि कंपाइलर एक प्रोग्राम है जो प्रोग्रामिंग भाषा में लिखे गए सोर्स कोड को मशीन कोड में बदलता है जिसे कंप्यूटर आसानी से पढ़ या समझ सकता है और उसके अनुसार अपना काम कर सकता है। संकलन की यह प्रक्रिया कई चरणों में होती है और इसमें सोर्स कोड का अलग-अलग तरीकों से विश्लेषण किया जाता है और उसे ऐसी भाषाओं में बदला जाता है जिन्हें कंप्यूटर समझ सकता है। यह कैसे काम करता है, इसे नीचे संक्षेप में समझाया गया है।
Lexical Analysis
यह संकलन का पहला चरण है जहाँ लेक्सिकल एनालिसिस किया जाना है। इस विश्लेषणात्मक विधि को टोकनाइजेशन के रूप में भी जाना जाता है। यहाँ, संकलक स्रोत कोड को टोकन की एक धारा में अलग करता है, और प्रत्येक टोकन भाषा के मूल तत्व का प्रतिनिधित्व करता है, जैसे कि कीवर्ड, पहचानकर्ता, ऑपरेटर, विराम चिह्न आदि।
Syntax Analysis
यह संकलन का अगला भाग है जहाँ वाक्यविन्यास विश्लेषण किया जाना है। इस प्रक्रिया को पार्सिंग के नाम से भी जाना जाता है। इस प्रक्रिया के दौरान, कंपाइलर कथन बनाने और संयोजित करने के लिए प्रोग्रामिंग भाषा में निहित व्याकरण नियमों की जाँच करता है।
Semantic Analysis
विश्लेषण के इस क्षेत्र में, कोड के पाठ से अर्थपूर्ण डेटा को यादृच्छिक रूप से निकाला जाता है। क्योंकि व्याकरणिक संरचना की जांच करके उनके प्रतिनिधित्व को समझा जाता है। वाक्यों और पैराग्राफों की व्याख्या किसी विशेष संदर्भ में शब्दों के बीच संबंधों की पहचान करके की जाती है।
Intermediate Code Generation
जब प्रोग्राम सभी टेस्ट पास कर लेता है, तो कंपाइलर एक इंटरमीडिएट कोड जनरेट करता है। यह कोड प्रोग्राम के प्रतिनिधि के रूप में व्यवहार करता है। इसका यह भी मतलब है कि यह सोर्स कोड की तुलना में मशीन कोड के ज़्यादा करीब है। लेकिन, यह अभी भी प्रोग्राम को पूरी तरह से निष्पादित करने के लिए तैयार नहीं है।
Optimization
यह संकलन का पाँचवाँ चरण है जहाँ वे अर्थहीन निर्देशों को हटाते हैं। यह विश्लेषण के पिछले चरण में उत्पन्न मध्यवर्ती कोड के प्रदर्शन को बेहतर बनाने का प्रयास करता है।
Code Generation
यह संकलन का अंतिम चरण है जहाँ वे उन मध्यवर्ती कोड को मशीन भाषा कोड में परिवर्तित करते हैं जिसके माध्यम से कंप्यूटर बेहतर प्रदर्शन करते हैं। यह आमतौर पर एक निम्न-स्तरीय कंप्यूटर भाषा होती है जिसे कंप्यूटर प्रोसेसर आसानी से समझ सकता है।
इंटरप्रेटर क्या है
इंटरप्रेटर एक कंप्यूटर कोर इंटरनल प्रोग्राम है जो सीधे प्रोग्रामिंग भाषा में लिखे गए निर्देशों को निष्पादित करता है। इंटरप्रेटर को पहले मशीन भाषा प्रोग्राम में संकलित करने की आवश्यकता नहीं होती है। वे मूल रूप से उच्च-स्तरीय कंप्यूटर प्रोग्रामिंग भाषाओं को निष्पादित करने के लिए कार्यान्वित किए जाते हैं। वे एक ऐसे प्रारूप में लिखे जाते हैं जिसे मनुष्य समझ सकते हैं और फिर उन्हें मशीन कोड में परिवर्तित कर सकते हैं ताकि कंप्यूटर इसकी परिभाषा को समझ सके और उस पर प्रतिक्रिया दे सके।
जबकि कंपाइलर निष्पादन से पहले पूरे प्रोग्राम को मशीन कोड में अनुवाद करते हैं, इंटरप्रेटर लाइन दर लाइन काम करते हैं। इंटरप्रेटर का उपयोग जावास्क्रिप्ट, PHP, पायथन और रूबी जैसी प्रोग्रामिंग भाषाओं का अनुवाद करने के लिए किया जाता है। वे उन स्क्रिप्टिंग भाषाओं के लिए उपयोगी हैं जहाँ त्वरित प्रतिक्रिया और पुनरावृत्ति की आवश्यकता होती है।
Compiler और Interpreter में क्या अंतर है
विशेषता | कंपाइलर | इंटरप्रेटर |
---|---|---|
अनुवाद दृष्टिकोण | निष्पादन से पहले संपूर्ण स्रोत कोड को मशीन कोड या मध्यवर्ती कोड में अनुवादित करता है। | स्रोत कोड का लाइन दर लाइन अनुवाद करता है, रनटाइम के दौरान इसे तुरंत निष्पादित करता है। |
निष्पादन की गति | आम तौर पर तेजी से निष्पादन होता है क्योंकि चलने से पहले पूरे कोड को अनुकूलित और अनुवादित किया जाता है। | निष्पादन गति के मामले में धीमी हो सकती है क्योंकि निष्पादन के दौरान कोड का तुरंत अनुवाद किया जाता है। |
आउटपुट | एक स्टैंडअलोन निष्पादन योग्य फ़ाइल या मध्यवर्ती कोड उत्पन्न करता है। | एक स्टैंडअलोन निष्पादन योग्य उत्पन्न नहीं करता; स्रोत कोड को सीधे निष्पादित करता है। |
डिबगिंग | विकास और निष्पादन चरणों के बीच अलगाव के कारण डिबग करना अधिक चुनौतीपूर्ण हो सकता है। | आम तौर पर डिबगिंग के लिए बेहतर समर्थन प्रदान करता है क्योंकि त्रुटियों को वास्तविक समय में पहचाना और संबोधित किया जा सकता है। |
पोर्टेबिलिटी | संकलित कोड प्लेटफ़ॉर्म-विशिष्ट हो सकता है, जिसके लिए विभिन्न प्लेटफ़ॉर्म के लिए पुनर्संकलन की आवश्यकता होती है। | अधिक पोर्टेबल हो सकता है, क्योंकि interpreter स्वयं विभिन्न प्लेटफार्मों पर चलता है, जिससे समान स्रोत कोड को विभिन्न प्रणालियों पर निष्पादित किया जा सकता है। |
मेमरी | संकलित प्रोग्रामों में अक्सर छोटी मेमोरी फ़ुटप्रिंट होती है क्योंकि अनुकूलन पहले से किया जाता है। | वास्तविक समय में व्याख्या किए गए कोड और डेटा संरचनाओं पर नज़र रखने की आवश्यकता के कारण इसमें बड़ी मेमोरी फ़ुटप्रिंट हो सकती है। |
भाषाओं के उदाहरण | C, C++, Java (bytecode के संकलन के बाद), आदि। | Python, JavaScript, Ruby, आदि। |
अनुकूलन | आम तौर पर इसमें वैश्विक अनुकूलन के अधिक अवसर होते हैं क्योंकि यह एक ही बार में संपूर्ण कोड को संसाधित करता है। | वैश्विक अनुकूलन के संदर्भ में सीमित क्योंकि यह लाइन दर लाइन काम करता है और इसमें कोड का स्थानीय दृश्य होता है। |
हाइब्रिड के उदाहरण | जस्ट-इन-टाइम (जेआईटी) कंपाइलर अनुकूलन उद्देश्यों के लिए रनटाइम के दौरान कुछ अनुवाद करते हैं। | कुछ interpreters बेहतर प्रदर्शन के साथ व्याख्या के लचीलेपन को संयोजित करने के लिए जेआईटी संकलन का उपयोग करते हैं। |
कार्यप्रवाह | प्रोग्राम को निष्पादित करने से पहले एक अलग संकलन चरण की आवश्यकता होती है। | अधिक इंटरैक्टिव विकास प्रक्रिया की अनुमति देता है क्योंकि परिवर्तनों का तुरंत परीक्षण किया जा सकता है। |
About The Author
Biswajit
Hi! Friends I am BISWAJIT, Founder & Author of 'DIGIPOLE HINDI'. This site is carried a lot of valuable Digital Marketing related Information such as Affiliate Marketing, Blogging, Make Money Online, Seo, Technology, Blogging Tools, etc. in the form of articles. I hope you will be able to get enough valuable information from this site and will enjoy it. Thank You.