Tuesday, April 7, 2009

सीखिए सी - 1 : सी भाषा का उद्भव कैसे हुआ

आजकल मानव-क्रियाकलाप के हर क्षेत्र में कंप्यूटरों का बोलबाला होता जा रहा है। यह कंप्यूटरों की बढ़ती शक्ति और उपयोगिता को दर्शाता है। कंप्यूटरों की यह शक्ति और उपयोगिता मानव जरूरतों को कंप्यूटर प्रोग्रामों के माध्यम से ऐसे रूपों में प्रस्तुत करने से जुड़ी है, जिन्हें कंप्यूटर समझ सके, तथा अपनी अपार गणना शक्ति का उपयोग करते हुए इन जरूरतों की पूर्ति कर सके।

जैसा कि आप जानते हैं, कंप्यूटर दो ही स्थितियों को नैसर्गिक रूप से पहचान सकता है--अपने परिपथों में बिजली के बहाव के होने और न होने की। इन दोनों दशाओं को 1 और 0 के माध्यम से दर्शाया जाता है। अन्य शब्दों में कहें, तो कंप्यूटर की भाषा में केवल दो ही शब्द होते हैं, 1 और 0, और हमें कंप्यूटरों से बातचीत करते समय हर बात इन्हीं दो शब्दों में कहनी होती है।

कंप्यूटरों के शुरुआती दौर में कंप्यूटर प्रोग्राम सचमुच इस मूलभूत भाषा में लिखे जाते थे। इस भाषा को यंत्र भाषा (मशीन लैंग्वेज) कहा जाता है। लेकिन यंत्र भाषा में प्रोग्राम लिखने का काम अत्यंत उबाऊ और श्रमसाध्य है। जैसे-जैसे कंप्यूटर अधिक जटिल कार्यों में लगाए जाने लगे, यंत्र भाषा अपर्याप्त सिद्ध होने लगी। तब प्रोग्राम-लेखकों ने उससे उन्नत भाषा का विकास किया, जिसमें यंत्र भाषा के बार-बार प्रयोग में आनेवाले अंक-क्रमों के लिए सूचक शब्द रखे गए। मान लीजिए कि दो संख्याओं को जोड़ने के लिए यंत्र भाषा में यह क्रम चलता हो--1100101010001101। तो इस अंक-विन्यास के लिए ADD (जोड़ो) सूचक शब्द रख देने पर, प्रोग्राम में जहां-जहां यह अंक-विन्यास आता हो, वहां इस सूचक शब्द का प्रयोग काफी होगा। इसी प्रकार से कंप्यूटर द्वारा किए जानेवाले अन्य कार्यों को सूचित करनेवाले अंक-विन्यासों के लिए भी शब्द रखे गए। इन शब्द-प्रतीकों की भाषा को ऐसेंब्ली भाषा कहा जाता है। ऐसेंब्ली भाषा में लिखे गए प्रोग्रामों को यंत्र भाषा में बदलने के लिए विशेष प्रोग्राम लिखे गए, जिन्हें ऐसेंब्लर कहा जाता है। प्रोग्रामर तो अपना प्रोग्राम ऐसेंब्ली भाषा में लिखेगा, लेकिन ऐसेंब्लर उस प्रोग्राम को यंत्र भाषा में परिवर्तित करेगा, ताकि कंप्यूटर प्रोग्राम को समझ सके।

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

इस स्थिति से निपटने के लिए कंप्यूटर विशेषज्ञों ने कुछ उच्च स्तर की भाषाएं विकसित कीं, जो यंत्र-मुक्त थीं, यानी उनमें लिखे गए प्रोग्राम अनेक प्रकार के कंप्यूटरों पर चल सकते थे। इन भाषाओं में लिखे गए प्रोग्रामों को यंत्र भाषा में बदलने के लिए विशेष प्रकार के दुभाषिए (इंन्टेरप्रेटर) और संकलक (कंपाइलर) प्रोग्राम लिखे गए। बेसिक, कोबोल आदि इस प्रकार की भाषाएं हैं।

कुछ समय तक तो ये भाषाएं पर्याप्त रहीं, लेकिन जैसे-जैसे कंप्यूटरों की शक्ति बढ़ने लगी और उनके लिए लिखे गए प्रोग्रामों की जटिलता आसमान छूने लगी, तो ये भाषाएं भी जवाब दे गईं।

इसका मुख्य कारण यह था कि इन भाषाओं में निर्देश रेखीय क्रम में रहता है, यानी निर्देश जिस क्रम में प्रोग्राम में लिखे होते हैं, कंप्यूटर उसी क्रम में उनका निष्पादन करता है। लेकिन जटिल प्रोग्रामों में कंप्यूटर को एक निर्देश के परिणामों के आधार पर अनेक विकल्पों में से एक को चुनकर उसका पहले निष्पादन करने की आवश्यकता रहती है। बेसिक आदि प्रारंभिक उच्च-स्तरीय भाषाओं में इस प्रकार की स्थितियों से निपटने की क्षमता नहीं थी।

इसी संदर्भ में पास्कल, सी आदि अधिक पूर्ण एवं शक्तिशाली उच्च-स्तरीय भाषाओं का विकास हुआ। इनमें प्रोग्राम के बहाव को नियंत्रित करने के लिए अनेक उपाय हैं। सी इन सभी भाषाओं में से सर्वाधिक उन्नत है, क्योंकि वह प्रोग्राम-लेखक को कंप्यूटर को यंत्र-स्तर पर नियंत्रित करने की क्षमता भी देती है। इसी विशेषता के कारण पिछले कुछ दशकों में सी भाषा सर्वाधिक उपयोग में लाई जानेवाली भाषा बन गई थी।

सी की लोकप्रियता के कुछ अन्य कारण भी हैं। युनिक्स प्रचालन तंत्र (ओपरेटिंग सिस्टम) सी भाषा में ही लिखा गया है और यह बड़े कंप्यूटरों में सर्वाधिक लगाया जानेवाला प्रचालन तंत्र है। अतः इन कंप्यूटरों के लिए प्रोग्राम लिखने के लिए सी भाषा अधिक उपयुक्त है। अभी हाल में सी भाषा के साथ वस्तु-केंद्रित प्रोग्रामिंग (ओब्जेक्ट ओरिऐन्टेड प्रोग्रामिंग) के तत्व जोड़कर एक नई भाषा सी++ विकसित की गई है, जो सी से भी अधिक प्रचार-प्रसार पा गई है। चूंकि सी++ सी का ही विकसित रूप है, इसलिए उसमें निपुण होने के लिए सी की अच्छी जानकारी बहुत जरूरी है।

आजकल सी दसवीं, बारहवीं से लेकर बीसीए, एमसीए आदि के पाठ्यक्रमों में निर्धारित की गई है। इसलिए कंप्यूटरशास्त्र के छात्रों के लिए सी का अध्ययन आवश्यक हो गया है। सभी प्रोग्रामरों के लिए सी सीखना इसलिए भी आवश्यक है क्योंकि अनेक अन्य भाषाएं, जैसे जावा, फ्लैश एक्शनस्क्रिप्ट, सी++, सीशार्प आदि में भी सी जैसा वाक्य-विन्यास होता है। यदि प्रोग्रामर को सी अच्छी तरह से आती हो, तो इन सब भाषाओं को सीखना उसके लिए अधिक सरल हो जाता है। सी सीखने का एक अन्य लाभ यह है कि उसमें किसी आधुनिक प्रोग्रामन भाषा के सभी आधारभूत तत्व जैसे प्रमुख डेटा टाइप (int, char, float, array, struct, आदि), लूपिंग स्ट्रक्चर (for, while, do... while, case आदि), ब्रांचिंग कथन (if... else वाले कथन) आदि मौजूद हैं। इसलिए सी सीख लेने पर प्रोग्रामन भाषाओं की मुख्य-मुख्य विशेषताएं आसानी से समझ में आ जाती हैं। चूंकि सी एक सुगठित और छोटी भाषा है उसे अन्य प्रोग्रामन भाषाओं की तुलना में जल्दी सीखा जा सकता है।

सी सिखानेवाली अनेक पुस्तकें अंग्रेजी में तो उपलब्ध हैं, पर हिंदी में ऐसी पुस्तकों का अभाव है। इसी कमी को दूर करने का यह ब्लोग एक लघु प्रयास है। इस ब्लोग में सी भाषा का सामान्य परिचय दिया गया है। पाठक से सी भाषा या किसी भी अन्य कंप्यूटर भाषा या कंप्यूटर के बारे में जानकारी अपेक्षित नहीं है। सी भाषा की प्रारंभिक स्तर से लेकर कुछ अधिक उन्नत संरचनाओं तक का इस ब्लोग में सरल भाषा में विवेचन किया गया है। सी एक अत्यंत समृद्ध एवं शक्तिशाली भाषा है और उसके सभी पहलुओं को इस ब्लोग में समेटा नहीं जा सकता। फिर भी, इस ब्लोग से गुजरने के बाद आप सी भाषा की एक मोटी रूपरेखा प्राप्त कर सकते हैं, तथा सी भाषा में कुछ सरल, किंतु उपयोगी प्रोग्राम लिखने की क्षमता प्राप्त कर सकते हैं।

जहां तक हो सके, ब्लोग को त्रुटि-रहित रखने का प्रयास किया गया है, लेकिन यदि कोई त्रुटि रह गई हो, तो जानकार पाठकों से अनुरोध है कि वे मुझे इन त्रुटियों से अवगत कराएं।

इस ब्लोग में ऐन्सी सी का अनुसरण किया गया है। सभी प्रोग्राम टर्बो सी++ संकलक (वर्शन 5) पर संकलित करके देखे गए हैं।

1 comment:

  1. hmm grtt...!! thanks sir u are grate....i gona start my tutorial frm his blog.. it really grt work..thanks again..

    ReplyDelete