facebook twitter linkedin rss


Execution 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 ကို ထိန်းသိမ်းထားနိုင်မှာပါ။