बाईटकोड: Difference between revisions
No edit summary |
No edit summary |
||
| Line 8: | Line 8: | ||
बाइटकोड (जिसे पोर्टेबल कोड या पी-कोड भी कहा जाता है{{Citation needed|date=May 2021|reason=use of P-code as a generic term}}) एक सॉफ्टवेयर इंटरप्रेटर (कंप्यूटिंग) द्वारा कुशल निष्पादन के लिए डिज़ाइन किए गए निर्देश सेट का एक रूप है। [[मानव-पठनीय कोड]] <ref name="Dynamic_Machine_Code"/>स्रोत कोड के विपरीत, [[Index.php?title=बाइटकोड|बाइटकोड]] संक्षिप्त संख्यात्मक कोड, स्थिरांक और संदर्भ (सामान्य रूप से संख्यात्मक व्याख्यान) होते हैं जो प्रोग्राम वस्तुओ के प्रकार, स्कोप और नेस्टिंग डेप्थ जैसी चीजों का [[शब्दार्थ विश्लेषण (संकलक)]] करते हैं। | बाइटकोड (जिसे पोर्टेबल कोड या पी-कोड भी कहा जाता है{{Citation needed|date=May 2021|reason=use of P-code as a generic term}}) एक सॉफ्टवेयर इंटरप्रेटर (कंप्यूटिंग) द्वारा कुशल निष्पादन के लिए डिज़ाइन किए गए निर्देश सेट का एक रूप है। [[मानव-पठनीय कोड]] <ref name="Dynamic_Machine_Code"/>स्रोत कोड के विपरीत, [[Index.php?title=बाइटकोड|बाइटकोड]] संक्षिप्त संख्यात्मक कोड, स्थिरांक और संदर्भ (सामान्य रूप से संख्यात्मक व्याख्यान) होते हैं जो प्रोग्राम वस्तुओ के प्रकार, स्कोप और नेस्टिंग डेप्थ जैसी चीजों का [[शब्दार्थ विश्लेषण (संकलक)]] करते हैं। | ||
बायटेकोड नाम निर्देश सेट से उत्पन्न होता है जिसमें एक-बाइट [[ | बायटेकोड नाम निर्देश सेट से उत्पन्न होता है जिसमें एक-बाइट [[Index.php?title=ऑपकोड|ऑपकोड]] होता है जिसके बाद वैकल्पिक पैरामीटर होते हैं। [[दुभाषिया (कंप्यूटर सॉफ्टवेयर)]] को आसान बनाने के लिए [[प्रोग्रामिंग भाषा]] कार्यान्वयन द्वारा इंटरमीडिएट प्रतिनिधित्व जैसे बायटेकोड आउटपुट हो सकता है, या इसका उपयोग विभिन्न उपकरणों पर समान कोड को [[Index.php?title=क्रॉस-प्लेटफ़ॉर्म|क्रॉस-प्लेटफ़ॉर्म]] चलाने की अनुमति देकर हार्डवेयर और [[ऑपरेटिंग सिस्टम]] निर्भरता को कम करने के लिए किया जा सकता है। बायटेकोड को अधिकांशतः या तो सीधे एक [[आभासी मशीन]] (एक [[पी-कोड मशीन]], यानी, दुभाषिया) पर निष्पादित किया जा सकता है, या इसे बेहतर प्रदर्शन के लिए [[मशीन कोड]] में आगे संकलित किया जा सकता है। | ||
चूंकि बायटेकोड निर्देश सॉफ्टवेयर द्वारा संसाधित किए जाते हैं, वे मनमाने ढंग से जटिल हो सकते हैं, | चूंकि बायटेकोड निर्देश सॉफ्टवेयर द्वारा संसाधित किए जाते हैं, वे मनमाने ढंग से जटिल हो सकते हैं, परंतु फिर भी अधिकांशतः पारंपरिक हार्डवेयर निर्देशों के समान होते हैं: वर्चुअल [[Index.php?title=स्टैक मशीनें|स्टैक मशीनें]] सबसे साधारण हैं, परंतु वर्चुअल [[Index.php?title=रजिस्टर मशीनें|रजिस्टर मशीनें]] भी बनाई गई हैं।<ref name="Jucs_Lua"/><ref name="Dalvik"/> [[Index.php?title= अभिलक्ष्य प्रतिरूपक|अभिलक्ष्य प्रतिरूपक]] के समान, अलग-अलग खंडों को अधिकांशतः अलग-अलग फ़ाइलों में संग्रहीत किया जा सकता है, परंतु निष्पादन के समय गतिशील रूप से बहुतायत किया जाता है। | ||
== निष्पादन == | == निष्पादन == | ||
Revision as of 10:42, 24 February 2023
| कार्यक्रम निष्पादन |
|---|
| सामान्य अवधारणाएँ |
| कोड के प्रकार |
| संकलन रणनीतियाँ |
| उल्लेखनीय रनटाइम्स |
|
| उल्लेखनीय संकलक और टूलचेन |
|
बाइटकोड (जिसे पोर्टेबल कोड या पी-कोड भी कहा जाता है[citation needed]) एक सॉफ्टवेयर इंटरप्रेटर (कंप्यूटिंग) द्वारा कुशल निष्पादन के लिए डिज़ाइन किए गए निर्देश सेट का एक रूप है। मानव-पठनीय कोड [1]स्रोत कोड के विपरीत, बाइटकोड संक्षिप्त संख्यात्मक कोड, स्थिरांक और संदर्भ (सामान्य रूप से संख्यात्मक व्याख्यान) होते हैं जो प्रोग्राम वस्तुओ के प्रकार, स्कोप और नेस्टिंग डेप्थ जैसी चीजों का शब्दार्थ विश्लेषण (संकलक) करते हैं।
बायटेकोड नाम निर्देश सेट से उत्पन्न होता है जिसमें एक-बाइट ऑपकोड होता है जिसके बाद वैकल्पिक पैरामीटर होते हैं। दुभाषिया (कंप्यूटर सॉफ्टवेयर) को आसान बनाने के लिए प्रोग्रामिंग भाषा कार्यान्वयन द्वारा इंटरमीडिएट प्रतिनिधित्व जैसे बायटेकोड आउटपुट हो सकता है, या इसका उपयोग विभिन्न उपकरणों पर समान कोड को क्रॉस-प्लेटफ़ॉर्म चलाने की अनुमति देकर हार्डवेयर और ऑपरेटिंग सिस्टम निर्भरता को कम करने के लिए किया जा सकता है। बायटेकोड को अधिकांशतः या तो सीधे एक आभासी मशीन (एक पी-कोड मशीन, यानी, दुभाषिया) पर निष्पादित किया जा सकता है, या इसे बेहतर प्रदर्शन के लिए मशीन कोड में आगे संकलित किया जा सकता है।
चूंकि बायटेकोड निर्देश सॉफ्टवेयर द्वारा संसाधित किए जाते हैं, वे मनमाने ढंग से जटिल हो सकते हैं, परंतु फिर भी अधिकांशतः पारंपरिक हार्डवेयर निर्देशों के समान होते हैं: वर्चुअल स्टैक मशीनें सबसे साधारण हैं, परंतु वर्चुअल रजिस्टर मशीनें भी बनाई गई हैं।[2][3] अभिलक्ष्य प्रतिरूपक के समान, अलग-अलग खंडों को अधिकांशतः अलग-अलग फ़ाइलों में संग्रहीत किया जा सकता है, परंतु निष्पादन के समय गतिशील रूप से बहुतायत किया जाता है।
निष्पादन
एक बायटेकोड प्रोग्राम को एक बार में एक निर्देश को पार्स करके और सीधे निष्पादित करके निष्पादित किया जा सकता है। इस प्रकार का बाइटकोड दुभाषिया बहुत पोर्टेबल है। कुछ प्रणालियाँ, जिन्हें डायनेमिक ट्रांसलेटर कहा जाता है, या समय-समय पर संकलन | जस्ट-इन-टाइम (JIT) कंपाइलर, रन टाइम (प्रोग्राम जीवनचक्र चरण) में आवश्यकतानुसार मशीन कोड में बायटेकोड का अनुवाद करते हैं। यह वर्चुअल मशीन को हार्डवेयर-विशिष्ट बनाता है लेकिन बायटेकोड की पोर्टेबिलिटी को नहीं खोता है। उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) और स्मॉलटाक कोड को आमतौर पर बायटेकोड प्रारूप में संग्रहीत किया जाता है, जिसे आमतौर पर जेआईटी को निष्पादन से पहले मशीन कोड में बायटेकोड का अनुवाद करने के लिए संकलित किया जाता है। यह एक प्रोग्राम चलाने से पहले देरी का परिचय देता है, जब बायटेकोड को देशी मशीन कोड में संकलित किया जाता है, लेकिन सीधे स्रोत कोड की व्याख्या करने की तुलना में निष्पादन की गति में काफी सुधार होता है, आमतौर पर परिमाण के एक क्रम (10x) के आसपास।[4]
इसके प्रदर्शन लाभ के कारण, आज कई भाषा कार्यान्वयन प्रोग्राम को दो चरणों में निष्पादित करते हैं, पहले स्रोत कोड को बायटेकोड में संकलित करते हैं, और फिर बायटेकोड को वर्चुअल मशीन में पास करते हैं। जावा (प्रोग्रामिंग लैंग्वेज), राकू (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज), PHP, के लिए इस तरह की बायटेकोड आधारित वर्चुअल मशीनें हैं।[lower-alpha 1] Tcl, AWK और Forth (प्रोग्रामिंग लैंग्वेज) (हालांकि, फोर्थ को शायद ही कभी इस तरह से बायटेकोड के माध्यम से संकलित किया जाता है, और इसकी वर्चुअल मशीन इसके बजाय अधिक सामान्य है)। पर्ल और रूबी (प्रोग्रामिंग भाषा) 1.8 का कार्यान्वयन इसके बजाय स्रोत कोड से प्राप्त एक अमूर्त सिंटैक्स ट्री प्रतिनिधित्व को चलाकर काम करता है।
हाल ही में, V8 (जावास्क्रिप्ट इंजन) के लेखक[1]और डार्ट (प्रोग्रामिंग भाषा)[7]ने इस धारणा को चुनौती दी है कि तेजी से और कुशल वीएम कार्यान्वयन के लिए इंटरमीडिएट बायटेकोड की आवश्यकता है। ये दोनों भाषा कार्यान्वयन वर्तमान में जेआईटी संकलन को स्रोत कोड से मशीन कोड तक बिना किसी बायटेकोड मध्यस्थ के करते हैं।[8]
उदाहरण
- ActionScript एक्शनस्क्रिप्ट वर्चुअल मशीन (एवीएम) में निष्पादित होता है, जो फ्लैश प्लेयर और अडोबे एयर का हिस्सा है। एक्शनस्क्रिप्ट कोड आमतौर पर एक कंपाइलर द्वारा बायटेकोड प्रारूप में बदल दिया जाता है। संकलक के उदाहरणों में एक Adobe Flash Professional में निर्मित और एक Adobe Flash Builder में निर्मित और Apache Flex में उपलब्ध है।
- एडोब फ्लैश ऑब्जेक्ट्स
BANCStar प्रोग्रामिंग भाषा लैंग्वेज, मूल रूप से एक इंटरफेस-बिल्डिंग टूल के लिए बायटेकोड लेकिन एक भाषा के रूप में भी इस्तेमाल किया जाता है
- बर्कले पैकेट फ़िल्टर
- बर्कले पास्कल[9]
- बाइट कोड इंजीनियरिंग लाइब्रेरी
- सी टू जावा वर्चुअल मशीन कंपाइलर
- [[सामान्य CLISP]] का सीएलआईएसपी कार्यान्वयन कई वर्षों तक केवल बाईटेकोड में संकलन करता था; हालाँकि, अब यह GNU लाइटनिंग की मदद से देशी कोड के संकलन का भी समर्थन करता है
- कॉमन लिस्प के सीएमयूसीएल और साइनीर कॉमन लिस्प कार्यान्वयन या तो मूल कोड या बायटेकोड के लिए संकलित कर सकते हैं, जो कहीं अधिक कॉम्पैक्ट है
- सामान्य मध्यवर्ती भाषा को सामान्य भाषा रनटाइम द्वारा निष्पादित किया जाता है, जिसका उपयोग .NET भाषाओं जैसे C Sharp (प्रोग्रामिंग लैंग्वेज) द्वारा किया जाता है। C#
- Dalvik (सॉफ़्टवेयर) बायटेकोड, जिसे Android (ऑपरेटिंग सिस्टम) प्लेटफ़ॉर्म के लिए डिज़ाइन किया गया है, Dalvik (सॉफ़्टवेयर) द्वारा निष्पादित किया जाता है
- इनफर्नो (ऑपरेटिंग सिस्टम) के लिए डिज़ाइन किया गया डिस बायटेकोड, डिस वर्चुअल मशीन द्वारा निष्पादित किया जाता है
- एफिल (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा के लिए एफिलस्टूडियो
- EM, एम्स्टर्डम संकलक किट वर्चुअल मशीन का उपयोग मध्यवर्ती संकलन भाषा और आधुनिक बायटेकोड भाषा के रूप में किया जाता है
- Emacs एक टेक्स्ट एडिटर है, जिसके अधिकांश कार्य Emacs Lisp द्वारा कार्यान्वित किए जाते हैं, इसकी लिस्प (प्रोग्रामिंग भाषा) की अंतर्निहित बोली है। इन सुविधाओं को बायटेकोड में संकलित किया गया है। यह आर्किटेक्चर उपयोगकर्ताओं को उच्च स्तरीय भाषा के साथ संपादक को अनुकूलित करने की अनुमति देता है, जो बायटेकोड में संकलित करने के बाद उचित प्रदर्शन देता है।
- कॉमन लिस्प का एम्बेड करने योग्य सामान्य लिस्प इम्प्लीमेंटेशन बायटेकोड या सी कोड को कंपाइल कर सकता है
- कॉमन लिस्प प्रदान करता है a
disassembleसमारोह[10] जो किसी निर्दिष्ट फ़ंक्शन के अंतर्निहित कोड को मानक आउटपुट पर प्रिंट करता है। नतीजा कार्यान्वयन-निर्भर है और बाइटकोड को हल कर सकता है या नहीं भी कर सकता है। इसका निरीक्षण डिबगिंग और अनुकूलन उद्देश्यों के लिए उपयोग किया जा सकता है।[11] स्टील बैंक कॉमन लिस्प, उदाहरण के लिए, उत्पादन करता है:
<वाक्यविन्यास प्रकाश लैंग = लिस्प> (अलग करना '(लैम्ब्डा (एक्स) (प्रिंट एक्स)))
- (लैम्ब्डा (एक्स)) के लिए disassembly
- 2436F6DF
- 850500000F22 टेस्ट EAX, [#x220F0000]; नो-आर्ग-पार्सिंग प्रवेश बिंदु
- E5
- 8BD6 MOV EDX, ESI
- E7
- 8B05A8F63624 MOV EAX, [#x2436F6A8]; #<प्रिंट के लिए FDEFINITION वस्तु>
- ईडी
- B904000000 MOV ECX, 4
- F2
- FF7504 पुश DWORD PTR [EBP+4]
- F5
- FF6005 JMP DWORD PTR [EAX+5]
- F8
- CC0A BREAK 10; त्रुटि जाल
- एफए
- 02 बाइट #X02
- एफबी
- 18 बाइट #X18; अमान्य-आर्ग-गणना-त्रुटि
- एफसी
- 4F बाइट #X4F ; ईसीएक्स
</वाक्यविन्यास हाइलाइट>
- एरलैंग (प्रोग्रामिंग भाषा) का एरिक्सन कार्यान्वयन बीईएएम बाइटकोड का उपयोग करता है
- Ethereum की वर्चुअल मशीन (ईवीएम) एथेरियम (स्मार्ट कॉन्ट्रैक्ट्स) में लेनदेन निष्पादन के लिए अपने स्वयं के बायटेकोड का उपयोग करते हुए रनटाइम वातावरण है।
- चिह्न (प्रोग्रामिंग भाषा)[12]और यूनिकॉन (प्रोग्रामिंग भाषा)[13]प्रोग्रामिंग भाषा
- इन्फोकॉम ने अपने सॉफ्टवेयर अनुप्रयोगों को और अधिक पोर्टेबल बनाने के लिए जेड-मशीन का इस्तेमाल किया
- जावा बाइटकोड, जिसे जावा वर्चुअल मशीन द्वारा निष्पादित किया जाता है
- ऑब्जेक्टवेब एएसएम
- बीसीईएल
- जावसवादी
- कीको बायटेकोड का उपयोग