အခြား ဆက်စပ်ပို့စ်များ
- Python လေ့လာကြမယ် အပိုင်း (၁) – ရေးသားသူ (ဥက္ကာ)
- Python လေ့လာကြမယ် အပိုင်း(၂) – ရေးသားသူ (ဆုနှင်းဝေ)
- Python လေ့လာကြမယ် အပိုင်း(၃) – ရေးသားသူ (နိုင်လင်းအောင်)
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)