बाईटकोड

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

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

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

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

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

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

उदाहरण
बीएएनसी स्टार प्रोग्रामिंग भाषा लैंग्वेज, मूल रूप से एक इंटरफेस-बिल्डिंग टूल के लिए बायटेकोड परंतु एक भाषा के रूप में भी उपयोग किया जाता है। निम्न-स्तरीय बायटेकोड को डिबग करने के लिए एक अंतर्निहित टूल का उपयोग करके संकलित कोड का विश्लेषण और जांच की जा सकती है। टूल को शेल से इनिशियलाइज़ किया जा सकता है, उदाहरण के लिए:
 * एक्शन स्क्रिप्ट वर्चुअल मशीन (एवीएम) में निष्पादित होता है, जो फ्लैश प्लेयर और अडोबे एयर का हिस्सा है। एक्शनस्क्रिप्ट कोड सामान्यतः एक कंपाइलर द्वारा बायटेकोड प्रारूप में बदल दिया जाता है। संकलक के उदाहरणों में एक एडोब फ्लैश प्रोफेशनल में निर्मित और एक एडोब फ्लैश बिल्डर में निर्मित और एडोब फ्लेक्स एसडीके में उपलब्ध है।
 * एडोब फ्लैश ऑब्जेक्ट्स
 * बर्कले पैकेट फ़िल्टर
 * बर्कले पास्कल
 * बाइट कोड इंजीनियरिंग लाइब्रेरी
 * सी टू जावा वर्चुअल मशीन कंपाइलर
 * सामान्य [[CLISP]] का सीएलआईएसपी कार्यान्वयन कई वर्षों तक केवल बाईटेकोड में संकलन करता था; चूंकि, अब यह GNU लाइटनिंग की सहायता से देशी कोड के संकलन का भी समर्थन करता है।
 * कॉमन लिस्प के सीएमयूसीएल और साइनीर कॉमन लिस्प कार्यान्वयन मूल कोड या बायटेकोड के लिए संकलित कर सकते हैं, जो कहीं अधिक संक्षिप्त है।
 * सामान्य मध्यवर्ती भाषा को सामान्य भाषा रनटाइम द्वारा निष्पादित किया जाता है, जिसका उपयोग .NET भाषाओं जैसे C Sharp (प्रोग्रामिंग लैंग्वेज) द्वारा किया जाता है।
 * डलविक (सॉफ़्टवेयर) बायटेकोड, जिसे ऐन्ड्रॉइड(ऑपरेटिंग सिस्टम) प्लेटफ़ॉर्म के लिए डिज़ाइन किया गया है, डलविक (सॉफ़्टवेयर) द्वारा निष्पादित किया जाता है।
 * इनफर्नो (ऑपरेटिंग सिस्टम) के लिए डिज़ाइन किया गया डिस बायटेकोड, डिस वर्चुअल मशीन द्वारा निष्पादित किया जाता है।
 * एफिल (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा के लिए एफिलस्टूडियो होता है।
 * EM, एम्स्टर्डम कंपाइलर किट वर्चुअल मशीन का उपयोग मध्यवर्ती संकलन भाषा और आधुनिक बायटेकोड भाषा के रूप में उपयोग की जाती है।
 * एमाक्स एक टेक्स्ट एडिटर है, जिसके अधिकांश कार्यों को एमाक्स लिस्प द्वारा कार्यान्वित किए जाते हैं, जो कि लिस्प (प्रोग्रामिंग भाषा) की अंतर्निहित बोली है। इन सुविधाओं को बायटेकोड में संकलित किया गया है। यह आर्किटेक्चर उपयोगकर्ताओं को उच्च स्तरीय भाषा के साथ संपादक को अनुकूलित करने की अनुमति देता है, जो बायटेकोड में संकलित करने के बाद उचित प्रदर्शन देता है।
 * कॉमन लिस्प का एम्बेड करने योग्य सामान्य लिस्प इम्प्लीमेंटेशन बायटेकोड या सी कोड को कंपाइल कर सकता है।
 * कॉमन लिस्प एक फंक्शन प्रदान करता है जो मानक आउटपुट को एक निर्दिष्ट फ़ंक्शन के अंतर्निहित कोड को प्रिंट करता है। परिणाम कार्यान्वयन-निर्भर है और बाइटकोड को हल कर सकता है या नहीं भी कर सकता है। इसका निरीक्षण डिबगिंग और अनुकूलन उद्देश्यों के लिए उपयोग किया जा सकता है। स्टील बैंक कॉमन लिस्प, उदाहरण के लिए, उत्पादन करता है:
 * एरलैंग (प्रोग्रामिंग भाषा) का एरिक्सन कार्यान्वयन बीईएएम बाइटकोड का उपयोग करता है
 * एथेरियम की वर्चुअल मशीन (ईवीएम) एथेरियम (स्मार्ट कॉन्ट्रैक्ट्स) में लेनदेन निष्पादन के लिए अपने स्वयं के बायटेकोड का उपयोग करते हुए रनटाइम वातावरण है।
 * आइकन और यूनिकॉन प्रोग्रामिंग लैंग्वेज है।
 * इन्फोकॉम ने अपने सॉफ्टवेयर अनुप्रयोगों को और अधिक पोर्टेबल बनाने के लिए जेड-मशीन का उपयोग किया जाता है।
 * जावा बाइटकोड, जिसे जावा वर्चुअल मशीन द्वारा निष्पादित किया जाता है
 * ऑब्जेक्टवेब एएसएम
 * बीसीईएल
 * जावसवादी
 * कीको बायटेकोड का उपयोग ओबेरोन -2 प्रोग्रामिंग भाषा द्वारा इसे और ओबेरॉन ऑपरेटिंग सिस्टम को और अधिक पोर्टेबल बनाने के लिए किया गया।
 * कीबी (कमांड), एमएस-डॉस/पीसी डॉस कीबोर्ड ड्राइवर अपनी संसाधन फ़ाइल के साथ कीबोर्ड.एसवाईएस जिसमें लेआउट की जानकारी होती है और रेजिडेंट ड्राइवर के अंदर एक इंटरप्रेटर द्वारा निष्पादित लघु पी-कोड अनुक्रम होता है। *
 * एलएलवीएम आईआर
 * LSL, आभासी दुनिया में उपयोग की जाने वाली एक स्क्रिप्टिंग भाषा वर्चुअल मशीन पर चलने वाले बायटेकोड में संकलित होती है। सेकंड लाइफ का मूल मोनो संस्करण है, इनवर्ल्डज़ ने फ्लाक्स संस्करण विकसित किया है।
 * लुआ भाषा एक रजिस्टर-आधारित बायटेकोड वर्चुअल मशीन का उपयोग करती है
 * माट लैब भाषा का एम-कोड है।
 * मालबोलगे त्रिगुट आभासी मशीन के लिए एक गूढ़ मशीन भाषा है।
 * विजुअल सी ++ और विजुअल बेसिक (क्लासिक) में प्रयुक्त माइक्रोसॉफ्ट पी-कोड होते है।
 * मल्टीप्लान
 * बीसीपीएल प्रोग्रामिंग भाषा का ओ-कोड
 * ओ कैमल भाषा वैकल्पिक रूप से कॉम्पैक्ट बायटेकोड फॉर्म में संकलित होती है
 * पास्कल भाषा के यूसीएसडी पास्कल कार्यान्वयन का पी-कोड है।
 * तोता आभासी मशीन
 * पिक बेसिक को डेटा बेसिक या मल्टीवैल्यू बेसिक भी कहा जाता है
 * सांख्यिकीय कंप्यूटिंग के लिए आर पर्यावरण कंपाइलर पैकेज के माध्यम से एक बायटेकोड कंपाइलर प्रदान करता है, जो अब आर संस्करण 2.13.0 के साथ मानक है। आर के इस संस्करण को संकलित करना संभव है इसलिये आधार और अनुशंसित पैकेज इसका लाभ उठाएं है *
 * पिरामिड 2000 साहसिक खेल
 * पायथन की बायटेकोड भाषा के निष्पादन पर पायथन स्क्रिप्ट को संकलित किया जा रहा है, और संकलित फ़ाइलें (.pyc) स्क्रिप्ट के फ़ोल्डर के अंदर कैश की गई हैं।
 * स्कीम 48 बायटेकोड दुभाषिया योजना का कार्यान्वयन करके उपयोग किया जाता है।
 * स्मॉलटाक भाषा के कई कार्यान्वयनों के बायटेकोड है।
 * पैरलैक्स प्रोपेलर माइक्रोकंट्रोलर में निर्मित में निर्मित स्पिन दुभाषिया है।
 * वर्ग लाइट डेटाबेस इंजन एसक्यूएल कथनों को पहले से आरक्षित बाइट-कोड प्रारूप में अनुवादित करता है। *
 * एप्पल स्वीट 16
 * टीसीएल
 * TIMI का उपयोग IBM i प्लेटफॉर्म पर कंपाइलर्स द्वारा किया जाता है।
 * टिनी बेसिक
 * विजुअल फॉक्सप्रो बायटेकोड में संकलित करता है
 * वेब असेंबली
 * रूबी के लिए यारव और रुबिनियस
 * जेड कोड

यह भी देखें

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