Internal execution flow ေတြဟာ ဒီေန႔
Python ရဲ့ standard implementation ကို သက္ေရာက္ေစၿပီး Python Language
ရဲ့လိုအပ္ခ်က္တစ္ခုလည္းမဟုတ္ပါဘူး။ ဒါေၾကာင့္ execution model
ဟာအခ်ိန္နဲ႔အမၽွ ေျပာင္းလဲ ေစခဲ့ပါတယ္။
Python Implementation Alternatives
Python ရဲ့ အဓိက implementations သုံးခု
အေနနဲ႔ CPython, Jython နဲ႔ IronPython ဆိုၿပီး ရွိပါတယ္။ CPython ကေတာ့
standard implementation ပါ။ တျခား implementation ေတြမွာလည္းသူ႔
ရည္ရြယ္ခ်က္ နဲ႔ လုပ္ေဆာင္မွု အလိုက္ရွိပါတယ္။ အားလုံးကေတာ့ Python
Language ပါပဲ ဒါေပမယ့္ မတူညီတဲ့ပုံစံေတြနဲ႔ program ကို execute
လုပ္တာပါ။
CPython
CPython ကေတာ့ တျခားႏွစ္ခုနဲ႔ယွဥ္ရင္ေတာ့
မူလ နဲ႔ စံ ျဖစ္တဲ့ implementation တစ္ခုပဲျဖစ္ပါတယ္။ Portable ANSI C
language code နဲ႔ေရးထားတဲ့ အတြက္ေၾကာင့္ CPython လို႔ေခၚတာပါ။
http://www.python.org ကေန ActivePython distribution နဲ႔အတူ download
လုပ္ထားတဲ့ ဟာဆိုရင္ေတာ့ အဲဒါ CPython ပါ။ Linux အမ်ားစု နဲ႔ Mac OS X
မွာဆိုရင္ေတာ့နဂိုပါၿပီးသားပါ။
စက္ထဲမွာနဂို install
လုပ္ၿပီးသားရွိေနတယ္ဆိုရင္ အဲဒါ CPython ျဖစ္နိုင္ပါတယ္။ Python ကို Script
Java သို႔မဟုတ္ .NET applications ေတြနဲ႔ မသုံးဘူးဆိုရင္ေတာ့ စံျဖစ္တဲ့
CPython ကိုပဲသုံးခ်င္မွာပါ။ ဘာျဖစ္လို႔လဲဆိုေတာ့ သူက reference
implementation ျဖစ္ၿပီး .. run တဲ့အခါမွာလည္း တျခား implementation ေတြနဲ႔
ယွဥ္ရင္ အျမန္ဆုံး ၊ အျပည့္စုံဆုံး နဲ႔ အႀကီးမားဆုံးပါ။
Jython
Jython ကို မူလက JPython
လို႔သိခဲ့ၾကပါတယ္။ Jython ဟာ Python ရဲ့ alternative implementation
ျဖစ္ၿပီး Java နဲ႔ေပါင္းစပ္ဖို႔ ရည္ရြယ္ခဲ့တာပါ။ Jython မွာ Java classes
ေတြပါဝင္ၿပီး အဲဒီ classes ေတြက Python source code ေတြကို Java byte code
အေနနဲ႔ေျပာင္းလဲၿပီး Java Virtual Machine (JVM) ကိုပို႔ေပးမွာျဖစ္ပါတယ္။
Python statements ေတြကို .py text files အေနနဲ႔ပုံမွန္အတိုင္းပဲ
ေရးမွာျဖစ္ၿပီး Jython system ကေန .pyc byte code နဲ႔ PVM (Python Virtual
Machine) အစား Java-based equivalents အျဖစ္ အစားထိုးမွာျဖစ္ပါတယ္။ Jython
ရဲ့ရည္ရြယ္ခ်က္ကေတာ့ Python code ေတြကို script Java applications
အျဖစ္ေျပာင္းဖို႔ပဲျဖစ္ပါတယ္။ Java နဲ႔ေပါင္းစပ္မွုဟာ လုံးဝ
သိသာထင္ရွားမွုမရွိဘဲ တကယ့္ Java Program run သလိုပဲထင္ရမွာပါ။
ဘာလို႔လဲဆိုေတာ့ Python code ေတြကို Java byte code
အျဖစ္ေျပာင္းလဲလိုက္လို႔ပဲျဖစ္ပါတယ္။ Jython scripts ေတြဟာ web applets နဲ႔
servlets အျဖစ္ေဆာင္ရြက္နိုင္မွာျဖစ္ၿပီး Java-based GUIs
တည္ေဆာက္တဲ့ေနရာမွာနဲ႔ တျခားေသာ ေနရာေတြမွာလည္း သုံးနိုင္မွာပါ။ ထို႔ျပင္
Python နဲ႔ေရးေနေသာ္လည္း Java classes ေတြကိုလည္း သုံးလို႔ရမွာျဖစ္ပါတယ္။
Jython က CPython ထက္စာရင္ ပိုေႏွးၿပီး CPython ေလာက္လည္းမႀကီးပါဘူး။
ဒါေပမယ့္ Java code ရဲ့ frontend အေနနဲ႔ သုံးနိုင္မယ့္ scripting language
ကို ရွာေဖြေနတဲ့ Java developer ေတြအတြက္ကေတာ့ အဓိက
စိတ္ဝင္စားဖြယ္တစ္ရပ္ပါပဲ။
IronPython
တတိယ Python ရဲ့ implementation ကေတာ့
IronPython ပါ။ IronPython ကိုေတာ့ Microsoft ရဲ့ .NET Framework တို႔
Linux ရဲ့ Mono တို႔နဲ႔ေပါင္းစပ္လို႔ရေအာင္ဒီဇိုင္းလုပ္ထားတာပါ။ IronPython
ဟာ Python ကို client ေရာ server components အျဖစ္နဲ႔ တျခား .NET Language
ေတြကေနပါ သုံးလို႔ရေအာင္ လုပ္ထားပါတယ္။ IronPython မွာလည္း Jython လိုပဲ
အေနာက္ႏွစ္ဆင့္ျဖစ္တဲ့ byte code ေျပာင္းတဲ့ ေနရာနဲ႔ PVM ေနရာမွာ .Net
environment အေနနဲ႔ထုတ္ေပးမွာပါ။ ၿပီးေတာ့ Jython လိုပဲ IronPython ကိုလည္း
.NET components နဲ႔ python ကိုေပါင္းစပ္ခ်င္တဲ့ developer ေတြ အဓိက
စိတ္ဝင္စားၾကပါတယ္။ IronPython ဟာ တခ်ိဳ႕ အေရးႀကီးတဲ့ optimization tools
ေတြကို ပိုေကာင္းေအာင္တြန္းပို႔ေပးနိုင္ပါတယ္။
Execution Optimization Tools
CPython, Jython နဲ႔ IronPython အားလုံးက
ျပဳလုပ္ပုံျခင္းကအတူတူပါပဲ …. Source code ကို byte code ေျပာင္းတယ္
ၿပီးရင္ byte code ကို သင့္ေလ်ာ္တဲ့ virtual machine မွာ excute
လုပ္ေပးတာပါပဲ။ ပုံမွန္ execution model ကိုသုံးမယ့္အစား Psyco
just-in-time compiler နဲ႔ Shedskin C++ translator အစရွိတဲ့ တျခား system
ေတြလည္းသုံးပါတယ္။ ဒီ system ေတြကို ပုံမွန္အားျဖင့္ python development
လုပ္တဲ့ေနရာမွာ သိဖို႔လိုခ်င္မွာလိုပါမယ္။ ဒါေပမယ့္ execution model
မွာသူတို႔ရဲ့ အလုပ္လုပ္ပုံကို နည္းနည္း ေလ့လာလိုက္႐ုံနဲ႔ သာမန္ မွာ model
ကိုနားလည္လြယ္ေအာင္ကူညီေပးနိုင္မွာပါ။
The Psyco just-in-time compiler
Psyco system က တျခား Python
implementation တစ္ခုေတာ့မဟုတ္ပါဘူး byte code execution model ကို
တိုးခ်ဲ႕ၿပီး program
ကိုျမန္ေအာင္လုပ္ေဆာင္ေပးတဲ့အစိတ္အပိုင္းတစ္ခုသာျဖစ္ပါတယ္။ Psyco က program
ရဲ့ byte code အစိတ္အပိုင္း ကို binary machine code အျဖစ္ျပန္ေပး
ရာမွာပိုမိုျမန္ဆန္ေအာင္ PVM ကိုတိုးျမႇင့္ေပးတာပဲျဖစ္ပါတယ္။ code
အျဖစ္ေျပာင္းစရာမလိုပဲ သို႔မဟုတ္ သီးျခား ေျပာင္းလဲတဲ့ အဆင့္ေတြမလိုပဲ
ဘာသာျပန္ျခင္းကိုလုပ္မွာျဖစ္ပါတယ္။
အၾကမ္းအားျဖင့္ program run ေနခ်ိန္မွာ
Psyco ဟာ ျဖတ္သန္းသြားတဲ့ objects ေတြရဲ့ information ေတြကို စုစည္းပါတယ္။
အဲဒီ information ေတြကို object types ေတြအတြက္ အံဝင္ခြင္က် စီမံထားတဲ့
machine code ေတြ generate လုပ္ဖို႔သုံးပါတယ္။ ထုတ္လိုက္ၿပီဆိုတာနဲ႔
program ရဲ့ execution speed ကိုျမန္ေအာင္ machine code က မူလ byte code
ေတြရဲ့သက္ဆိုင္ရာ အစိတ္အပိုင္းေတြကို အစားထိုးသြားပါတယ္။ Psyco နဲ႔ဆိုရင္
program ဟာ run ေနတဲ့ အခ်ိန္တြင္းမွာ ပိုမိုျမန္ဆန္လာၿပီး တစ္ခ်ိဳ႕
အေျခအေနမ်ိဳးမွာ Python code ေတြက Psyco ေအာက္မွာ ေျပာင္းလဲထားတဲ့ C code
ေတြနီးပါးေလာက္ျမန္လာ တတ္ပါတယ္။ ဘာလို႔လဲဆိုေတာ့ byte code ေျပာင္းလဲမွုက
program run ေနတုန္းမွာျဖစ္တဲ့ အတြက္ Psyco ကို သာမန္အားျဖင့္
Just-in-time(JIT) compiler လို႔ေခၚပါတယ္။ တကယ္ေတာ့ Psyco က Java language
ေတြရဲ့ JIT compiler နဲ႔ အနည္းငယ္ကြာျခားပါတယ္။ Psyco က specialized
လုပ္ထားတဲ့ JIT compiler ပါ။ Program က တကယ္သုံးတဲ့ data type
နဲ႔အံဝင္ခြင္က်ျဖစ္တဲ့ machine code ကို ထုတ္ေပးပါတယ္။ ဥပမာ – program
တစ္ခုရဲ့ အစိတ္အပိုင္းတစ္ခု က မတူညီတဲ့ data type ကို မတူညီတဲ့
အခ်ိန္တြင္းမွာသုံးမယ္ ဆိုရင္ မတူတဲ့ combination တစ္ခုစီအတြက္ Psyco က
version မတူတဲ့ machine code ေတြကို ထုတ္ေပးမွာပါ။
Psyco က Python code ေတြကို သိသိသာသာ
ျမန္ဆန္လာေစမွာပါ။ Psyco ရဲ့ website မွာ ေရးထားခ်က္အရ Psyco က ၂ဆ က ေန အဆ
၁၀၀ ထိ အရွိန္ျမႇင့္ တင္ေပးမွာပါ။ သာမန္အားျဖင့္ ေျပာင္းလဲထားျခင္းမရွိတဲ့
Python interpreter နဲ႔ source code ေတြနဲ႔ ဆိုရင္ေတာ့ အရွိန္ ၄ဆ ျမႇင့္
ေပးနိုင္ပါတယ္။ အမ်ားဆုံး အရွိန္ျမႇင့္ ေပးနိုင္တာကေတာ့ pure python
နဲ႔ေရးထားတဲ့ algorithmic code ေတြပဲျဖစ္ပါတယ္။ Psyco က python မွာ
တရားဝင္ေတာ့ ပါမလာေသးပါဘူး။ သူ႔ကို သပ္သပ္ install ထပ္လုပ္ရပါတယ္။
ဒါေပမယ့္ေနာက္ပိုင္းမွာေတာ့ အသစ္တစ္ခုျဖစ္ၿပီး Psyco လိုပဲ
ပိုမိုေကာင္းမြန္ေအာင္လုပ္ေပးနိုင္တဲ့ “PyPy” ဘက္ကိုဦးတည္ေနပါတယ္။ Psyco
ရဲ့ မေကာင္းတဲ့အခ်က္ကေတာ့ ခုေလာေလာဆယ္မွာ Psyco က Intel x86 architecture
chips အတြက္ပဲ machine code ကိုပဲထုတ္ေပးနိုင္ပါတယ္။
The Shedskin C++ translator
Shedskin က ေတာ့ ေပါင္းစပ္တဲ့ system
တစ္ခုပဲျဖစ္ပါတယ္။ ပထမဆုံး python code ေတြကို C++ code ကို
ေျပာင္းလိုက္ပါတယ္ ၿပီးမွ machine code အျဖစ္ကိုျပန္ေျပာင္းလိုက္တာပါ။
အဲလိုလုပ္ျခင္းအားျဖင့္ python code ေတြကို run တဲ့ အခါမွာ
platform-neutral ျဖစ္သြားေစပါတယ္။ Shedskin က စမ္းသပ္တဲ့ အဆင့္
မွာပဲရွိပါေသးတယ္ ဒါေၾကာင့္ Shedskin အေၾကာင္းအေသးစိတ္ကိုေတာ့
ဒီမွာမေျပာေတာ့ပါဘူး။
Frozen Binaries
အစစ္အမွန္ python compiler ကိုေမး
ေနၿပီဆို သူတကယ္ရွာေနတာ က သူ႔ရဲ့ Python Program ကို standalone binary
အေနနဲ႔ထုတ္ဖို႔ပါပဲ။ ဒီဟာက execution-flow concept ထက္စာရင္ သူ႔ရဲ့ program
ကို ေဈးကြက္တင္ဖို႔ idea ကပိုမ်ားပါတယ္။
ဒါေပမယ့္ဘာပဲျဖစ္ျဖစ္အားလုံးကဆက္ႏြယ္ေနပါတယ္။
Python program ကို တကယ့္ executable files ေျပာင္းဖို႔ျဖစ္နိုင္ပါတယ္ Python world မွာေတာ့ Frozen Binaries လို႔ေခၚပါတယ္။
Frozen binaries က program ရဲ့ byte code
files ေတြအားလုံးကိုစုေပါင္းၿပီး PVM နဲ႔ ေနာက္ၿပီး program အတြက္လိုအပ္တဲ့
Python အေထာက္အကူျပဳ files ေတြကို တြဲၿပီး package
တစ္ခုအေနနဲ႔လုပ္လိုက္တာပါ။ တစ္ခုနဲ႔တစ္ခု လုပ္ေဆာင္ခ်က္ေတြက
နည္းနည္းကြဲရင္ကြဲသြားပါလိမ့္မယ္။ ဒါေပမယ့္ ေနာက္ဆုံး ရလဒ္ ကေတာ့ customer
အလြယ္တကူေပးလိုက္နိုင္မယ့္ binary executable program တစ္ခုပဲရမွာပါ။ ဥပမာ –
windows မွာဆို customer ကိုအလြယ္တကူေပးလိုက္နိုင္မယ့္ .exe file
လိုမ်ိဳးေပါ့။ သူက byte code နဲ႔ PVM ကို အစိတ္အပိုင္း တစ္ခုျဖစ္တဲ့ Frozen
binary file အေနနဲ႔ပဲေပါင္းေပးလိုက္တာပါ။
Frozen binaries လုပ္လို႔ရမယ့္ system
သုံးခုရွိပါတယ္။ ပထမတစ္ခုကေတာ့ py2exe သူကေတာ့ Windows အတြက္ပါ။
ေနာက္တစ္ခုကေတာ့ PyInstaller (Py2exe နဲ႔အတူတူပါပဲ) သူကေတာ့ Linux and Unix
အတြက္ပါ။ ေနာက္ဆုံးတစ္ခုကေတာ့ freeze သူကေတာ့ Frozen binary ရဲ့ original
ပါ။ ဒီ system ေတြရဲ့ scope ကိုေျပာရမယ္ဆိုရင္ေတာ့ py2exe က Tkinter, Pmw,
wxPython နဲ႔ PyGTK GUI libraries ေတြသုံးထားတဲ့ programs ေတြနဲ႔ pygame
game programming toolkit သုံးထားတဲ့ program ၊ win32com client programs
နဲ႔ တျခားေသာ programs မ်ားကို standalone program အျဖစ္လုပ္ေပးမွာပါ။
Frozen binaries ေတြက တကယ့္ compiler ေတြနဲ႔ေတာ့မတူပါဘူး။ Frozen binaries
ေတြက byte code ကို Virtual Machine ကေန တစ္ဆင့္ run တာပါ။ ဒါေၾကာင့္
အစပိုင္းမွာ ျဖစ္နိုင္ေခ်ရွိတဲ့ တိုးတက္မွု က လြဲလို႔ frozen binaries ေတြ
ရဲ့ run တဲ့ speed က original file ေတြနဲ႔ တူတူေလာက္ပဲျဖစ္မွာပါ။ Frozen
binaries ေတြက ေသး မသြားပါဘူး (PVM ပါပါတယ္) ဒါေပမယ့္ လက္ရွိစံႏွုန္းအရ
ပိုၿပီးလည္း ႀကီးမသြားပါဘူး။ ဘာလို႔လဲဆိုေတာ့ Python ကို frozen binaries
ထဲမွာေပါင္းထည့္ ထားတာေၾကာင့္ပါ။ program ကို run ဖို႔အတြက္ Python ကိုထပ္
install လုပ္စရာမလိုပါဘူး။ ဒီအျပင္ code ေတြကိုလည္း frozen binaries
ထဲမွာေပါင္းထည့္ ထားတဲ့အတြက္ code ေတြကို ထိထိေရာက္ေရာက္
ဝွက္ထားလို႔ရပါတယ္။
Tkinter toolkit ေပၚမွာအေျခခံထား တဲ့
Python နဲ႔ေရးထားတဲ့ program ကို executable file အေနနဲ႔ေျပာင္းၿပီး
program ကို CD ေပၚမွာျဖစ္ျဖစ္ Web ေပၚမွာျဖစ္ျဖစ္ တင္လိုက္ၿပီဆိုရင္ end
users ေတြအေနနဲ႔ program ကို run ဖို႔ Python ကို install
လုပ္စရာလည္းမလိုပါဘူး။ Python ကို နားလည္ဖို႔လည္းမလိုပါဘူး။
ေနာင္ျဖစ္နိုင္ေခ်မ်ား ?
byte code formats အသစ္ နဲ႔ ေျပာင္းလဲသြားတဲ့ implementation ေတြ ျဖစ္လာနိုင္ေခ်ရွိပါတယ္။
ဥပမာ
ဥပမာ
- Programming languages အမ်ိဳးမ်ိဳးအတြက္ တူညီတဲ့ byte code format ၊ virtual machine နဲ႔ optimization နည္းလမ္း တို႔ကို ရည္ရြယ္တဲ့ Parrot Project ထြက္ေပၚလာျခင္း
- Stakless Python system ဆိုတာကေတာ့ C language မွာ call stack ေတြကို သိမ္းမထားတာတဲ့ standard CPython implementation variant ျဖစ္ပါတယ္။ ဒါဟာ Python ကို small stack architectures နဲ႔ လြယ္လြယ္ကူကူ ported လုပ္လို႔ရၿပီး coroutines အစရွိတဲ့ novel programming possibilities ေတြနဲ႔ open-up လုပ္လို႔ရမွာျဖစ္ပါတယ္။
- PyPy လို႔ေခၚတဲ့ project အသစ္ကေတာ့ PVM ကို Python ထဲမွာပဲ reimplement လုပ္ၿပီး implementation နည္းလမ္းသစ္ေတြကိုလုပ္မွာပါ။
ဒီ အနာဂတ္ implementation schemes ေတြက
python ရဲ့ runtime structure ကို တစ္နည္းနည္းနဲ႔ ေတာ့ေျပာင္းသြားမွာပါ။
ျဖစ္နိုင္ေခ်ရွိတာကေတာ့ byte code complier ေတြကေတာ့
အခ်ိန္အတိုင္းအတာတစ္ခုထိေတာ့ standard ျဖစ္ေနအုံးမွာပါ။
သယ္ေဆာင္ရလြယ္ကူမွုနဲ႔ runtime flexibility ျဖစ္မွုေတြကေတာ့ Python system
ေတာ္ေတာ္မ်ားမ်ားရဲ့ အေရးႀကီးတဲ့လကၡဏာေတြပဲျဖစ္ပါတယ္။ ဒါ့ျပင္ static
compilation ကို အေထာက္အကူျပဳဖို႔အတြက္ type constraint declarations
ေတြေပါင္းထည့္ တာက Python coding ရဲ့ flexibility, conciseness, simplicity
နဲ႔ overall spirit ေတြကို ပ်က္စီးေစမွာပါ။ Python ရဲ့ ျမင့္မားတဲ့
dynamic nature ေၾကာင့္ အနာဂတ္ implementation ဟာ ခုလက္ရွိ PVM ရဲ့
artifacts ကို ထိန္းသိမ္းထားနိုင္မွာပါ။
ေရးသားသူ – Li Jia Li (Myanmar Links)
No comments:
Post a Comment