0.2
— Programming language का एक परिचय
आधुनिक computers
में
अत्यधिक तेजी से काम करने की क्षमता होती है । पर इस अविश्वश्नीय तेजी के साथ, computers में कुछ खामियाँ भी
हैं । Computer एक निश्चित सीमा तक
ही instructions को समझ सकता है और
इन्हें (computers को) बिलकुल सटीक तरह
से बताना ज़रूरी है की हमे इनसे क्या चाहिए, या हम computer
से क्या
करवाना चाहते हैं । Program (सामान्य भाषा में
जिसे application या software कहा जाता है) instructions का एक ऐसा set है, जो computer
को
बताता है की उन्हें (computers
को)
क्या करना है । Hardware computer
का वो
हिस्सा है, जो दिए गए instruction को execute करता है ।
Machine
Language या मशीनी भाषा
किसी computer का CPU, C++ को समझ पाने में असमर्थ है । Instructions का एक सिमित समूह जो CPU समझ सकता है, उसे machine
code (या machine
language या एक instruction
set) के नाम से जाना जाता है । ये instructions
किस तरह संयोजित या organize किये जाते हैं, ये इस परिचय के पहुँच से परे है, लेकिन यहाँ दो बातें ध्यान देने लायक हैं । पहला, हर एक instruction, binary digits का एक समूह होता है जिसमे केवल दो numbers:
0 या 1 हो सकते हैं । इन binary digits को bits(“binary digits” का छोटा रूप) कहा
जाता है । उदाहरण के लिए, MIPS architecture में दिए जाने वाले instruction set 32-bit तक ही सीमित हैं । दुसरे architectures, (जैसे की x86 machines, जो आप इस वक़्त use कर रहे हो) में दिए गए instructions variable
length यानि परिवर्तनशील सीमा के हो सकते है
।
x86
machine language में दिया गया एक instruction: 10110000 01100001
दूसरा, binary digits के हर एक set का translation CPU द्वारा instructions
के रूप में होता है जो computer को कोई विशेष काम करने का निर्देश देता है । जैसे दिए गए दो numbers को compare करना, या फिर उन numbers को किसी memory location में store करना आदि । आम तौर पर अलग-अलग किस्म के CPUs के instruction sets भी एक दुसरे से अलग
होते हैं , इसलिए instructions
का समूह जो किसी Pentium 4
CPU में run कर रहा हो, वो Macintosh
Power PC पर आधारित किसी computer पर run नहीं कर सकता ।
शुरुआत में जब computers का अविष्कार हुआ था,
programmers को उनके programs
machine language में लिखने होते थे, जो की काफी मुश्किल और समय बर्बाद करने वाला काम था ।
Assembly
Language
क्यूंकि machine language में programming करना काफी मुश्किल
था, assembly language का आविष्कार किया गया । किसी assembly language में, हर एक instruction
एक छोटे नाम से पहचाना जाता है (न की bits के sets के आधार पर), और variables भी numbers के बजाय उनके नाम से जाने जाते
हैं । ये खूबियां assembly को लिखने और समझने में काफी आसान बनाती है । फिर भी, एक CPU assembly language को directly नहीं समझ सकता । इसके लिए, एक assembler कि सहायता से assembly में लिखे गए instructions को machine language में बदला जाता है । Assembly languages वाकई में काफी तेज हैं और आज भी इनका प्रयोग उन conditions में किया जाता है, जहाँ performance की सख्त ज़रूरत होती है । जो भी हो, assembly language इतना तेज इसलिए है क्यूंकि ये किसी एक खास तरह के CPU के साथ मजबूती से जुड़ा है । इसका अर्थ है, किसी एक तरह के CPU के लिए assembly में लिखा गया program किसी दुसरे तरह के CPU में run नहीं कर सकता । इसके अलावे, assembly languages में किसी आसान task को पूरा करने के लिए भी ढेर सारे instructions की ज़रूरत पड़ती है , और वे काफी हद तक इंसानों के समझने लायक भी नहीं होते ।
हैं । ये खूबियां assembly को लिखने और समझने में काफी आसान बनाती है । फिर भी, एक CPU assembly language को directly नहीं समझ सकता । इसके लिए, एक assembler कि सहायता से assembly में लिखे गए instructions को machine language में बदला जाता है । Assembly languages वाकई में काफी तेज हैं और आज भी इनका प्रयोग उन conditions में किया जाता है, जहाँ performance की सख्त ज़रूरत होती है । जो भी हो, assembly language इतना तेज इसलिए है क्यूंकि ये किसी एक खास तरह के CPU के साथ मजबूती से जुड़ा है । इसका अर्थ है, किसी एक तरह के CPU के लिए assembly में लिखा गया program किसी दुसरे तरह के CPU में run नहीं कर सकता । इसके अलावे, assembly languages में किसी आसान task को पूरा करने के लिए भी ढेर सारे instructions की ज़रूरत पड़ती है , और वे काफी हद तक इंसानों के समझने लायक भी नहीं होते ।
ऊपर दिए गए instruction को assembly language में कुछ इस तरह से
लिखा जाता है: mov al,
061h
High-level
Languages
इन सभी कमियों को दूर करने के लिए, high-level
programming languages का आविष्कार किया
गया । C, C++, Pascal, Java, Javascript, और Perl ये सभी high
level languages की श्रेणी में आते
हैं । High level languages, programmers को उनके programs किन computers पर चलाये जायेंगे, इस बात की चिंता किये बगैर programming करने की अनुमति देते हैं । High level languages में लिखे गए programs को एक ऐसी भाषा में translate होना होता है, जिसे CPU समझकर execute कर सके । High level languages का ऐसा translation दो मुख्य तरीकों से होता है: compiling और interpreting.
Compiler एक ऐसा program है, जो codes को read कर एक स्वचालित executable
program देता है, जिसे CPU सीधे-सीधे समझ सकता
है । एक बार यदि लिखा गया code एक executable में बदल गया, तो इसे run करने के लिए वापस compile करने की ज़रूरत नहीं पड़ती । आपको ये लग सकता है की high
level languages assembly के मुकाबले कम efficient
होते हैं, पर आजकल के compilers किसी high level language को अत्यधिक fast
executable में बदलने में बेहतरीन भूमिका निभाते
हैं । कभी-कभी तो ये executables, इंसानों द्वारा assembly language में लिखे गए programs से भी बेहतर काम करते हैं!
Compiling
process का एक आसान सा प्रतिरूप नीचे दिखाया
गया है:


Interpreter एक ऐसा program है जो आपके codes को बिना compile किये सीधे machine code में बदल देता है । Interpreters बहुत ज्यादा flexible प्रतीत हो सकते हैं, लेकिन programs को run करते वक़्त वे कम
उपयुक्त साबित होते हैं क्यूंकि interpreting की पूरी प्रक्रिया हर बार program को run करते समय दोहराई
जाती है । इसका मतलब है जब भी program को run करना होगा, हमे interpreter की ज़रूरत पड़ेगी ।
Interpretation
process का एक आसान सा प्रतिरूप नीचे दिखाया
गया है:


कोई भी programming language को compile या interpret
किया जा सकता है, फिर भी C, C++, और Pascal जैसे languages
को compile किया जाता है । वहीँ “scripting” languages जैसे की Perl और Javascript का interpretation
होता है । कुछ languages,
जैसे Java, इन दोनों को एकसाथ इस्तेमाल करता है ।
High
level languages के कुछ आकर्षक गुण हैं:
पहला, high level languages लिखने और समझने में काफी आसान होते हैं ।
ऊपर दिए गए instruction को C/C++ में कुछ इस तरह से
लिखा जाता है: a = 97;
दूसरा, इस तरह के languages
में कोई task पूरा करने में low level languages के मुकाबले काफी कम instructions की ज़रूरत पड़ती है । C++ में आप एक ही line में कुछ ऐसा लिख सकते हो a = b * 2 + 5; । Assembly language में इसे करने के
लिए 5 या 6 अलग-अलग instructions देने होंगे ।
तीसरा, आपको high
level languages में programming
करते वक़्त,
variables को CPU
registers में load करना, और ऐसी ही कई और चीजों की चिंता करने
की ज़रूरत नहीं पड़ती । Compiler या interpreter आपके लिए इन सब
चीजों का ध्यान रखती है ।
और चौथा, high level language के codes अलग-अलग machine
architectures में ले जाने के काबिल होते हैं ।
लेकिन इसमें कुछ exceptions हैं जिसके बारे में
हम कुछ ही देर में चर्चा करेंगे ।

Portability
अर्थात् codes को एक से दुसरे architecture में ले जाने के लिए exception ये है, की कुछ platforms,
जैसे की Microsoft
Windows, platform-specific functions पर आधारित होते है जिनका उपयोग आप केवल उन्हीं platforms
पर programming
करते वक़्त कर सकते हो । ये functions
उन्हीं platforms
में programming
के लिए specially
designed होते हैं । Platform
specific functions, किसी दिए गए platform पर programming करना आसान तो ज़रूर
बनाते हैं, पर program की portability खोने की कीमत पर । इन
tutorials के दौरान यदि किसी platform-specific
function का प्रयोग होता है, तो आपको इसकी जानकारी वहीँ दे दी जाएगी ।

No comments:
Post a Comment