बाईटकोड

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

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

चूंकि बायटेकोड निर्देश सॉफ्टवेयर द्वारा संसाधित किए जाते हैं, वे मनमाने ढंग से जटिल हो सकते हैं, परंतु फिर भी अधिकांशतः पारंपरिक हार्डवेयर निर्देशों के समान होते हैं: वर्चुअल स्टैक मशीनें सबसे साधारण हैं, परंतु वर्चुअल रजिस्टर मशीनें भी बनाई गई हैं। अभिलक्ष्य प्रतिरूपक के समान, अलग-अलग खंडों को अधिकांशतः अलग-अलग फ़ाइलों में संग्रहीत किया जा सकता है, परंतु निष्पादन के समय गतिशील रूप से लोड किया जाता है।

निष्पादन
एक बायटेकोड प्रोग्राम को एक बार में एक निर्देश को पदव्याख्या करके और सीधे निष्पादित किया जा सकता है। इस प्रकार का बाइटकोड दुभाषिया बहुत पोर्टेबल है। कुछ प्रणालियाँ, जिन्हें डायनेमिक ट्रांसलेटर या जस्ट-इन-टाइम (JIT) कंपाइलर कहा जाता है, रनटाइम पर आवश्यकतानुसार मशीन कोड में बायटेकोड का अनुवाद करती हैं। वर्चुअल मशीन को हार्डवेयर-विशिष्ट बनाता है मं बायटेकोड की पोर्टेबिलिटी को नहीं खोता है। उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) और स्मॉलटाक कोड को सामान्यतः जेआईटी को निष्पादन से पहले बाइटकोड को मशीन कोड में अनुवाद करने के लिए संकलित किया जाता है। यह एक प्रोग्राम चलाने से पहले देरी का परिचय देता है, जब बायटेकोड को देशी मशीन कोड में संकलित किया जाता है, परंतु सीधे स्रोत कोड की व्याख्या करने की तुलना में निष्पादन की गति में पर्याप्त संशोधन होता है, सामान्य रूप से परिमाण के एक क्रम (10x) के आसपास होता है।

इसके प्रदर्शन लाभ के कारण, आज कई भाषा कार्यान्वयन प्रोग्राम को दो चरणों में निष्पादित करते हैं, पहले स्रोत कोड को बायटेकोड में संकलित करते हैं, और फिर बायटेकोड को वर्चुअल मशीन में पास करते हैं। जावा (प्रोग्रामिंग लैंग्वेज), राकू (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज), PHP, के लिए इस तरह की बायटेकोड आधारित वर्चुअल मशीनें हैं। Tcl, AWK और Forth (प्रोग्रामिंग लैंग्वेज) के लिए इस प्रकार की बायटेकोड आधारित वर्चुअल मशीनें हैं (चूंकि, फोर्थ को संभवतया ही कभी इस तरह से बायटेकोड के माध्यम से संकलित किया जाता है, और इसकी वर्चुअल मशीन इसके अतिरिक्त अधिक सामान्य है)। पर्ल और रूबी (प्रोग्रामिंग भाषा) 1.8 का कार्यान्वयन इसके अतिरिक्त स्रोत कोड से प्राप्त एक अमूर्त सिंटैक्स ट्री प्रतिनिधित्व को चलाकर काम करता है।

हाल ही में, V8 (जावास्क्रिप्ट इंजन) और डार्ट (प्रोग्रामिंग भाषा) के लेखकों ने इस धारणा को चुनौती दी है कि तेजी से और कुशल वीएम कार्यान्वयन के लिए इंटरमीडिएट बायटेकोड की आवश्यकता है। ये दोनों भाषा कार्यान्वयन वर्तमान में JIT संकलन को स्रोत कोड से मशीन कोड तक बिना किसी बायटेकोड मध्यस्थ के करते हैं।

उदाहरण
बीएएनसी स्टार प्रोग्रामिंग भाषा लैंग्वेज, मूल रूप से एक इंटरफेस-बिल्डिंग टूल के लिए बायटेकोड परंतु एक भाषा के रूप में भी उपयोग किया जाता है। <वाक्यविन्यास प्रकाश लैंग = लिस्प> (अलग करना '(लैम्ब्डा (एक्स) (प्रिंट एक्स)))  निम्न-स्तरीय बायटेकोड को डिबग करने के लिए एक अंतर्निहित टूल का उपयोग करके संकलित कोड का विश्लेषण और जांच की जा सकती है। टूल को शेल से इनिशियलाइज़ किया जा सकता है, उदाहरण के लिए: <वाक्यविन्यास लैंग = पिकॉन> >>> इम्पोर्ट डिस # डिस - पायथन बाइट कोड के डिस्सेम्बलर को मेमोनिक्स में। >>> डिस.डिस ('प्रिंट (हैलो, वर्ल्ड!)') 1 0 LOAD_NAME 0 (प्रिंट) 2 LOAD_CONST 0 ('हैलो, वर्ल्ड!') 4 कॉल_फंक्शन 1 6 RETURN_VALUE 
 * एक्शन स्क्रिप्ट वर्चुअल मशीन (एवीएम) में निष्पादित होता है, जो फ्लैश प्लेयर और अडोबे एयर का हिस्सा है। एक्शनस्क्रिप्ट कोड सामान्यतः एक कंपाइलर द्वारा बायटेकोड प्रारूप में बदल दिया जाता है। संकलक के उदाहरणों में एक एडोब फ्लैश प्रोफेशनल में निर्मित और एक एडोब फ्लैश बिल्डर में निर्मित और एडोब फ्लेक्स एसडीके में उपलब्ध है।
 * एडोब फ्लैश ऑब्जेक्ट्स
 * बर्कले पैकेट फ़िल्टर
 * बर्कले पास्कल
 * बाइट कोड इंजीनियरिंग लाइब्रेरी
 * सी टू जावा वर्चुअल मशीन कंपाइलर
 * सामान्य [[CLISP]] का सीएलआईएसपी कार्यान्वयन कई वर्षों तक केवल बाईटेकोड में संकलन करता था; चूंकि, अब यह GNU लाइटनिंग की सहायता से देशी कोड के संकलन का भी समर्थन करता है।
 * कॉमन लिस्प के सीएमयूसीएल और साइनीर कॉमन लिस्प कार्यान्वयन मूल कोड या बायटेकोड के लिए संकलित कर सकते हैं, जो कहीं अधिक संक्षिप्त है।
 * सामान्य मध्यवर्ती भाषा को सामान्य भाषा रनटाइम द्वारा निष्पादित किया जाता है, जिसका उपयोग .NET भाषाओं जैसे C Sharp (प्रोग्रामिंग लैंग्वेज) द्वारा किया जाता है।
 * डलविक (सॉफ़्टवेयर) बायटेकोड, जिसे ऐन्ड्रॉइड(ऑपरेटिंग सिस्टम) प्लेटफ़ॉर्म के लिए डिज़ाइन किया गया है, डलविक (सॉफ़्टवेयर) द्वारा निष्पादित किया जाता है।
 * इनफर्नो (ऑपरेटिंग सिस्टम) के लिए डिज़ाइन किया गया डिस बायटेकोड, डिस वर्चुअल मशीन द्वारा निष्पादित किया जाता है।
 * एफिल (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा के लिए एफिलस्टूडियो होता है।
 * EM, एम्स्टर्डम कंपाइलर किट वर्चुअल मशीन का उपयोग मध्यवर्ती संकलन भाषा और आधुनिक बायटेकोड भाषा के रूप में उपयोग की जाती है।
 * एमाक्स एक टेक्स्ट एडिटर है, जिसके अधिकांश कार्यों को एमाक्स लिस्प द्वारा कार्यान्वित किए जाते हैं, जो कि लिस्प (प्रोग्रामिंग भाषा) की अंतर्निहित बोली है। इन सुविधाओं को बायटेकोड में संकलित किया गया है। यह आर्किटेक्चर उपयोगकर्ताओं को उच्च स्तरीय भाषा के साथ संपादक को अनुकूलित करने की अनुमति देता है, जो बायटेकोड में संकलित करने के बाद उचित प्रदर्शन देता है।
 * कॉमन लिस्प का एम्बेड करने योग्य सामान्य लिस्प इम्प्लीमेंटेशन बायटेकोड या सी कोड को कंपाइल कर सकता है।
 * कॉमन लिस्प एक फंक्शन प्रदान करता है जो मानक आउटपुट को एक निर्दिष्ट फ़ंक्शन के अंतर्निहित कोड को प्रिंट करता है। परिणाम कार्यान्वयन-निर्भर है और बाइटकोड को हल कर सकता है या नहीं भी कर सकता है। इसका निरीक्षण डिबगिंग और अनुकूलन उद्देश्यों के लिए उपयोग किया जा सकता है। स्टील बैंक कॉमन लिस्प, उदाहरण के लिए, उत्पादन करता है:
 * (लैम्ब्डा (एक्स)) के लिए असंबद्ध
 * 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 की वर्चुअल मशीन (ईवीएम) एथेरियम (स्मार्ट कॉन्ट्रैक्ट्स) में लेनदेन निष्पादन के लिए अपने स्वयं के बायटेकोड का उपयोग करते हुए रनटाइम वातावरण है।
 * चिह्न (प्रोग्रामिंग भाषा) और यूनिकॉन (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा
 * इन्फोकॉम ने अपने सॉफ्टवेयर अनुप्रयोगों को और अधिक पोर्टेबल बनाने के लिए जेड-मशीन का इस्तेमाल किया
 * जावा बाइटकोड, जिसे जावा वर्चुअल मशीन द्वारा निष्पादित किया जाता है
 * ऑब्जेक्टवेब एएसएम
 * बीसीईएल
 * जावसवादी
 * कीको बायटेकोड का उपयोग ओबेरोन -2 प्रोग्रामिंग भाषा द्वारा इसे और ओबेरॉन ऑपरेटिंग सिस्टम को और अधिक पोर्टेबल बनाने के लिए किया गया।
 * कीबी (कमांड), एमएस-डॉस/पीसी डॉस कीबोर्ड ड्राइवर अपनी संसाधन फ़ाइल के साथ कीबोर्ड.एसवाईएस जिसमें लेआउट जानकारी और शॉर्ट पी-कोड मशीन|पी-कोड अनुक्रम निवासी ड्राइवर के अंदर एक दुभाषिया द्वारा निष्पादित होता है। * एलएलवीएम और
 * LSL, आभासी दुनिया में उपयोग की जाने वाली एक स्क्रिप्टिंग भाषा वर्चुअल मशीन पर चलने वाले बायटेकोड में संकलित होती है। सेकंड लाइफ का मूल मोनो संस्करण है, Inworldz ने Phlox संस्करण विकसित किया है।
 * लुआ (प्रोग्रामिंग भाषा) भाषा एक रजिस्टर-आधारित बायटेकोड वर्चुअल मशीन का उपयोग करती है
 * MATLAB भाषा का एम-कोड *Malbolge त्रिगुट आभासी मशीन के लिए एक गूढ़ प्रोग्रामिंग भाषा मशीन भाषा है।
 * पी-कोड मशीन#माइक्रोसॉफ्ट पी-कोड|विजुअल सी ++ और विजुअल बेसिक (क्लासिक) में प्रयुक्त माइक्रोसॉफ्ट पी-कोड
 * मल्टीप्लान * बीसीपीएल प्रोग्रामिंग भाषा का ओ-कोड
 * OCaml भाषा वैकल्पिक रूप से कॉम्पैक्ट बायटेकोड फॉर्म में संकलित होती है
 * पी-कोड मशीन | पास्कल (प्रोग्रामिंग भाषा) भाषा के यूसीएसडी पास्कल कार्यान्वयन का पी-कोड
 * तोता आभासी मशीन
 * ऑपरेटिंग सिस्टम चुनें को डेटा बेसिक या मल्टीवैल्यू#मल्टीवैल्यू डेटाबेसिक भी कहा जाता है
 * आआर (प्रोग्रामिंग भाषा) कंपाइलर पैकेज के माध्यम से एक बायटेकोड कंपाइलर प्रदान करता है, जो अब आर संस्करण 2.13.0 के साथ मानक है। R के इस संस्करण को संकलित करना संभव है ताकि आधार और अनुशंसित पैकेज इसका फायदा उठा सकें। * पिरामिड 2000 साहसिक खेल
 * पायथन (प्रोग्रामिंग लैंग्वेज) स्क्रिप्ट्स को पाइथन की बायटेकोड लैंग्वेज के निष्पादन पर संकलित किया जा रहा है, और संकलित फाइलों (.pyc) को स्क्रिप्ट के फोल्डर के अंदर कैश किया जाता है।
 * योजना 48 बायटेकोड दुभाषिया का उपयोग करके योजना का कार्यान्वयन
 * स्मॉलटाक भाषा के कई कार्यान्वयनों के बायटेकोड
 * पैरलैक्स प्रोपेलर#बिल्ट इन स्पिन बायटेकोड इंटरप्रेटर पैरालैक्स, इंक. (कंपनी) प्रोपेलर microcontroller में निर्मित
 * SQLite डेटाबेस इंजन SQL कथनों को पहले से आरक्षित बाइट-कोड प्रारूप में अनुवादित करता है। *एप्पल स्वीट 16
 * टीसीएल
 * IBM i#TIMI का उपयोग IBM i प्लेटफ़ॉर्म पर कंपाइलर्स द्वारा किया जाता है।
 * टाइनी बेसिक#वर्चुअल मशीन में कार्यान्वयन
 * विजुअल फॉक्सप्रो बायटेकोड में संकलित करता है
 * Webविधानसभा
 * YARV और Rubinius रूबी के लिए (प्रोग्रामिंग भाषा)
 * ZCODE

यह भी देखें

 * मध्यम प्रतिनिधित्व
 * प्लेटफ़ॉर्म (कंप्यूटिंग)
 * रनटाइम सिस्टम