एप्लीकेशन वर्चुअलाइजेशन सॉफ्टवेयर की तुलना

From alpha
Jump to navigation Jump to search

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

आभासी मशीनों की तुलना

जावास्क्रिप्ट मशीनें सम्मिलित नहीं हैं। उन्हें खोजने के लिए ईसीएमए स्क्रिप्ट इंजनों की सूची देखें।

यहां दी गई तालिका उन तत्वों को सारांशित करती है जिनके लिए वर्चुअल मशीन डिज़ाइन कुशल होने का इरादा है, न कि किसी कार्यान्वयन में उपस्थित क्षमताओं की सूची।

आभासी मशीन मशीन मॉडल स्मृति प्रबंधन कोड सुरक्षा दुभाषिया जेआईटी एओटी साझा पुस्तकालय सामान्य भाषा

वस्तु मॉडल

गतिशील टाइपिंग
एंड्रॉइड रनटाइम (एआरटी) पंजीकृत स्वचालित Yes Yes Yes Yes ? Yes Yes
सामान्य भाषा रनटाइम (सीएलआर) ढेर स्वचालित या मैनुअल Yes Yes Yes Yes Yes Yes Yes
डिस (इन्फर्नो) पंजीकृत स्वचालित Yes Yes Yes Yes Yes Yes Yes
डॉटजीएनयू पोर्टेबल.नेट ढेर स्वचालित या मैनुअल Yes Yes Yes Yes Yes Yes No
जावा वर्चुअल मशीन (जेवीएम) ढेर स्वचालित Yes Yes Yes Yes Yes Yes Yes[1]
जाइक्स आरवीएम ढेर स्वचालित Yes Yes Yes Yes ? Yes Yes
एलएलवीएम पंजीकृत मैनुअल No Yes Yes Yes Yes Yes No
मोनो ढेर स्वचालित या मैनुअल Yes Yes Yes Yes Yes Yes Yes
तोता पंजीकृत स्वचालित No Yes No[2] Yes Yes Yes Yes
डैलविक पंजीकृत स्वचालित Yes Yes Yes No ? No No
चीख़ ढेर स्वचालित No Yes Yes No Yes No Yes
बीम (एरलांग) पंजीकृत स्वचालित ? Yes Yes Yes Yes Yes Yes
मूर वीएम पंजीकृत स्वचालित ? Yes Yes Yes Yes Yes Yes

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

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

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

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

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

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

साझा पुस्तकालय कई चल रहे कार्यक्रमों में देशी कोड के खंडों का पुन: उपयोग करने की सुविधा है। आधुनिक ऑपरेटिंग सिस्टम में, इसका सामान्यतः अर्थ होता है कि स्मृति सुरक्षा के माध्यम से एक दूसरे से सुरक्षित विभिन्न प्रक्रियाओं में साझा लाइब्रेरी वाले मेमोरी पेजों को साझा करने के लिए आभासी मेमोरी का उपयोग करना। यह दिलचस्प है कि एडाप्टिव ऑप्टिमाइज़ेशन जैसे आक्रामक जेआईटी तरीके प्रायः कोड के टुकड़े उत्पन्न करते हैं जो प्रक्रियाओं या प्रोग्राम के क्रमिक रन में साझा करने के लिए अनुपयुक्त होते हैं, जिसके लिए प्रीकंपाइल और साझा कोड की क्षमता और अनुकूली विशेष कोड के फायदों के बीच एक ट्रेडऑफ की आवश्यकता होती है। उदाहरण के लिए, सीआईएल के कई डिज़ाइन प्रावधान कुशल साझा पुस्तकालयों की अनुमति देने के लिए उपलब्ध हैं, संभवतः अधिक विशिष्ट जेआईटी कोड की कीमत पर। ओएस एक्स पर जेवीएम कार्यान्वयन जावा साझा पुस्तकालयों के कुछ लाभ प्रदान करने के लिए जावा साझा संग्रह[3] का उपयोग करता है।

एप्लिकेशन वर्चुअल मशीन कार्यान्वयन की तुलना

ऊपर वर्णित पोर्टेबल वर्चुअल मशीनों के अलावा, वर्चुअल मशीनों का उपयोग प्रायः व्यक्तिगत स्क्रिप्टिंग भाषाओं के निष्पादन मॉडल के रूप में किया जाता है, सामान्यतः दुभाषिया द्वारा। यह तालिका उपरोक्त पोर्टेबल वर्चुअल मशीन और स्क्रिप्टिंग भाषा वर्चुअल मशीन दोनों के विशिष्ट वर्चुअल मशीन कार्यान्वयन को सूचीबद्ध करती है।

आभासी मशीन भाषाएँ टिप्पणियाँ दुभाषिया जेआईटी कार्यान्वयन भाषा कोड की स्रोत पंक्तियाँ
सामान्य भाषा रनटाइम (सीएलआर) सी#, सी++/सीएलआई, एफ#, वीबी.नेट बाइटकोड सीआईएल है; GitHub पर .NET कोर रनटाइम No Yes सी#, सी++
एडोब फ्लैश प्लेयर (उर्फ टैमारिन) एक्शनस्क्रिप्ट, एसडब्ल्यूएफ (फ़ाइल प्रारूप) इंटरैक्टिव वेब संलेखन उपकरण। बाइटकोड का नाम "एक्शनस्क्रिप्ट बाइट कोड (.abc)" है Yes Yes सी++ 135k (प्रारम्भ में जारी)
डिस (इन्फर्नो) लीम्बो डिस आभासी मशीन विशिष्टता Yes Yes सी 15k + 2850 प्रति JIT आर्क + 500 प्रति होस्ट ओएस
डॉटजीएनयू-पोर्टेबल.नेट सीएलआई भाषाओं सहित: सी# सामान्य भाषा रनटाइम क्लोन No Yes सी, सी#
फोर्थ फोर्थ सुविधाओं को सरलीकृत किया जाता है, प्रायः असेंबलर, कंपाइलर, टेक्स्ट-लेवल और बाइनरी-लेवल इंटरप्रेटर, कभी-कभी संपादक, डीबगर और ओएस शामिल होते हैं। संकलन गति >20 SKLOC/S हैं और जेआईटी की तरह व्यवहार करती हैं। Yes No फोर्थ, फोर्थ असेम्बलर 2.8 के से 5.6 के; उन्नत, व्यावसायिक कार्यान्वयन छोटे हैं।
ग्लल्क्स सूचित 6, सूचित 7, अन्य Yes No विभिन्न कार्यान्वयन विद्यमान हैं
एचएचवीएम पीएचपी, हैक एक ओपन-सोर्स आभासी मशीन है जिसे हैक और पीएचपी में लिखे प्रोग्राम को क्रियान्वित करने के लिए डिज़ाइन किया गया है। Yes Yes सी++, OCaml
आइकन आइकन आधार स्रोत कोड दोनों दुभाषिया के साथ-साथ एक असमर्थित संकलन-से-सी संस्करण प्रदान करता है। रनटाइम कोड, जिसे संकलक और दुभाषिया के बीच साझा किया जाता है, C के एक संस्करण में लिखा जाता है जिसे RTT कहा जाता है। Yes No सी, आरटीटी (सी के लिए एक कस्टम फ्रंट-एंड, आइकन के लिए आधार स्रोत के साथ प्रदान किया गया)। ~ 180k कुल। (बायटेकोड का स्रोत: ~11k, बाइटकोड दुभाषिया: ~46k, आइकनc: ~23k, सामान्य/हेडर: ~13k, rtt: ~15k)
जेवीएम जावा, कोटलिन, ज्योथन, ग्रूवी, जेरुबी, सी, सी ++, क्लोजर, स्काला और कई अन्य सूर्य द्वारा संदर्भ कार्यान्वयन; ओपनजेडीके: जीपीएल के तहत कोड; आइस्ड टी: जीपीएल के तहत कोड और टूल्स Yes Yes JDK, OpenJDK और आइस्ड टी नियमित जेआईटी के साथ: Java, C, C++, ASM; आइस्ड टी with the "Zero" JIT : Java, C, C++ जेवीएम लगभग 6500k लाइनें हैं; TCK 80k परीक्षण और लगभग 1000k लाइनें हैं
एलएलवीएम सी, सी ++, कोटलिन, ऑब्जेक्टिव-सी, स्विफ्ट, एडा, फोरट्रान और रस्ट एमएसआईएल, C और C++ आउटपुट समर्थित हैं। एक्शन स्क्रिप्ट बाइट कोड आउटपुट एडोब कीमिया द्वारा समर्थित है। बाइटकोड का नाम "एलएलवीएम बाइटकोड (.बीसी)" है। असेंबली का नाम "एलएलवीएम असेंबली लैंग्वेज (*.ll)" रखा गया है। Yes Yes सी++ 811k [4]
लुआ लुआ Yes लुआ जेआईटी सी 13k + 7k LuaJIT
एमएमआईएक्स एममिक्सल
मोनो सीएलआई भाषाओं सहित: C#, VB.NET, आयरनपायथन, आयरनरूबी, और अन्य सामान्य भाषा रनटाइम क्लोन Yes Yes सी#, सी 2332k
नेकोवीएम वर्तमान में नेको और हैक्स Yes x86 only सी 46k
ओजेड ओजेड, ऐलिस
ओ-कोड मशीन बीसीपीएल
पी-कोड मशीन पास्कल यूसीएसडी पास्कल, 70 के दशक के अंत में एप्पल II सहित व्यापक रूप से फैला हुआ था Yes No असेंबली, पास्कल
तोता पर्ल 5, राकू, एनक्यूपी-आरएक्स, पीआईआर, पीएएसएम, पीबीसी, बेसिक, बीसी, सी99, ईसीएमएस्क्रिप्ट, लिस्प, लुआ, एम4, टीसीएल, डब्ल्यूएमएलस्क्रिप्ट, एक्सएमएल और अन्य Yes Yes सी, पर्ल 111k C, 240k पर्ल
पर्ल आभासी मशीन पर्ल ओप-कोड ट्री वॉकर Yes No सी, पर्ल 175k C, 9k पर्ल
सीपीथॉन पायथन Yes सी 387के सी, 368के पायथन, 10के एएसएम, 31के साइको
पीवाईपीवाई पायथन सेल्फ-होस्टिंग कार्यान्वयन, साइको की अगली पीढ़ी Yes Yes पायथन
रुबिनियस रूबी अन्य रूबी कार्यान्वयन के लिए आभासी मशीन Yes Yes सी++, रूबी
सिल्वरलाइट C#, VB.NET माइक्रोसॉफ्ट .NET फ्रेमवर्क का एक माइक्रो-संस्करण है जो एप्लिकेशन को ब्राउज़र के अंदर सैंडबॉक्स चलाने देता है Yes Yes सी++ 7 एमबी (प्रारम्भ में जारी)
स्कमवीएम स्कम कंप्यूटर गेम इंजन
एसईसीडी आईएसडब्ल्यूआईएम, लिस्पकिट लिस्प
गिलहरी गिलहरी Yes गिलहरी_जेआईटी सी++ 12k
लघु वार्ता लघु वार्ता
एस क्यू lite एस क्यूLite ऑपकोड आभासी डेटाबेस इंजन
चीख़ स्क्वीक लघु वार्ता सेल्फ होस्टिंग स्क्वीक आभासी मशीन का कार्यान्वयन। समृद्ध मल्टीमीडिया समर्थन। Yes Cog & Exupery लघु वार्ता/स्लैंग 110k लघु वार्ता, ~300K C
एसडब्ल्यूआई-प्रोलॉग प्रोलॉग: एसडब्ल्यूआई-प्रोलॉग, वाईएपी Yes No सी, एसडब्ल्यूआई-प्रोलॉग
ट्रेसमोनकी जावास्क्रिप्ट तामारिन पर आधारित No Yes सी++ 173k
ट्रू टाइप ट्रू टाइप फ़ॉन्ट रेंडरिंग इंजन Yes No सी (सामान्यतः)
वेलग्रिंड x86/x86-64 बायनेरिज़ लिनक्स के तहत मेमोरी एक्सेस और लीक की जाँच सी 467k [5]
विजुअलवर्क्स लघु वार्ता No Yes सी
Vx32 आभासी मशीन x86 बायनेरिज़ नेटिव कोड के लिए एप्लीकेशन-लेवल वर्चुअलाइजेशन No Yes
सुपरवाबा छोटे उपकरणों के लिए आभासी मशीन, जावा के समान
फिर भी एक और रूबी वीएम (वाईएआरवी) रूबी रूबी 1.9 और नए संस्करणों के संदर्भ कार्यान्वयन की आभासी मशीन Yes Yes सी
जेड-मशीन जेड-कोड
ज़ेंड इंजन पीएचपी Yes No सी 75k


यह भी देखें

संदर्भ

  1. "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 292". Jcp.org. Retrieved 2013-07-04.
  2. "JITRewrite – Parrot". Trac.parrot.org. Retrieved 2013-07-04.
  3. Apple docs on OS X use of Java Shared Archive
  4. The LLVM Compiler Infrastructure, ohloh.net, 2011 Nov 30
  5. Valgrind, ohloh.net, 2011 Nov 30.