Python Virtual Machine (PVM) – जब एक बार हमारा Program Byte Code में Compile हो जाता है अथवा किसी Existing .pyc File से Load हो जाता है, उसके बाद इसे Python Virtual Machine पर Execution के लिए भेज दिया जाता है।
ये PVM एक Code Loop होता है जो हमारे Program के Byte Code के प्रत्येक Code Instruction पर One by One Iterate करता है और उनके Operations को Perform करता है। PVM को हम हमारे Python Program का Runtime Engine भी कह सकते हैं जो कि हमारे Python System के रूप में हमेंशा उपलब्ध रहता है और यही वह हिस्सा होता है, जो Actual में हमारी Python Script को Execute करता है। तकनीकी रूप से कहें तो इस PVM को ही Python Interpreter कहा जाता है।
एक Python Script को Run करने से सम्बंधित जितनी भी Complexities हैं, वे सभी एक Python Programmer के रूप में हमसे पूरी तरह से Hidden रहती हैं। Byte Code Compilation पूरी तरह से Automatic होता है, और PVM हमारे उस Python System का एक Part होता है, जिसे हमने हमारे Computer System में Install किया है। एक Programmer के रूप में हमें केवल अपने Programs Create करने होते हैं और हमारा Python System उस Program को Run करने से सम्बंधित सभी Logistic Tasks को हमारी जानकारी के बिना Internally Handle करता है।
चूंकि Python, C/C++ की तरह एक Compiled Language नहीं है बल्कि Java की तरह एक एक Byte Code आधारित Interpreter Language है, इसलिए C/C++ Background के Programmers को Python के Programs थोड़ा Slow Performing महसूस होते हैं। क्योंकि C/C++ के Programs की तरह Python के Programs “make” Step से गुजरकर पूरी तरह से Binary Executable में Translate नहीं होते, बल्कि एक Intermediate Bytecode में Translate होते हैं।
इसीलिए Python Programs को Execute होने के लिए हमेंशा Python System की जरूरत होती है जबकि C/C++ के Compiled Programs को “make” Process से गुजरने के बाद किसी अन्य Executable Environment की जरूरत नहीं रहती क्योंकि C/C++ के Programs पूरी तरह से Underlying CPU Architecture (Intel, ARM, Athlon, etc…) के Machine Instructions में Translate हो जाते हैं, जिन्हें ये CPUs Directly पहचान लेते हैं और Execute कर देते हैं।
जबकि Python के Programs Bytecode में Translate होते हैं इसलिए जब भी इन्हें Execute किया जाता है, Underlying Python System का PVM Loop, Underlying CPU Architecture के अनुसार Machine Codes Generate करता है और Python Program को Execute करके Final Result Return करता है।
चूंकि Python Program को Run करते समय हर बार Python Interpreter को इस Process को Follow करते हुए Underlying CPU Architecture के लिए CPU Instructions Create करना पड़ता है, इसीलिए Python Program की Execution Speed, C/C++ Compiled Programs की Execution Speed से थोड़ी कम होती है लेकिन क्योंकि Python Program Bytecode आधारित Intermediate Machine Code को Execute करता है, इसलिए Pure Interpreter Based Programming Language की तुलना में Python Programs की Execution Speed तुलनात्मक रूप से काफी Fast होती है।
लेकिन Python के Bytecode Model पर आधारित Language होने का एक फायदा भी है और वो फायदा ये है कि Python Program के Development व Execution Environment के बीच कोई अन्तर नहीं है। इसलिए हम जैसे ही Python Program Code को लिखते हैं, उसे बिना किसी तरह का Compilation Process Follow किए हुए तुरन्त Execute करके Output देख सकते हैं, जो कि Compiled Languages के संदर्भ में सम्भव नहीं है। क्योंकि Python Programming में Python Bytecode Compiler हमेंशा ही हमारे Program को Run करने वाले Runtime System का एक हिस्सा होता है और ये हिस्सा हमारे किसी भी Python Program के Execution के दौरान हमेंशा Present रहता है।
इसी वजह से Python का प्रयोग करते हुए Application Development Process काफी Rapid यानी Fast हो जाता है। क्योंकि हमें कभी भी किसी भी Program Change या Modification के लिए पूरे Python Application को C/C++ की तरह Compile नहीं करना पड़ता बल्कि हम किसी पहले से Exist Application में किसी भी Code को Just Type and Run तरीके से Add करके Test कर सकते हैं व अपने Python Application की Functionalities को Enhance कर सकते हैं।
इसी विशेषता के कारण Python अन्य Compiled Languages की तुलना में ज्यादा Dynamic बन जाता है। क्योंकि यही विशेषता हमें ये सुविधा देता है कि हम एक Python Program के अन्दर Codes के माध्यम से एक और नया Python Program, Runtime में Dynamically Create करके Execute कर सकते हैं और उस Executed Program से Return होने वाले Result को Use करते हुए अपनी किसी Specific जरूरत को पूरा कर सकते हैं।
Python में eval() व exec() नाम के Built-in Methods हमें यही काम करने की सुविधा देते हैं। ये Methods String के रूप में Python Codes को Accept करते हैं और उन्हें Execute करके Result Return कर देते हैं। जैसे-
इस Example Code में हमने DynamicCode.py नाम की एक File में उपरोक्तानुसार एक dynamicCode नाम का Variable Define किया है और उसमें String के रूप में एक Python Code लिखा है जो कि Output में Hello World! String Print करेगा।
जब हम इस Program को Python Interpreter पर Execute करते हैं, तो हमें निम्नानुसार Output प्राप्त होता है-
हम देख सकते हैं कि इस Example में हमने print() Method को एक String के रूप में Specify किया है, फिर भी Output में print() Statement Execute होकर “Hello World!” String Display कर रहा है। ऐसा इसीलिए हो रहा है क्योंकि हमने exec() Method को Use किया है, जिसके माध्यम से Python Interpreter हमें Runtime में Python Program Codes को Dynamically Create करके Execute करने की सुविधा देता है।
इसी तरह के Dynamic Code Insertion की सुविधा के कारण ही Python काफी Powerful Language बन जाता है क्योंकि हम जब चाहें तब Dynamically इसमें किसी भी Program Code को Insert, Append करके उसे Execute करवा सकते हैं।
यदि सरलतम शब्दों में कहें तो Python में जो कुछ है, वो सबकुछ Python का Runtime ही है। इसमें कोई भी Initial Compile-Time Phase नहीं होता और Program में जो कुछ भी होता है, वो सबकुछ तब ही होता है, जब Python Program को Run किया जाता है। यहां तक कि Functions, Classes का Creation व Modules की Linking सबकुछ Python Program के Runtime में ही होता है। सामान्यत: अन्य कई Programming Languages में ये सभी काम Program को Run करने से पहले ही हो जाते हैं, लेकिन Python में सबकुछ Python Program को Execute करने के बाद होता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Python in Hindi | Page: 602 | Format: PDF