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

From Vigyanwiki
No edit summary
No edit summary
 
(6 intermediate revisions by 3 users not shown)
Line 4: Line 4:


== आभासी मशीनों की तुलना ==
== आभासी मशीनों की तुलना ==
: [[जावास्क्रिप्ट]] मशीनें सम्मिलित नहीं हैं। उन्हें खोजने के लिए [[Index.php?title=ECMA स्क्रिप्ट इंजनों की सूची|ECMA स्क्रिप्ट इंजनों की सूची]] देखें।
: [[जावास्क्रिप्ट]] मशीनें सम्मिलित नहीं हैं। उन्हें खोजने के लिए [[Index.php?title=ECMA स्क्रिप्ट इंजनों की सूची|ईसीएमए स्क्रिप्ट इंजनों की सूची]] देखें।


यहां दी गई तालिका उन तत्वों को सारांशित करती है जिनके लिए वर्चुअल मशीन डिज़ाइन कुशल होने का इरादा है, न कि किसी कार्यान्वयन में उपस्थित क्षमताओं की सूची।
यहां दी गई तालिका उन तत्वों को सारांशित करती है जिनके लिए वर्चुअल मशीन डिज़ाइन कुशल होने का इरादा है, न कि किसी कार्यान्वयन में उपस्थित क्षमताओं की सूची।
Line 44: Line 44:
| {{yes}}
| {{yes}}
|-
|-
! जिले (नरक)
! डिस (इन्फर्नो)
| [[Register machine|पंजीकृत]]
| [[Register machine|पंजीकृत]]
| स्वचालित
| स्वचालित
Line 165: Line 165:
| {{yes}}
| {{yes}}
|}
|}
वर्चुअल मशीन निर्देश संगणना के एक मुख्य मॉडल का उपयोग करके स्थानीय चर में डेटा को प्रोसेस करते हैं, आमतौर पर [[स्टैक मशीन]], [[रजिस्टर मशीन]] या [[रैंडम एक्सेस मशीन]] जिसे अक्सर मेमोरी मशीन कहा जाता है। इन तीन तरीकों का उपयोग आभासी मशीनों बनाम भौतिक मशीनों में अलग-अलग ट्रेडऑफ़ से प्रेरित है, जैसे सुरक्षा के लिए व्याख्या, संकलन और सत्यापन में आसानी।
वर्चुअल मशीन निर्देश संगणना के एक मुख्य मॉडल का उपयोग करके स्थानीय चर में डेटा को प्रोसेस करते हैं, सामान्यतः [[स्टैक मशीन]], [[रजिस्टर मशीन]] या [[रैंडम एक्सेस मशीन]] जिसे अक्सर मेमोरी मशीन कहा जाता है। इन तीन तरीकों का उपयोग आभासी मशीनों बनाम भौतिक मशीनों में अलग-अलग ट्रेडऑफ़ से प्रेरित है, जैसे सुरक्षा के लिए व्याख्या, संकलन और सत्यापन में आसानी।


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


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


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


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


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


[[साझा पुस्तकालय]] कई चल रहे कार्यक्रमों में देशी कोड के खंडों का पुन: उपयोग करने की सुविधा है। आधुनिक ऑपरेटिंग सिस्टम में, इसका आम तौर पर मतलब होता है कि [[स्मृति सुरक्षा]] के माध्यम से एक दूसरे से सुरक्षित विभिन्न प्रक्रियाओं में साझा लाइब्रेरी वाले मेमोरी पेजों को साझा करने के लिए [[आभासी मेमोरी]] का उपयोग करना। यह दिलचस्प है कि अनुकूली अनुकूलन जैसे आक्रामक जेआईटी विधियां अक्सर प्रक्रियाओं या प्रोग्राम के लगातार चलने वाले साझा करने के लिए अनुपयुक्त कोड टुकड़े उत्पन्न करती हैं, जिसके लिए प्रीकंपिल्ड और साझा कोड की क्षमता और एडवांटा के बीच व्यापार की आवश्यकता होती है।अनुकूली विशेष कोड के जीईएस। उदाहरण के लिए, CIL के कई डिज़ाइन प्रावधान कुशल साझा पुस्तकालयों की अनुमति देने के लिए मौजूद हैं, संभवतः अधिक विशिष्ट JIT कोड की कीमत पर। [[ओएस एक्स]] पर जेवीएम कार्यान्वयन जावा साझा संग्रह का उपयोग करता है<ref>[https://developer.apple.com/mac/library/documentation/Java/Conceptual/Java14Development/00-Intro/JavaDevelopment.html Apple docs on OS X use of Java Shared Archive]</ref> साझा पुस्तकालयों के कुछ लाभ प्रदान करने के लिए।
[[साझा पुस्तकालय]] कई चल रहे कार्यक्रमों में देशी कोड के खंडों का पुन: उपयोग करने की सुविधा है। आधुनिक ऑपरेटिंग सिस्टम में, इसका सामान्यतः अर्थ होता है कि [[स्मृति सुरक्षा]] के माध्यम से एक दूसरे से सुरक्षित विभिन्न प्रक्रियाओं में साझा लाइब्रेरी वाले मेमोरी पेजों को साझा करने के लिए [[आभासी मेमोरी]] का उपयोग करना। यह दिलचस्प है कि एडाप्टिव ऑप्टिमाइज़ेशन जैसे आक्रामक जेआईटी तरीके प्रायः कोड के टुकड़े उत्पन्न करते हैं जो प्रक्रियाओं या प्रोग्राम के क्रमिक रन में साझा करने के लिए अनुपयुक्त होते हैं, जिसके लिए प्रीकंपाइल और साझा कोड की क्षमता और अनुकूली विशेष कोड के फायदों के बीच एक ट्रेडऑफ की आवश्यकता होती है। उदाहरण के लिए, सीआईएल के कई डिज़ाइन प्रावधान कुशल साझा पुस्तकालयों की अनुमति देने के लिए उपलब्ध हैं, संभवतः अधिक विशिष्ट जेआईटी कोड की कीमत पर। [[ओएस एक्स]] पर जेवीएम कार्यान्वयन जावा साझा पुस्तकालयों के कुछ लाभ प्रदान करने के लिए जावा साझा संग्रह<ref>[https://developer.apple.com/mac/library/documentation/Java/Conceptual/Java14Development/00-Intro/JavaDevelopment.html Apple docs on OS X use of Java Shared Archive]</ref> का उपयोग करता है।


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


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


{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
! [[Virtual machine]]
! [[Virtual machine|आभासी मशीन]]
! [[Programming language|Languages]]
! [[Programming language|भाषाएँ]]
! Comments
! टिप्पणियाँ
! [[Interpreter (computing)|Interpreter]]
! [[Interpreter (computing)|दुभाषिया]]
! [[Just-in-time compilation|JIT]]
! [[Just-in-time compilation|जेआईटी]]
! Implementation language
! कार्यान्वयन भाषा
! [[Source lines of code|SLoC]]
! [[Source lines of code|कोड की स्रोत पंक्तियाँ]]
|-
|-
! [[Common Language Runtime]] (CLR)
! [[Common Language Runtime|सामान्य भाषा रनटाइम]] (सीएलआर)
| [[C Sharp (programming language)|C#]], [[C++/CLI]], [[F Sharp (programming language)|F#]], [[Visual Basic .NET|VB.NET]]
| सी#, सी++/सीएलआई, एफ#, वीबी.नेट
| bytecode is [[Common Intermediate Language|CIL]]; .NET Core Runtime on GitHub
| बाइटकोड सीआईएल है; GitHub पर .NET कोर रनटाइम
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
| C#, C++
| सी#, सी++
|  
|  
|-
|-
! [[Adobe Flash Player]] (aka [[Tamarin (JavaScript engine)|Tamarin]])
! एडोब फ्लैश प्लेयर (उर्फ टैमारिन)
| [[ActionScript]], [[SWF]] (file format)
| एक्शनस्क्रिप्ट, एसडब्ल्यूएफ (फ़ाइल प्रारूप)
| interactive web authoring tool. bytecode is named "ActionScript Byte Code (.abc)"
| इंटरैक्टिव वेब संलेखन उपकरण। बाइटकोड का नाम "एक्शनस्क्रिप्ट बाइट कोड (.abc)" है
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C++
| सी++
| 135k (initially released)
| 135k (प्रारम्भ में जारी)
|-
|-
! [[Dis virtual machine|Dis]] ([[Inferno (operating system)|Inferno]])
! डिस (इन्फर्नो)
| [[Limbo (programming language)|Limbo]]
| [[Limbo (programming language)|लीम्बो]]
| Dis Virtual Machine Specification
| डिस आभासी मशीन विशिष्टता
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C
| सी
| 15k + 2850 per JIT arch + 500 per host OS
| 15k + 2850 प्रति JIT आर्क + 500 प्रति होस्ट ओएस
|-
|-
! [[DotGNU]]-[[Portable.NET]]
! डॉटजीएनयू-पोर्टेबल.नेट
| [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]]
| सीएलआई भाषाओं सहित: सी#
| Common Language Runtime clone
| सामान्य भाषा रनटाइम क्लोन
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
| C, C#
| सी, सी#
|
|
|-
|-
! [[Forth virtual machine|Forth]]
! [[Forth virtual machine|फोर्थ]]
| [[Forth (programming language)|Forth]]
| [[Forth (programming language)|फोर्थ]]
| Features are simplified, usually include assembler, compiler, text-level and binary-level interpreters, sometimes editor, debugger and OS. Compiling speeds are >20 SKLOC/S and behave much like JIT.
| सुविधाओं को सरलीकृत किया जाता है, प्रायः असेंबलर, कंपाइलर, टेक्स्ट-लेवल और बाइनरी-लेवल इंटरप्रेटर, कभी-कभी संपादक, डीबगर और ओएस शामिल होते हैं। संकलन गति >20 SKLOC/S हैं और जेआईटी की तरह व्यवहार करती हैं।
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| Forth, Forth Assembler
| फोर्थ, फोर्थ असेम्बलर
| 2.8K to 5.6K; advanced, professional implementations are smaller.
| 2.8 के से 5.6 के; उन्नत, व्यावसायिक कार्यान्वयन छोटे हैं।
|-
|-
! [[Glulx]]
! [[Glulx|ग्लल्क्स]]
| Inform 6, Inform 7, others
| सूचित 6, सूचित 7, अन्य
|
|
|{{yes}}
|{{yes}}
|{{no}}
|{{no}}
| Various implementations exist
| विभिन्न कार्यान्वयन विद्यमान हैं
|
|
|-
|-
|-
|-
! [[HHVM]]
! [[HHVM|एचएचवीएम]]
| [[PHP]], [[Hack (programming language)|Hack]]
| पीएचपी, हैक
| Is an open-source virtual machine designed for executing programs written in Hack and PHP.
| एक ओपन-सोर्स आभासी मशीन है जिसे हैक और पीएचपी में लिखे प्रोग्राम को क्रियान्वित करने के लिए डिज़ाइन किया गया है।
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C++, OCaml
| सी++, OCaml
|
|
|-
|-
! [[Icon (programming language)|Icon]]
! [[Icon (programming language)|आइकन]]
| Icon
| [[Icon (programming language)|आइकन]]
| Base source code provides both the interpreter as well as an unsupported compile-to-C version.  The runtime code, that is shared between the compiler and the interpreter, is written in a variant of C called RTT.  
| आधार स्रोत कोड दोनों दुभाषिया के साथ-साथ एक असमर्थित संकलन-से-सी संस्करण प्रदान करता है। रनटाइम कोड, जिसे संकलक और दुभाषिया के बीच साझा किया जाता है, C के एक संस्करण में लिखा जाता है जिसे RTT कहा जाता है।  
|{{yes}}
|{{yes}}
|{{no}}
|{{no}}
|C, RTT (a custom front-end to C, provided with the base source for Icon).
|सी, आरटीटी (सी के लिए एक कस्टम फ्रंट-एंड, आइकन के लिए आधार स्रोत के साथ प्रदान किया गया)
| ~180k total.  (source to bytecode: ~11k, bytecode interpreter: ~46k, iconc: ~23k, common/headers: ~13k, rtt: ~15k)  
| ~ 180k कुल। (बायटेकोड का स्रोत: ~11k, बाइटकोड दुभाषिया: ~46k, [[Icon (programming language)|आइकन]]<nowiki/>c: ~23k, सामान्य/हेडर: ~13k, rtt: ~15k)  
|-
|-
! [[Java virtual machine|JVM]]
! [[Java virtual machine|जेवीएम]]
| [[Java (programming language)|Java]], [[Kotlin (programming language)|Kotlin]], [[Jython]], [[Groovy (programming language)|Groovy]], [[JRuby]], [[C (programming language)|C]], [[C++]], [[Clojure]], [[Scala (programming language)|Scala]] and several others
| जावा, कोटलिन, ज्योथन, ग्रूवी, जेरुबी, सी, सी ++, क्लोजर, स्काला और कई अन्य
| Reference implementation by Sun ; [[OpenJDK]]: code under [[GPL]] ; [[IcedTea]]: code and tools under [[GPL]]
| सूर्य द्वारा संदर्भ कार्यान्वयन; ओपनजेडीके: जीपीएल के तहत कोड; आइस्ड टी: जीपीएल के तहत कोड और टूल्स
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| [[JDK]], [[OpenJDK]] & [[IcedTea]] with regular JIT : Java, C, C++, ASM ; [[IcedTea]] with the "Zero" JIT : Java, C, C++
| JDK, OpenJDK और आइस्ड टी नियमित जेआईटी के साथ: Java, C, C++, ASM; आइस्ड टी with the "Zero" JIT : Java, C, C++
| JVM is around 6500k lines; [[Technology Compatibility Kit|TCK]] is 80k tests and around 1000k lines
| जेवीएम लगभग 6500k लाइनें हैं; TCK 80k परीक्षण और लगभग 1000k लाइनें हैं
|-
|-
! [[LLVM]]
! [[LLVM|एलएलवीएम]]
| [[C (programming language)|C]], [[C++]], [[Kotlin (programming language)|Kotlin]], [[Objective-C]], [[Swift (programming language)|Swift]], [[Ada (programming language)|Ada]], [[Fortran]], and [[Rust (programming language)|Rust]]
| सी, सी ++, कोटलिन, ऑब्जेक्टिव-सी, स्विफ्ट, एडा, फोरट्रान और रस्ट
| MSIL, C and C++ output are supported. ActionScript Byte Code output is supported by Adobe Alchemy. bytecode is named "LLVM Bytecode (.bc)". assembly is named "LLVM Assembly Language (*.ll)".
| एमएसआईएल, C और C++ आउटपुट समर्थित हैं। एक्शन स्क्रिप्ट बाइट कोड आउटपुट एडोब कीमिया द्वारा समर्थित है। बाइटकोड का नाम "एलएलवीएम बाइटकोड (.बीसी)" है। असेंबली का नाम "एलएलवीएम असेंबली लैंग्वेज (*.ll)" रखा गया है।
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C++
| सी++
| 811k <ref name="ohloh-llvm">[http://www.ohloh.net/p/llvm The LLVM Compiler Infrastructure], ohloh.net, 2011 Nov 30</ref>
| 811k <ref name="ohloh-llvm">[http://www.ohloh.net/p/llvm The LLVM Compiler Infrastructure], ohloh.net, 2011 Nov 30</ref>
|-
|-
! [[Lua (programming language)|Lua]]
! [[Lua (programming language)|लुआ]]
| Lua
| [[Lua (programming language)|लुआ]]
|
|
| {{yes}}
| {{yes}}
| LuaJIT
| [[Lua (programming language)|लुआ जेआईटी]]
| C
| सी
| 13k + 7k LuaJIT
| 13k + 7k LuaJIT
|-
|-
! [[MMIX]]
! [[MMIX|एमएमआईएक्स]]
| MMIXAL
| एममिक्सल
|
|
|
|
Line 290: Line 290:
|
|
|-
|-
! [[Mono (software)|Mono]]
! [[Mono (software)|मोनो]]
| [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]], [[VB.NET]], [[IronPython]], [[IronRuby]], and others
| सीएलआई भाषाओं सहित: C#, VB.NET, आयरनपायथन, आयरनरूबी, और अन्य
| Common Language Runtime clone
| सामान्य भाषा रनटाइम क्लोन
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C#, C
| सी#, सी
| 2332k
| 2332k
|-
|-
! [[NekoVM]]
! [[NekoVM|नेकोवीएम]]
| currently [[NekoVM|Neko]] and [[Haxe]]
| वर्तमान में नेको और हैक्स
|
|
| {{yes}}
| {{yes}}
| x86 only
| x86 only
| C
| सी
| 46k
| 46k
|-
|-
! [[Oz (programming language)|Oz]]
! [[Oz (programming language)|ओजेड]]
| Oz, [[Alice (programming language)|Alice]]
| ओजेड, ऐलिस
|
|
|
|
Line 314: Line 314:
|
|
|-
|-
! [[O-code machine]]
! [[O-code machine|ओ-कोड मशीन]]
| [[BCPL]]
| [[BCPL|बीसीपीएल]]
|
|
|
|
Line 322: Line 322:
|
|
|-
|-
! [[p-code machine]]
! [[p-code machine|पी-कोड मशीन]]
| [[Pascal (programming language)|Pascal]]
| [[Pascal (programming language)|पास्कल]]
| UCSD Pascal, widespread in late 70s including Apple II
| यूसीएसडी पास्कल, 70 के दशक के अंत में एप्पल II सहित व्यापक रूप से फैला हुआ था
|{{yes}}
|{{yes}}
|{{no}}
|{{no}}
|assembly, Pascal
|असेंबली, पास्कल
|
|
|-
|-
! [[Parrot virtual machine|Parrot]]
! [[Parrot virtual machine|तोता]]
| [[Perl#2000–present|Perl 5]], [[Raku (programming language)|Raku]], NQP-rx, [[Parrot intermediary language|PIR]], [[Parrot assembly language|PASM]], [[bytecode|PBC]], [[BASIC]], [[bc (programming language)|bc]], [[C99]], [[ECMAScript]], [[Lisp (programming language)|Lisp]], [[Lua (programming language)|Lua]], [[GNU m4|m4]], [[Tcl]], [[WMLScript]], [[Simple API for XML#XML processing with SAX|XML]], and others
| पर्ल 5, राकू, एनक्यूपी-आरएक्स, पीआईआर, पीएएसएम, पीबीसी, बेसिक, बीसी, सी99, ईसीएमएस्क्रिप्ट, लिस्प, लुआ, एम4, टीसीएल, डब्ल्यूएमएलस्क्रिप्ट, एक्सएमएल और अन्य
|
|
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C, Perl
| सी, [[Perl|पर्ल]]
| 111k&nbsp;C, 240k&nbsp;Perl
| 111k&nbsp;C, 240k&nbsp;[[Perl|पर्ल]]
|-
|-
! [[Perl virtual machine]]
! [[Perl virtual machine|पर्ल आभासी मशीन]]
| [[Perl]]
| [[Perl|पर्ल]]
| [[op-code]] tree walker
| ओप-कोड ट्री वॉकर
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| C, Perl
| सी, [[Perl|पर्ल]]
| 175k&nbsp;C, 9k&nbsp;Perl
| 175k&nbsp;C, 9k&nbsp;[[Perl|पर्ल]]
|-
|-
! [[CPython]]
! [[CPython|सीपीथॉन]]
| [[Python (programming language)|Python]]
| [[Python (programming language)|पायथन]]
|
|
| {{yes}}
| {{yes}}
| {{ubl|[[Psyco]]|[[Unladen Swallow]]}}
| {{ubl|[[साइको]]|[[अनल्डेन स्वल्लो]]}}
| C
| सी
| 387k&nbsp;C, 368k&nbsp;Python, 10k&nbsp;ASM, 31k&nbsp;Psyco
| 387के सी, 368के पायथन, 10के एएसएम, 31के साइको
|-
|-
! [[PyPy]]
! [[PyPy|पीवाईपीवाई]]
| [[Python (programming language)|Python]]
| [[Python (programming language)|पायथन]]
| [[Self-hosting (compilers)|Self-hosting]] implementation of Python, next generation of [[Psyco]]
| सेल्फ-होस्टिंग कार्यान्वयन, साइको की अगली पीढ़ी
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| Python
| [[Python (programming language)|पायथन]]
|
|
|-
|-
! [[Rubinius]]
! [[Rubinius|रुबिनियस]]
| [[Ruby (programming language)|Ruby]]
| [[Ruby (programming language)|रूबी]]
| Virtual machine for another Ruby implementation
| अन्य रूबी कार्यान्वयन के लिए आभासी मशीन
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C++, Ruby
| सी++, [[Ruby (programming language)|रूबी]]
|
|
|-
|-
! [[Silverlight]]
! [[Silverlight|सिल्वरलाइट]]
| [[C Sharp (programming language)|C#]], [[VB.NET]]
| [[C Sharp (programming language)|C#]], [[VB.NET]]
| A Micro-version of Microsoft .NET Framework to let applications run sandboxed inside browser
| माइक्रोसॉफ्ट .NET फ्रेमवर्क का एक माइक्रो-संस्करण है जो एप्लिकेशन को ब्राउज़र के अंदर सैंडबॉक्स चलाने देता है
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| C++
| सी++
| 7MB (initially released)
| 7 एमबी (प्रारम्भ में जारी)
|-
|-
! [[ScummVM]]
! [[ScummVM|स्कमवीएम]]
| [[Scumm]]
| [[Scumm|स्कम]]
| Computer game engine
| कंप्यूटर गेम इंजन
|
|
|
|
Line 386: Line 386:
|
|
|-
|-
! [[SECD machine|SECD]]
! [[SECD machine|एसईसीडी]]
| [[ISWIM]], [[Lispkit Lisp]]
| आईएसडब्ल्यूआईएम, लिस्पकिट लिस्प
|
|
|
|
Line 394: Line 394:
|
|
|-
|-
! [[Squirrel (programming language)|Squirrel]]
! [[Squirrel (programming language)|गिलहरी]]
| Squirrel
| [[Squirrel (programming language)|गिलहरी]]
|
|
| {{yes}}
| {{yes}}
| Squirrel_JIT
| गिलहरी_जेआईटी
| C++
| सी++
| 12k
| 12k
|-
|-
! [[Smalltalk]]
! [[Smalltalk|लघु वार्ता]]
| Smalltalk
| [[Smalltalk|लघु वार्ता]]
|
|
|
|
Line 410: Line 410:
|
|
|-
|-
! [[SQLite]]
! [[SQLite|एस क्यू]] lite
| SQLite opcodes
| [[SQLite|एस क्यू]]Lite ऑपकोड
| Virtual database engine
| आभासी डेटाबेस इंजन
|
|
|
|
Line 418: Line 418:
|
|
|-
|-
! [[Squeak]]
! [[Squeak|चीख़]]
| Squeak [[Smalltalk]]
| स्क्वीक [[Smalltalk|लघु वार्ता]]
| [[Self-hosting (compilers)|Self hosting]] implementation of Squeak virtual machine.  Rich multi-media support.
| सेल्फ होस्टिंग स्क्वीक आभासी मशीन का कार्यान्वयन। समृद्ध मल्टीमीडिया समर्थन।
| {{yes}}
| {{yes}}
| {{yes|Cog & Exupery}}
| {{yes|Cog & Exupery}}
| Smalltalk/Slang
| [[Smalltalk|लघु वार्ता]]/स्लैंग
| 110k Smalltalk, ~300K C
| 110k [[Smalltalk|लघु वार्ता]], ~300K C
|-
|-
![[SWI-Prolog]]
![[SWI-Prolog|एसडब्ल्यूआई-प्रोलॉग]]
|Prolog: [[SWI-Prolog]], [[YAP (Prolog)|YAP]]
|प्रोलॉग: एसडब्ल्यूआई-प्रोलॉग, वाईएपी
|
|
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| C, SWI-Prolog
| सी, एसडब्ल्यूआई-प्रोलॉग
|
|
|-
|-
! [[TraceMonkey]]
! [[TraceMonkey|ट्रेसमोनकी]]
| JavaScript
| जावास्क्रिप्ट
| Based on [[Tamarin (JavaScript engine)|Tamarin]]
| तामारिन पर आधारित
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
| C++
| सी++
| 173k
| 173k
|-
|-
! [[TrueType]]
! [[TrueType|ट्रू टाइप]]
| [[TrueType#Hinting language|TrueType]]
| [[TrueType#Hinting language|ट्रू टाइप]]
| Font rendering engine
| फ़ॉन्ट रेंडरिंग इंजन
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| C (typically)
| सी (सामान्यतः)
|
|
|-
|-
! [[Valgrind]]
! [[Valgrind|वेलग्रिंड]]
| [[x86]]/[[x86-64]] binaries
| x86/x86-64 बायनेरिज़
| Checking of memory accesses and leaks under [[Linux]]
| लिनक्स के तहत मेमोरी एक्सेस और लीक की जाँच
|
|
|  
|  
| C
| सी
| 467k <ref name="ohloh-valgrind">[http://www.ohloh.net/p/valgrind Valgrind], ohloh.net, 2011 Nov 30.</ref>
| 467k <ref name="ohloh-valgrind">[http://www.ohloh.net/p/valgrind Valgrind], ohloh.net, 2011 Nov 30.</ref>
|-
|-
! [[VisualWorks]]
! [[VisualWorks|विजुअलवर्क्स]]
| [[Smalltalk]]
| [[Smalltalk|लघु वार्ता]]
|
|
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
| C
| सी
|
|
|-
|-
! [[Vx32]] virtual machine
! Vx32 आभासी मशीन
| [[x86]] binaries
| x86 बायनेरिज़
| Application-level virtualization for native code
| नेटिव कोड के लिए एप्लीकेशन-लेवल वर्चुअलाइजेशन
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 474: Line 474:
|
|
|-
|-
! [[SuperWaba|Waba]]
! [[SuperWaba|सुपरवाबा]]
|
|
| Virtual machine for small devices, similar to [[Java (programming language)|Java]]
| छोटे उपकरणों के लिए आभासी मशीन, जावा के समान
|
|
|
|
Line 482: Line 482:
|
|
|-
|-
! Yet Another Ruby VM ([[YARV]])
! फिर भी एक और रूबी वीएम (वाईएआरवी)
| [[Ruby (programming language)|Ruby]]
| [[Ruby (programming language)|रूबी]]
| Virtual machine of the reference implementation for [[Ruby (programming language)|Ruby]] 1.9 and newer versions
| रूबी 1.9 और नए संस्करणों के संदर्भ कार्यान्वयन की आभासी मशीन
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|C
|सी
|
|
|-
|-
! [[Z-machine]]
! [[Z-machine|जेड-मशीन]]
| Z-Code
| जेड-कोड
|
|
|
|
Line 498: Line 498:
|
|
|-
|-
! [[Zend Engine]]
! [[Zend Engine|ज़ेंड इंजन]]
| [[PHP]]
| [[PHP|पीएचपी]]
|
|
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| C
| सी
| 75k
| 75k
|}
|}
Line 509: Line 509:


== यह भी देखें ==
== यह भी देखें ==
* आवेदन वर्चुअलाइजेशन
* अनुप्रयोग वर्चुअलाइजेशन
* [[भाषा बंधन]]
* [[भाषा बंधन]]
* [[विदेशी फ़ंक्शन इंटरफ़ेस]]
* [[विदेशी फ़ंक्शन इंटरफ़ेस]]
* [[कॉलिंग कन्वेंशन]]
* [[कॉलिंग कन्वेंशन]]
* [[नाम मंगलिंग]]
* [[नाम मंगलिंग|नाम मैंगलिंग]]
* [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई)
* [[अप्लिकेशन प्रोग्रामिंग अंतरफलक|एप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई)
* [[अनुप्रयोग बाइनरी इंटरफ़ेस]] (एबीआई)
* [[अनुप्रयोग बाइनरी इंटरफ़ेस]] (एबीआई)
* [[[[अनुप्रयोग वर्चुअलाइजेशन]] सॉफ्टवेयर की तुलना]]
* [[अनुप्रयोग वर्चुअलाइजेशन|प्लेटफॉर्म वर्चुअलाइजेशन]] सॉफ्टवेयर की तुलना
* ईसीएमएस्क्रिप्ट इंजनों की सूची
* ईसीएमएस्क्रिप्ट इंजनों की सूची
* वेब असेंबली
* वेब असेंबली
Line 522: Line 522:
==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}
[[Category: सॉफ्टवेयर तुलना | अनुप्रयोग वर्चुअलाइजेशन सॉफ्टवेयर]] [[Category: वर्चुअलाइजेशन सॉफ्टवेयर | वर्चुअलाइजेशन सॉफ्टवेयर ]]
 


[[pt:Comparação entre aplicações de virtualização de máquinas]]
[[pt:Comparação entre aplicações de virtualização de máquinas]]


[[Category: Machine Translated Page]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:वर्चुअलाइजेशन सॉफ्टवेयर| वर्चुअलाइजेशन सॉफ्टवेयर ]]
[[Category:सॉफ्टवेयर तुलना| अनुप्रयोग वर्चुअलाइजेशन सॉफ्टवेयर]]

Latest revision as of 17:30, 3 March 2023

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

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

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

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

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

वस्तु मॉडल

गतिशील टाइपिंग
एंड्रॉइड रनटाइम (एआरटी) पंजीकृत स्वचालित 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.