एप्लीकेशन वर्चुअलाइजेशन सॉफ्टवेयर की तुलना: Difference between revisions
No edit summary |
|||
Line 44: | Line 44: | ||
| {{yes}} | | {{yes}} | ||
|- | |- | ||
! | ! डिस (इन्फर्नो) | ||
| [[Register machine|पंजीकृत]] | | [[Register machine|पंजीकृत]] | ||
| स्वचालित | | स्वचालित | ||
Line 175: | Line 175: | ||
जस्ट-इन-टाइम संकलन (जेआईटी), नवीनतम संभव समय पर मूल निर्देशों को संकलित करने की एक विधि को संदर्भित करता है, सामान्यतः कार्यक्रम के चलने से ठीक पहले या उसके दौरान। जेआईटी की चुनौती वर्चुअल मशीन डिज़ाइन की तुलना में कार्यान्वयन की अधिक है, तथापि, आधुनिक डिज़ाइनों ने दक्षता में मदद करने के लिए विचार करना प्रारंभ कर दिया है। सरलतम जेआईटी विधियाँ केवल एक ऑफ़लाइन संकलक के समान एक कोड खंड में संकलित होती हैं। तथापि, अधिक जटिल विधियों को अक्सर नियोजित किया जाता है, जो संकलित कोड अंशों को केवल रनटाइम पर ज्ञात मापदंडों के लिए विशेषज्ञ बनाते हैं ([[अनुकूली अनुकूलन]] देखें)। | जस्ट-इन-टाइम संकलन (जेआईटी), नवीनतम संभव समय पर मूल निर्देशों को संकलित करने की एक विधि को संदर्भित करता है, सामान्यतः कार्यक्रम के चलने से ठीक पहले या उसके दौरान। जेआईटी की चुनौती वर्चुअल मशीन डिज़ाइन की तुलना में कार्यान्वयन की अधिक है, तथापि, आधुनिक डिज़ाइनों ने दक्षता में मदद करने के लिए विचार करना प्रारंभ कर दिया है। सरलतम जेआईटी विधियाँ केवल एक ऑफ़लाइन संकलक के समान एक कोड खंड में संकलित होती हैं। तथापि, अधिक जटिल विधियों को अक्सर नियोजित किया जाता है, जो संकलित कोड अंशों को केवल रनटाइम पर ज्ञात मापदंडों के लिए विशेषज्ञ बनाते हैं ([[अनुकूली अनुकूलन]] देखें)। | ||
अहेड-ऑफ-टाइम संकलन (एओटी) मूल निर्देशों का एक सेट उत्पन्न करने के लिए प्रीकंपलर का उपयोग करने की अधिक क्लासिक विधि को संदर्भित करता है जो प्रोग्राम के रनटाइम के दौरान नहीं बदलता है। क्योंकि आक्रामक संकलन और अनुकूलन में समय लग सकता है, एक पूर्व-संकलित प्रोग्राम एक से अधिक तेजी से लॉन्च हो सकता है जो अकेले जेआईटी पर निष्पादन के लिए निर्भर करता है। | अहेड-ऑफ-टाइम संकलन (एओटी) मूल निर्देशों का एक सेट उत्पन्न करने के लिए प्रीकंपलर का उपयोग करने की अधिक क्लासिक विधि को संदर्भित करता है जो प्रोग्राम के रनटाइम के दौरान नहीं बदलता है। क्योंकि आक्रामक संकलन और अनुकूलन में समय लग सकता है, एक पूर्व-संकलित प्रोग्राम एक से अधिक तेजी से लॉन्च हो सकता है जो अकेले जेआईटी पर निष्पादन के लिए निर्भर करता है। जेवीएम के कार्यान्वयन ने इस स्टार्टअप लागत को प्रारंभिक लॉन्च समय की व्याख्या करके कम कर दिया है, जब तक कि जेआईटी द्वारा मूल कोड के टुकड़े उत्पन्न नहीं किए जा सकते। | ||
[[साझा पुस्तकालय]] कई चल रहे कार्यक्रमों में देशी कोड के खंडों का पुन: उपयोग करने की सुविधा है। आधुनिक ऑपरेटिंग सिस्टम में, इसका | [[साझा पुस्तकालय]] कई चल रहे कार्यक्रमों में देशी कोड के खंडों का पुन: उपयोग करने की सुविधा है। आधुनिक ऑपरेटिंग सिस्टम में, इसका सामान्यतः अर्थ होता है कि [[स्मृति सुरक्षा]] के माध्यम से एक दूसरे से सुरक्षित विभिन्न प्रक्रियाओं में साझा लाइब्रेरी वाले मेमोरी पेजों को साझा करने के लिए [[आभासी मेमोरी]] का उपयोग करना। यह दिलचस्प है कि एडाप्टिव ऑप्टिमाइज़ेशन जैसे आक्रामक जेआईटी तरीके प्रायः कोड के टुकड़े उत्पन्न करते हैं जो प्रक्रियाओं या प्रोग्राम के क्रमिक रन में साझा करने के लिए अनुपयुक्त होते हैं, जिसके लिए प्रीकंपाइल और साझा कोड की क्षमता और अनुकूली विशेष कोड के फायदों के बीच एक ट्रेडऑफ की आवश्यकता होती है। उदाहरण के लिए, सीआईएल के कई डिज़ाइन प्रावधान कुशल साझा पुस्तकालयों की अनुमति देने के लिए उपलब्ध हैं, संभवतः अधिक विशिष्ट जेआईटी कोड की कीमत पर। [[ओएस एक्स]] पर जेवीएम कार्यान्वयन जावा साझा पुस्तकालयों के कुछ लाभ प्रदान करने के लिए जावा साझा संग्रह<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| | ! [[Programming language|भाषाएँ]] | ||
! | ! टिप्पणियाँ | ||
! [[Interpreter (computing)| | ! [[Interpreter (computing)|दुभाषिया]] | ||
! [[Just-in-time compilation| | ! [[Just-in-time compilation|जेआईटी]] | ||
! | ! कार्यान्वयन भाषा | ||
! [[Source lines of code| | ! [[Source lines of code|कोड की स्रोत पंक्तियाँ]] | ||
|- | |- | ||
! [[Common Language Runtime]] ( | ! [[Common Language Runtime|सामान्य भाषा रनटाइम]] (सीएलआर) | ||
| [[C Sharp (programming language)|C#]], [[C++/CLI]], [[F Sharp (programming language)|F#]], [[Visual Basic .NET|VB.NET]] | | [[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 | | bytecode is [[Common Intermediate Language|CIL]]; .NET Core Runtime on GitHub | ||
Line 201: | Line 201: | ||
| | | | ||
|- | |- | ||
! | ! एडोब फ्लैश प्लेयर (उर्फ टैमारिन) | ||
| [[ActionScript]], [[SWF]] (file format) | | [[ActionScript]], [[SWF]] (file format) | ||
| interactive web authoring tool. bytecode is named "ActionScript Byte Code (.abc)" | | interactive web authoring tool. bytecode is named "ActionScript Byte Code (.abc)" | ||
Line 209: | Line 209: | ||
| 135k (initially released) | | 135k (initially released) | ||
|- | |- | ||
! | ! डिस (इन्फर्नो) | ||
| [[Limbo (programming language)|Limbo]] | | [[Limbo (programming language)|Limbo]] | ||
| Dis Virtual Machine Specification | | Dis Virtual Machine Specification | ||
Line 217: | Line 217: | ||
| 15k + 2850 per JIT arch + 500 per host OS | | 15k + 2850 per JIT arch + 500 per host OS | ||
|- | |- | ||
! | ! डॉटजीएनयू-पोर्टेबल.नेट | ||
| [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]] | | [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]] | ||
| Common Language Runtime clone | | Common Language Runtime clone | ||
Line 225: | Line 225: | ||
| | | | ||
|- | |- | ||
! [[Forth virtual machine| | ! [[Forth virtual machine|फोर्थ]] | ||
| [[Forth (programming language)|Forth]] | | [[Forth (programming language)|Forth]] | ||
| 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. | | 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. | ||
Line 233: | Line 233: | ||
| 2.8K to 5.6K; advanced, professional implementations are smaller. | | 2.8K to 5.6K; advanced, professional implementations are smaller. | ||
|- | |- | ||
! [[Glulx]] | ! [[Glulx|ग्लल्क्स]] | ||
| Inform 6, Inform 7, others | | Inform 6, Inform 7, others | ||
| | | | ||
Line 242: | Line 242: | ||
|- | |- | ||
|- | |- | ||
! [[HHVM]] | ! [[HHVM|एचएचवीएम]] | ||
| [[PHP]], [[Hack (programming language)|Hack]] | | [[PHP]], [[Hack (programming language)|Hack]] | ||
| Is an open-source virtual machine designed for executing programs written in Hack and PHP. | | Is an open-source virtual machine designed for executing programs written in Hack and PHP. | ||
Line 250: | Line 250: | ||
| | | | ||
|- | |- | ||
! [[Icon (programming language)| | ! [[Icon (programming language)|आइकन]] | ||
| Icon | | Icon | ||
| 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. | | 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. | ||
Line 258: | Line 258: | ||
| ~180k total. (source to bytecode: ~11k, bytecode interpreter: ~46k, iconc: ~23k, common/headers: ~13k, rtt: ~15k) | | ~180k total. (source to bytecode: ~11k, bytecode interpreter: ~46k, iconc: ~23k, common/headers: ~13k, rtt: ~15k) | ||
|- | |- | ||
! [[Java virtual machine| | ! [[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 | | [[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]] | | Reference implementation by Sun ; [[OpenJDK]]: code under [[GPL]] ; [[IcedTea]]: code and tools under [[GPL]] | ||
Line 266: | Line 266: | ||
| JVM is around 6500k lines; [[Technology Compatibility Kit|TCK]] is 80k tests and around 1000k lines | | JVM is around 6500k lines; [[Technology Compatibility Kit|TCK]] is 80k tests and around 1000k lines | ||
|- | |- | ||
! [[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]] | | [[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)". | | 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)". | ||
Line 274: | Line 274: | ||
| 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 (programming language)|लुआ]] | ||
| Lua | | Lua | ||
| | | | ||
Line 282: | Line 282: | ||
| 13k + 7k LuaJIT | | 13k + 7k LuaJIT | ||
|- | |- | ||
! [[MMIX]] | ! [[MMIX|एमएमआईएक्स]] | ||
| MMIXAL | | MMIXAL | ||
| | | | ||
Line 290: | Line 290: | ||
| | | | ||
|- | |- | ||
! [[Mono (software)| | ! [[Mono (software)|मोनो]] | ||
| [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]], [[VB.NET]], [[IronPython]], [[IronRuby]], and others | | [[List of CLI languages|CLI languages]] including: [[C Sharp (programming language)|C#]], [[VB.NET]], [[IronPython]], [[IronRuby]], and others | ||
| Common Language Runtime clone | | Common Language Runtime clone | ||
Line 298: | Line 298: | ||
| 2332k | | 2332k | ||
|- | |- | ||
! [[NekoVM]] | ! [[NekoVM|नेकोवीएम]] | ||
| currently [[NekoVM|Neko]] and [[Haxe]] | | currently [[NekoVM|Neko]] and [[Haxe]] | ||
| | | | ||
Line 306: | Line 306: | ||
| 46k | | 46k | ||
|- | |- | ||
! [[Oz (programming language)| | ! [[Oz (programming language)|ओजेड]] | ||
| Oz, [[Alice (programming language)|Alice]] | | 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)|Pascal]] | ||
| UCSD Pascal, widespread in late 70s including Apple II | | UCSD Pascal, widespread in late 70s including Apple II | ||
Line 330: | Line 330: | ||
| | | | ||
|- | |- | ||
! [[Parrot virtual machine| | ! [[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 | | [[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 | ||
| | | | ||
Line 338: | Line 338: | ||
| 111k C, 240k Perl | | 111k C, 240k Perl | ||
|- | |- | ||
! [[Perl virtual machine]] | ! [[Perl virtual machine|पर्ल आभासी मशीन]] | ||
| [[Perl]] | | [[Perl]] | ||
| [[op-code]] tree walker | | [[op-code]] tree walker | ||
Line 346: | Line 346: | ||
| 175k C, 9k Perl | | 175k C, 9k Perl | ||
|- | |- | ||
! [[CPython]] | ! [[CPython|सीपीथॉन]] | ||
| [[Python (programming language)|Python]] | | [[Python (programming language)|Python]] | ||
| | | | ||
Line 354: | Line 354: | ||
| 387k C, 368k Python, 10k ASM, 31k Psyco | | 387k C, 368k Python, 10k ASM, 31k Psyco | ||
|- | |- | ||
! [[PyPy]] | ! [[PyPy|पीवाईपीवाई]] | ||
| [[Python (programming language)|Python]] | | [[Python (programming language)|Python]] | ||
| [[Self-hosting (compilers)|Self-hosting]] implementation of Python, next generation of [[Psyco]] | | [[Self-hosting (compilers)|Self-hosting]] implementation of Python, next generation of [[Psyco]] | ||
Line 362: | Line 362: | ||
| | | | ||
|- | |- | ||
! [[Rubinius]] | ! [[Rubinius|रुबिनियस]] | ||
| [[Ruby (programming language)|Ruby]] | | [[Ruby (programming language)|Ruby]] | ||
| Virtual machine for another Ruby implementation | | Virtual machine for another Ruby implementation | ||
Line 370: | Line 370: | ||
| | | | ||
|- | |- | ||
! [[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 | | A Micro-version of Microsoft .NET Framework to let applications run sandboxed inside browser | ||
Line 378: | Line 378: | ||
| 7MB (initially released) | | 7MB (initially released) | ||
|- | |- | ||
! [[ScummVM]] | ! [[ScummVM|स्कमवीएम]] | ||
| [[Scumm]] | | [[Scumm]] | ||
| Computer game engine | | Computer game engine | ||
Line 386: | Line 386: | ||
| | | | ||
|- | |- | ||
! [[SECD machine| | ! [[SECD machine|एसईसीडी]] | ||
| [[ISWIM]], [[Lispkit Lisp]] | | [[ISWIM]], [[Lispkit Lisp]] | ||
| | | | ||
Line 394: | Line 394: | ||
| | | | ||
|- | |- | ||
! [[Squirrel (programming language)| | ! [[Squirrel (programming language)|गिलहरी]] | ||
| Squirrel | | Squirrel | ||
| | | | ||
Line 402: | Line 402: | ||
| 12k | | 12k | ||
|- | |- | ||
! [[Smalltalk]] | ! [[Smalltalk|लघु वार्ता]] | ||
| Smalltalk | | Smalltalk | ||
| | | | ||
Line 410: | Line 410: | ||
| | | | ||
|- | |- | ||
! [[SQLite]] | ! [[SQLite|एस क्यू]] lite | ||
| SQLite opcodes | | SQLite opcodes | ||
| Virtual database engine | | Virtual database engine |
Revision as of 21:43, 27 February 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] का उपयोग करता है।
एप्लिकेशन वर्चुअल मशीन कार्यान्वयन की तुलना
ऊपर वर्णित पोर्टेबल वर्चुअल मशीनों के अलावा, वर्चुअल मशीनों का उपयोग प्रायः व्यक्तिगत स्क्रिप्टिंग भाषाओं के निष्पादन मॉडल के रूप में किया जाता है, सामान्यतः दुभाषिया द्वारा। यह तालिका उपरोक्त पोर्टेबल वर्चुअल मशीन और स्क्रिप्टिंग भाषा वर्चुअल मशीन दोनों के विशिष्ट वर्चुअल मशीन कार्यान्वयन को सूचीबद्ध करती है।
आभासी मशीन | भाषाएँ | टिप्पणियाँ | दुभाषिया | जेआईटी | कार्यान्वयन भाषा | कोड की स्रोत पंक्तियाँ |
---|---|---|---|---|---|---|
सामान्य भाषा रनटाइम (सीएलआर) | C#, C++/CLI, F#, VB.NET | bytecode is CIL; .NET Core Runtime on GitHub | No | Yes | C#, C++ | |
एडोब फ्लैश प्लेयर (उर्फ टैमारिन) | ActionScript, SWF (file format) | interactive web authoring tool. bytecode is named "ActionScript Byte Code (.abc)" | Yes | Yes | C++ | 135k (initially released) |
डिस (इन्फर्नो) | Limbo | Dis Virtual Machine Specification | Yes | Yes | C | 15k + 2850 per JIT arch + 500 per host OS |
डॉटजीएनयू-पोर्टेबल.नेट | CLI languages including: C# | Common Language Runtime clone | No | Yes | C, C# | |
फोर्थ | Forth | 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. | Yes | No | Forth, Forth Assembler | 2.8K to 5.6K; advanced, professional implementations are smaller. |
ग्लल्क्स | Inform 6, Inform 7, others | Yes | No | Various implementations exist | ||
एचएचवीएम | PHP, Hack | Is an open-source virtual machine designed for executing programs written in Hack and PHP. | Yes | Yes | C++, OCaml | |
आइकन | Icon | 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. | Yes | 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) |
जेवीएम | Java, Kotlin, Jython, Groovy, JRuby, C, C++, Clojure, Scala and several others | Reference implementation by Sun ; OpenJDK: code under GPL ; IcedTea: code and tools under GPL | Yes | Yes | JDK, OpenJDK & IcedTea with regular JIT : Java, C, C++, ASM ; IcedTea with the "Zero" JIT : Java, C, C++ | JVM is around 6500k lines; TCK is 80k tests and around 1000k lines |
एलएलवीएम | C, C++, Kotlin, Objective-C, Swift, Ada, Fortran, and 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)". | Yes | Yes | C++ | 811k [4] |
लुआ | Lua | Yes | LuaJIT | C | 13k + 7k LuaJIT | |
एमएमआईएक्स | MMIXAL | |||||
मोनो | CLI languages including: C#, VB.NET, IronPython, IronRuby, and others | Common Language Runtime clone | Yes | Yes | C#, C | 2332k |
नेकोवीएम | currently Neko and Haxe | Yes | x86 only | C | 46k | |
ओजेड | Oz, Alice | |||||
ओ-कोड मशीन | BCPL | |||||
पी-कोड मशीन | Pascal | UCSD Pascal, widespread in late 70s including Apple II | Yes | No | assembly, Pascal | |
तोता | Perl 5, Raku, NQP-rx, PIR, PASM, PBC, BASIC, bc, C99, ECMAScript, Lisp, Lua, m4, Tcl, WMLScript, XML, and others | Yes | Yes | C, Perl | 111k C, 240k Perl | |
पर्ल आभासी मशीन | Perl | op-code tree walker | Yes | No | C, Perl | 175k C, 9k Perl |
सीपीथॉन | Python | Yes | C | 387k C, 368k Python, 10k ASM, 31k Psyco | ||
पीवाईपीवाई | Python | Self-hosting implementation of Python, next generation of Psyco | Yes | Yes | Python | |
रुबिनियस | Ruby | Virtual machine for another Ruby implementation | Yes | Yes | C++, Ruby | |
सिल्वरलाइट | C#, VB.NET | A Micro-version of Microsoft .NET Framework to let applications run sandboxed inside browser | Yes | Yes | C++ | 7MB (initially released) |
स्कमवीएम | Scumm | Computer game engine | ||||
एसईसीडी | ISWIM, Lispkit Lisp | |||||
गिलहरी | Squirrel | Yes | Squirrel_JIT | C++ | 12k | |
लघु वार्ता | Smalltalk | |||||
एस क्यू lite | SQLite opcodes | Virtual database engine | ||||
Squeak | Squeak Smalltalk | Self hosting implementation of Squeak virtual machine. Rich multi-media support. | Yes | Cog & Exupery | Smalltalk/Slang | 110k Smalltalk, ~300K C |
SWI-Prolog | Prolog: SWI-Prolog, YAP | Yes | No | C, SWI-Prolog | ||
TraceMonkey | JavaScript | Based on Tamarin | No | Yes | C++ | 173k |
TrueType | TrueType | Font rendering engine | Yes | No | C (typically) | |
Valgrind | x86/x86-64 binaries | Checking of memory accesses and leaks under Linux | C | 467k [5] | ||
VisualWorks | Smalltalk | No | Yes | C | ||
Vx32 virtual machine | x86 binaries | Application-level virtualization for native code | No | Yes | ||
Waba | Virtual machine for small devices, similar to Java | |||||
Yet Another Ruby VM (YARV) | Ruby | Virtual machine of the reference implementation for Ruby 1.9 and newer versions | Yes | Yes | C | |
Z-machine | Z-Code | |||||
Zend Engine | PHP | Yes | No | C | 75k |
यह भी देखें
- आवेदन वर्चुअलाइजेशन
- भाषा बंधन
- विदेशी फ़ंक्शन इंटरफ़ेस
- कॉलिंग कन्वेंशन
- नाम मंगलिंग
- अप्लिकेशन प्रोग्रामिंग अंतरफलक (एपीआई)
- अनुप्रयोग बाइनरी इंटरफ़ेस (एबीआई)
- [[अनुप्रयोग वर्चुअलाइजेशन सॉफ्टवेयर की तुलना]]
- ईसीएमएस्क्रिप्ट इंजनों की सूची
- वेब असेंबली
संदर्भ
- ↑ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 292". Jcp.org. Retrieved 2013-07-04.
- ↑ "JITRewrite – Parrot". Trac.parrot.org. Retrieved 2013-07-04.
- ↑ Apple docs on OS X use of Java Shared Archive
- ↑ The LLVM Compiler Infrastructure, ohloh.net, 2011 Nov 30
- ↑ Valgrind, ohloh.net, 2011 Nov 30.