आधुनिक 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 की ज़रूरत पड़ती है , और वे काफी हद तक इंसानों के समझने लायक भी नहीं होते ।
ऊपर दिए गए 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 का प्रयोग होता है, तो आपको इसकी जानकारी वहीँ दे दी जाएगी ।
![]() |
![]() |
![]() |
Very Helpfull Articless for all Learner CPP Buy The Thanks For Sharing Keep Up The Good Work
It's really useful article. You're really working hard! I appreciate your efforts and thanks for sharing with us!
Hi!
The hindi translation of learncpp is no longer maintained and lacks changes of the last couple of years. If you can read english, I advise you to read the english version of learncpp.
Yeah i can read English & Now i read the english version of learncpp.
Once again thank you very much for your advice.
learncpp really helpful website for beginner like me.
thank you. easy lessons