"सी" प्रोग्रामिगं भाषा



C भाषा को 1972 के आस-पास डेनिस रिची, जो AT&T (American Telephone and Telegraph) की बेल लैब में काम करते थे, ने विकसित किया और एक बार जब यह प्रोग्रामरों के हाथ लगा तो जैसे कंप्युटिंग की दुनिया हीं बदल गई। तब से ले कर आज तक C भाषा या इसके परिवार के हीं किसी प्रोग्रामिंग भाषा ने कंप्युटिंग की दुनिया पर राज किया है। C परिवार की अन्य भाषाओं में हम निम्न भाषाओं का नाम ले सकते हैं - C++, Java, C# ( सी शार्प).।

C भाषा का विकास, युनिक्स औपरेटिंग सिस्टम के साथ जुड़ा हुआ है और इनके विकास की कहानी भी कम रोचक नहीं है। साठ के दशक में जब बड़े कम्प्युटरों (मेन फ़्रेम और मिनी) का बोलबाला था तब हर कम्प्युटर के साथ उसके लिए विशेष तौर से विकसित औपरेटिंग सिस्टम और अन्य प्रोग्राम बनाए जाते थे। यानि तब की बात आज की तरह नहीं थी, कि कंप्युटर कोई भी हो औपरेटिंग सिस्टम विंडो ही होगा (75%+)। तब हर कंप्युटर के साथ अलग औपरेटिंग सिस्टम और अलग प्रोग्रामों की श्रृंखला... यानि कंप्युटिंग पर महारत हासिल करना आसान न था और बहुत कुछ सिखना होता था।

तब एक विचार आया कि क्यों न एक ऐसा औपरेटिंग सिस्टम बनाया जाए जो कई तरह के मशीनों पर चले, और इसी विचार ने AT&T और MIT और GE को एक ऐसे हीं सिस्टम को विकसित करने की सोंच दी और तब इस प्रोजेक्ट को कहा गया - "MULTICS (MULTiplex Information and Computing Service)". काम 1964 में शुरु हुआ, समय बीतता गया पर AT&T जैसा चाहता था वैसा कुछ बन नहीं रहा था। AT&T, जो इस रीसर्च में मुख्य पैसा लगाने वाली कम्पनी थी, ने बाद में अपने को इससे अलग कर लिया। उस प्रोजेक्ट से जुड़े लोगों के लिए यह एक बुरा समय था, उन पर जाने अनजाने एक "Failed Project" का हिस्सा होने का तमगा चिपका था। वे लोग बड़ी मुश्किल से AT&T के मैनेजमेन्ट को यह समझा पाए कि उन्हें एक पुरानी मशीन दी जाए ताकि वे कुछ कर सकें (ऊन्हें तब एक PDP-7 मशीन काम करने के लिए दे दी गई, तब का इस मशीन का सबसे नया मौडेल PDP-11 था) उन्हें इतना तो समझ में आ रहा था कि अगर औपरेटिंग सिस्टम किसी ३G भाषा में हो तो उसका कई तरह के मशीनों पर चलना संभव हो जाएगा, पर तब तक के सारे औपरेटिंग सिस्टम उस कंप्युटर में इस्तेमाल हो रही माईक्रोप्रोसेरर की असेम्बली भाषा या मशीनी भाषा (Language of Bits) में बनाए जाते थे।
उपर्युक्त प्रोग्रामिंग भाषा की कमी ने केन थौमसन (बेल लैब के इंजीनीयर, जो मल्टिक्स प्रोजेक्ट का हिस्सा थे) को एक नई किस्म की प्रोग्रामिंग भाषा को विकसित करने की प्रेरणा दी (यह भाषा B नाम से बनी, अब यह विलुप्ति के कगार पर है)। पर यह B भी, जो नये किस्म के औपरेटिंग सिस्टम का लक्ष्य था, उसे पुरा न कर सकी। डेनिस रिची तब AT&T में अपनी युनिवर्सीटी से एक रीसर्च स्कौलर के रुप में आए थे और उन्हें केन थौम्सन के साथ काम करना था। रिची ने प्रोजेक्ट को समझा और फ़िर केन के B भाषा को भी। फ़िर उन्होंने यह नयी भाषा बनाई - C. इन प्रोग्रामिंग भाषाओं के ऐसे विचित्र नामकरण के पीछे भी कहानी है। असल में केन ने अपनी भाषा B, एक पूर्व विकसित भाषा, मार्टिन रिचर्ड्स की BCPL (Basic Combined Programming Language) पर आधारित रखी थी और इसी भाषा के नाम के पहले अक्षर "B" को अपनी नयी भाषा का नाम बनाया। और जब रिची ने B पर आधारित नई भाषा बनाई तो उन्होंने इसी परम्परा का पालन किया और BCPL के अगले अक्षर "C" को अपने भाषा का नाम दिया। (आगे जब AT&T के हीं जार्ने स्ट्राउस्ट्रुप ने जब C भाषा पर आधारित एक नई भाषा बनाई (हम आप इस भाषा को आज C++ के नाम से जानते हैं), तो कई ने कहा की इसे BCPL के आधार पर P कहा जाए तो कई ने कहा कि B के बाद C तो अब इसको D कहा जाए। (वैसे D नाम की भी एक प्रोग्रामिंग भाषा है)

रिची के इस C जो एक ३G प्रोग्रामिंग भाषा है, में जब ओपरेटिंग सिस्टम लिखा गया तो इसका नाम हुआ UNIX, इसके बाद Unix और C की जुगलबंदी ने कंप्युटिंग की दुनिया हीं बदल दी और आज कंप्युटर कई रुपों में हमारे चारो तरफ़ मौजुद है। कहते हैं कि जिस रफ़्तार से कंप्युटिंग का विकास हुआ, अगर यही रफ़तार औटोमोबाईल की दुनिया में होता तो आज रोल्स-रायस आकार और कीमत में माचिस की डिब्बी की तरह होता...........

यह था "सी" का एक संक्षिप्त परिचय। सन 2000 में "केन थौम्सन" को "सदी का टेक्नोक्रैट" (Technocrat of the Millenium) घोषित किया गया क्योंकि इनकी खोज ने ग्यान-विग्यान के कई धाराओं पर अपनी छाप छोड़ी (क्या आज आप कोई ऐसा क्षेत्र बता सकते हैं जिस पर कंप्युटिन्ग ने अपना असर नहीं दिखाया?)
आज कल मानव-क्रिया कलाप के हर क्षेत्र में कंप्यूटरों का बोल बाला होता जा रहा है। यह कंप्यूटरों की बढ़ती शक्ति और उपयोगिता को दर्शाता है। कंप्यूटरों की यह शक्ति और उपयोगिता मानव जरूरतों को कंप्यूटर प्रोग्रामों के माध्यम से ऐसे रूपों में प्रस्तुत करने से जुड़ी है, जिन्हें कंप्यूटर समझ सके, तथा अपनी अपार गणना शक्ति का उपयोग करते हुए इन जरूरतों की पूर्ति कर सके।

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

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

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

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

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

यहाँ यह बता दूँ, इन उच्च स्तर की भाषा (हाई-लेवेल लैंग्वेज) में सबसे पहले विकसित "फ़ोर्ट्रान" है...

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

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

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

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

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



आपकी टिप्पणी मेरे लिए मेरे लिए "अमोल" होंगी | आपके नकारत्मक व सकारत्मक विचारों का स्वागत किया जायेगा | Haw Can It के लेख पसंद आने पर कृपया Haw Can It ब्लॉग के समर्थक (Follower) बने। सादर धन्यवाद।।

3 comments: