निम्नलिखित में से किस एक का प्रयोग, अनेक अभिलक्ष्य प्रतिरूपकों (ऑब्जेक्ट मॉड्यूल्स) और क्रमादेश संग्रहों (लाइब्रेरीज़) को एकल निष्पाद्य क्रमादेश (प्रोग्राम) में संयुक्त करने में होता है ?
- (a)निर्वचक
- (b)अनुभाषक
- (c)शृंखलक
- (d)भारक
सही उत्तर — C, (c) शृंखलक । पुस्तिका जिसे शृंखलक कहती है, वह अंग्रेज़ी का linker है, और उसी का काम यह है कि अलग-अलग बनी हुई ऑब्जेक्ट फ़ाइलों तथा लाइब्रेरियों को जोड़कर एक चलने योग्य फ़ाइल बना दे । बड़ा क्रमादेश एक ही फ़ाइल में नहीं लिखा जाता ; उसे कई फ़ाइलों में बाँटकर हर फ़ाइल अलग से संकलित की जाती है, और हर संकलन एक ऑब्जेक्ट मॉड्यूल देता है । ऐसे हर मॉड्यूल में कुछ नाम अधूरे रह जाते हैं — किसी फलन को वह पुकारता तो है, पर उसकी परिभाषा किसी दूसरी फ़ाइल में या किसी लाइब्रेरी में पड़ी है । शृंखलक यही अधूरापन दूर करता है : वह सब मॉड्यूलों के प्रतीक-कोष्ठ मिलाकर हर बाहरी पुकार को उसकी परिभाषा से जोड़ता है, समान प्रकार के खंडों को एक साथ रखता है, पतों को नए सिरे से बैठाता है, और लाइब्रेरी से केवल वही अंश उठाकर भीतर रख देता है जिसकी वास्तव में आवश्यकता है । इसका परिणाम एकल निष्पाद्य फ़ाइल होती है, जो स्टेम की माँग है । यहाँ हिन्दी माध्यम के अभ्यर्थी के लिए एक बात विशेष रूप से ध्यान देने योग्य है : स्टेम में तो पुस्तिका कोष्ठक में लिप्यंतरण देती है — 'अभिलक्ष्य प्रतिरूपकों (ऑब्जेक्ट मॉड्यूल्स)', 'क्रमादेश संग्रहों (लाइब्रेरीज़)', 'निष्पाद्य क्रमादेश (प्रोग्राम)' — पर चारों विकल्पों में कोई लिप्यंतरण नहीं देती, जबकि कठिनाई पूरी की पूरी वहीं है । शृंखलक को पकड़ने का सहज सूत्र यही है कि शृंखला का अर्थ ही कड़ी से कड़ी जोड़ना है ।
- (a)निर्वचक — निर्वचक वह है जिसे अंग्रेज़ी में interpreter कहते हैं । वह स्रोत क्रमादेश को एक-एक कथन करके पढ़ता है, उसी समय उसका अर्थ निकालकर उसे चला देता है, और अगले कथन पर बढ़ जाता है । इस पूरी प्रक्रिया में वह न कोई ऑब्जेक्ट मॉड्यूल बनाता है और न कोई निष्पाद्य फ़ाइल, इसलिए 'अनेक मॉड्यूलों को जोड़ने' का प्रश्न उसके साथ उठता ही नहीं । यही कारण है कि निर्वचक से चलने वाली भाषाएँ धीमी पड़ती हैं पर त्रुटि तत्काल पकड़ में आ जाती है ।
- (b)अनुभाषक — अनुभाषक वह है जिसे अंग्रेज़ी में compiler कहते हैं । वह ऊँचे स्तर की भाषा में लिखे स्रोत को पढ़कर उसकी जाँच करता है और उसे मशीन के समझने योग्य ऑब्जेक्ट कोड में बदल देता है । पर उसका काम एक फ़ाइल तक सीमित है : वह ऑब्जेक्ट मॉड्यूल बनाता है, अनेक मॉड्यूलों को जोड़ता नहीं । यही इस प्रश्न की धुरी है — अनुभाषक शृंखलक को कच्चा माल देता है, और जोड़ने का काम उसके बाद शृंखलक करता है । ध्यान रहे कि compiler का प्रचलित हिन्दी रूप 'संकलक' है ; पुस्तिका यहाँ 'अनुभाषक' छापती है ।
- (d)भारक — भारक वह है जिसे अंग्रेज़ी में loader कहते हैं, और वह शृंखलक के ठीक बाद की कड़ी है । जब निष्पाद्य फ़ाइल बन चुकी होती है और उसे चलाया जाता है, तब भारक उसे द्वितीयक भंडारण से उठाकर मुख्य स्मृति में रखता है, पतों को स्मृति में मिले वास्तविक स्थान के अनुसार बैठाता है और नियंत्रण क्रमादेश के आरंभ-बिंदु को सौंप देता है । अर्थात् वह फ़ाइल को चलाता है, बनाता नहीं । जोड़ने का काम संकलन के समय होता है, भारण का काम चलाने के समय — यही दोनों का भेद है ।
किसी स्रोत फ़ाइल के चलने योग्य क्रमादेश बनने तक चार चरण होते हैं । पहले पूर्व-संसाधक (preprocessor) शीर्ष फ़ाइलें और मैक्रो खोलता है । फिर अनुभाषक यानी कंपाइलर उसे ऑब्जेक्ट कोड में बदलता है, और हर स्रोत फ़ाइल का अपना अलग ऑब्जेक्ट मॉड्यूल बनता है । तीसरे चरण में शृंखलक यानी लिंकर इन मॉड्यूलों और आवश्यक लाइब्रेरियों को जोड़कर एक निष्पाद्य फ़ाइल बनाता है । अंत में, चलाए जाने पर, भारक यानी लोडर उस फ़ाइल को स्मृति में लाकर निष्पादन आरंभ कराता है । शृंखलन के दो प्रकार हैं — स्थिर शृंखलन, जिसमें लाइब्रेरी का अंश निष्पाद्य फ़ाइल के भीतर ही रख दिया जाता है, और गतिक शृंखलन, जिसमें वह अंश चलाने के समय साझा लाइब्रेरी से लिया जाता है ।
यह प्रश्न प्रश्नपत्र के कंप्यूटर खंड का है और उसकी असली कठिनाई हिन्दी शब्दावली में है, विषय में नहीं । चारों विकल्प ऐसे संस्कृतनिष्ठ पर्याय हैं जो पाठ्यपुस्तकों में कम मिलते हैं : निर्वचक = interpreter, अनुभाषक = compiler, शृंखलक = linker, भारक = loader । अभ्यर्थी प्रायः इन्हीं की अंग्रेज़ी रूप में पढ़ता आया होता है, इसलिए दो में उलझने की संभावना सबसे अधिक है — शृंखलक और भारक । दोनों को अलग रखने का सहज सूत्र उनकी जड़ों में ही है : शृंखला का अर्थ कड़ियाँ जोड़ना, इसलिए शृंखलक जोड़ता है ; भार का अर्थ लादना, इसलिए भारक स्मृति में लादता है । स्टेम में जिस 'अभिलक्ष्य प्रतिरूपक' का उल्लेख है वह ऑब्जेक्ट मॉड्यूल है — यहाँ 'अभिलक्ष्य' लक्ष्य-कोड के अर्थ में आया है, किसी उद्देश्य के अर्थ में नहीं ।
- शृंखलक (linker) अनेक ऑब्जेक्ट मॉड्यूलों और लाइब्रेरियों को जोड़कर एकल निष्पाद्य फ़ाइल बनाता है और बाहरी प्रतीकों की पुकार को उनकी परिभाषा से मिलाता है ।
- अनुभाषक (compiler) स्रोत कोड को ऑब्जेक्ट कोड में बदलता है ; उसका काम एक फ़ाइल तक सीमित रहता है ।
- निर्वचक (interpreter) कथन-दर-कथन पढ़कर तत्काल निष्पादित करता है और कोई ऑब्जेक्ट फ़ाइल नहीं बनाता ।
- भारक (loader) निष्पाद्य फ़ाइल को मुख्य स्मृति में लाकर निष्पादन आरंभ कराता है ; वह चलाने के समय काम करता है ।
- क्रम इस प्रकार है — पूर्व-संसाधक, अनुभाषक, शृंखलक, भारक ।
- शृंखलन दो प्रकार का होता है — स्थिर, जिसमें लाइब्रेरी का अंश फ़ाइल के भीतर आ जाता है ; और गतिक, जिसमें वह चलाने के समय साझा लाइब्रेरी से जुड़ता है ।
- शृंखलक और भारक को एक मान लेना ; एक जोड़ता है, दूसरा स्मृति में लादता है ।
- यह मान लेना कि अनुभाषक ही निष्पाद्य फ़ाइल बना देता है — वह केवल ऑब्जेक्ट मॉड्यूल तक जाता है ।
- हिन्दी पर्यायों को अनुमान से मिलाना ; निर्वचक interpreter है, अनुभाषक compiler ।
इस प्रकरण पर प्रश्न प्रायः 'कौन क्या करता है' के रूप में आते हैं — कोई एक काम बताकर चार में से कर्ता पूछ लिया जाता है, जैसा यहाँ है । दूसरी शैली क्रम पूछने की है : संकलन से निष्पादन तक के चरणों को सही क्रम में लगाइए । तीसरी शैली तुलना की है, विशेषकर अनुभाषक और निर्वचक के बीच । हिन्दी माध्यम के अभ्यर्थी के लिए सबसे उपयोगी तैयारी यही है कि हर पद का अंग्रेज़ी और हिन्दी रूप साथ-साथ याद कर लिया जाए, क्योंकि प्रश्नपत्र विकल्पों में लिप्यंतरण देने का वचन नहीं देता ।
इस प्रश्न से सीधे संबंधित कोई पूर्व PYQ उपलब्ध नहीं।
- practice — not a real PYQ
निष्पाद्य फ़ाइल को द्वितीयक भंडारण से मुख्य स्मृति में लाकर उसका निष्पादन आरंभ कराने का काम निम्नलिखित में से कौन करता है ?
- (a)अनुभाषक (कंपाइलर)
- (b)शृंखलक (लिंकर)
- (c)भारक (लोडर)
- (d)संपादक (एडिटर)
उत्तर(c) भारक (लोडर) — शृंखलक फ़ाइल बनाता है और भारक उसे चलाने के समय स्मृति में लाकर नियंत्रण सौंपता है ।
- practice — not a real PYQ
निम्नलिखित में से कौन स्रोत क्रमादेश को एक-एक कथन करके पढ़ता तथा तत्काल निष्पादित करता है और कोई ऑब्जेक्ट फ़ाइल नहीं बनाता ?
- (a)अनुभाषक (कंपाइलर)
- (b)निर्वचक (इंटरप्रेटर)
- (c)शृंखलक (लिंकर)
- (d)भारक (लोडर)
उत्तर(b) निर्वचक (इंटरप्रेटर) — अनुभाषक पूरी फ़ाइल का ऑब्जेक्ट कोड बनाता है, जबकि निर्वचक कथन-दर-कथन चलाता है और कोई फ़ाइल पीछे नहीं छोड़ता ।