Professional Documents
Culture Documents
Practical Theory of Programming Languages Part 1to4
Practical Theory of Programming Languages Part 1to4
တုနး် က ကွနပ
် ျူတာတက္ကသိုလ်တွေမှာ မာစတာမှာသင်တယ် အခု လည်းသင် သေးတယ်ထင်တယ်
အဲ ဒ
့ ီစာအုပ်ကို ကိုးကားမှာပေါ ့ Twelfth edition ပေါ ့ နောက်တစ် အုပ်က Programming
ကောင်တွေကတော့ဖတ်ရခက်တယ် အဲ ဒ
့ ါတွေပါမှာပေါ ့။
language တွေဘယ်လအ
ို လုပ်လပ
ု ် သလဲ၊ ဥပမာ ဆိုပါစို့ Java, C#, C++, JS functional
ဆိုလရတယ်
ို့ ။ အဲ တေ
့ ာ့မေးစရာရှိ တာက theory of programming language ဆိုတဲဘ
့ ာသာရပ်
ကို ဘာကြောင့်လေလ
့ ာဖို့ လိသ
ု လဲပေါ ့ ၊ ဘာကြောင့်လေလ
့ ာလဲဆိုတော့ ကျွန်တော် တု့ ိက developer
လိက
ု ်ပြီးရင် programmer တွေက အကြောင်းကြောင်းကြောင့် တခြား language တွေကိုပါ ထပ်
တယ် အဲ တေ
့ ာ့ ခု နက programming language theory တွေရဲ ့အကြောင်းကိုနားလည်ထားရင်
မြင့်နားလည်နင
ုိ ်သွားမယ်၊ နောက်တစ် ခုက programming language theory တွေထဲမှာဘာပါ
ပါတယ်၊ အဲ လ
့ ပ
ို ါတော့ ဘာဖြစ် လဲဆိုတော့ ဆိုလခ
ို ျင်တာသည် ကိုလေလ
့ ာတဲဟ
့ ာကို truly
က ပြောလို့ ရတယ်။ အဲ တေ
့ ာ့ ဒါကိုနားလည်ခြင်းအားဖြင့် ဘာဖြစ် သွားမလဲဆိုရင် ကိုယ်က
တာဆိုရင် object-oriented ဖြစ် တဲ့ statically typed ဖြစ် တဲ့ တခြားသော Programming
အခါမှာ အဲ ကေ
့ ာင်တွေကိုပြန်ပြီးတော့ reuse လုပ်လရတယ်
ို့ ၊ knowledge ကိုပြန်ပြီးတော့
transfer လုပ်လတယ်
ို့ ုိ ်တဲ၊့ ဒီ language တွေ
၊ နောက်တစ် ခုကဘာလဲဆိုတော့ ဒီဟာတွေကိုသင်နင
ကို ကောင်းကောင်းမွနမ
် ွနရ ု ်တဲလ
် ှ င်းပြနိင ့ ူက မမြင်လ၊ို့ မမြင်တဲအ
့ ခါကျတော့ ကျွန်တော့အနေနဲဒါ
့
ရှ င်းပြဖို့ က မလွယ်ဘူး၊ အဲ တေ
့ ာ့ဘာပြဿနာတက်လဲဆိုတော့ ဒါတွေကိုရေးပြဖို့ ကျတော့ time အရ
ပိုအဆင်ပြေတာပေါ။့ အဲ တေ
့ ာ့ ဒီ programming language theory ကိုသင်ရတဲ ့ ရည်ရွယ်ချက်
ကို သဘောပေါက်မယ်ထင်တယ်။
ဒါတွေကိုသင်တဲအ
့ ခါ Pre-requisites ပေါ ့ ဘာတွေကို လိမ
ု လဲဆိုရင် အနည်းဆုံး programming
နားလည်နင
ုိ ်မယ်။ တစ် ချ ို့ဟာတွေကျတော့ example နဲ code
့ တွေဘာတွေရေးပြမယ်၊ တချ ို့ဟာ
ရှ င်းပြတာမျ ိုးတွေရှိ မယ်။ ဒီစာအုပ်တွေကို http://libgen.rs/ မှာ ဒေါင်းလို့ ရမယ်။ နောက်တစ် ခုရှိ
သေးတယ် သင်ပေးရတဲ ့ အကြောင်းရင်းက စောက်မြင်ကပ် အောင်ပြောရရင် ဆရာကြီးလုပ်တာပေါ ့
လေ :3 ။ ဘာတွေပါမလဲဆိုတာပြောပြဖို့ ကျန်သေးတယ်။
theory အဲ တ
့ ာတွေကိုနားလည်ခြင်းအားဖြင့် ကျွန်တော် တု့ ိက programming language တွေကို
switch လုပ်လရတယ်
ို့ ။ ဥပမာ C++ ကို နားလည်တဲလ
့ ူက Java ကို switch လုပ်ဖို့က မခဲ ယဥ်း
ကွနပ
် ျူတာတက္ကသိုလ်က ကလေးတွေသည် ဒါကိုသင်ရလိမ့်မယ့်၊ သင်တာသင်ရပေမယ့် စာအုပ်မှာ
ရှိ တဲ့ language တွေက ကျွန်တော် တု့ ိဆီ မှာ ရှိ တဲ့ domain နဲမတူ
့ ဘူးဖြစ် နေတယ်၊ ဥပမာ ဆိုပါစို့
ကျွန်တော် တို့ဆီ မှာဆိုရင် Java သုံးတယ် C# သုံးတယ် but ဒါပေမယ့် သူတု့ ိက example ပြတာ
ကိုပြတယ်ဆိုရင် အဆင်ပြေမှာမဟုတ်ဘူး။
မဟုတ်ဘူး။ အဲ တ
့ ာသည် ကျွန်တော် တု့ ိက concept တွေအားနည်းလို့ ။ အဲ တေ
့ ာ့ ကိုက ဒီ
တို့ က large scale အတွက်ဆိုရင် ဘယ် language ကသင့်တော် တာလဲ၊ ဥပမာ ကျွန်တော် တို့က
တယ်။ အဲ ဒ
့ ီအခါကျရင် မလောင်ဖို့ ဖင်မနာဖို့ အဲ တ
့ ာလေးတွေရှိ တယ်။ အဲ လ
့ ို willing mindset နဲ ့
အဲ တေ
့ ာ့ large scale ရေးမှာလား large scale ဆိုရင် high performance ဖြစ် တာ။
စစ်နင
ုိ ်တယ် အဲ ့ compiler တွေသည် interpreter တွေနဲ ့ ယှဥ်ရင် high performance ဖြစ်
ပေးနိင
ု ်တယ်၊ အဲ တေ
့ ာ့ static language တွေသည် code base ကြီးလေလေ အားသာလေလေ
ဖြစ် တယ်။ အဲ ဒ
့ ါဆိုရင် မေးစရာရှိ တယ် facebook က PHP နဲရေးထားတယ်
့ ပေါ ့ facebook လို
တယ်။ ဒါပေမယ့် facebook သည် PHP နဲ ့ run နေတာမဟုတ်ဘူး advanced ဖြစ် တဲ့
programming language တစ် ခုန ဲ run
့ နေတာ။ HACK လို့ ခေါ်မှာပေါ ့။ အဲ တ
့ ာက PHP ကို type
တယ်။ အဲ တေ
့ ာ့ enterprise world မှာကြည့်လက
ို ်ရင် java တို့ C# တို့သည် ပန်းပန်နေတာ။ အဲ ့
ရွေးလို့ ရမယ်။
အုံး လိက
ု ်တက်အုံးဆိုပြီး ပြဿနာရှိ လာတယ်။ အဲ တေ
့ ာ့ ဒီprogramming language theory
ဥပမာဆိုပါစို့ java မှာရှိ တဲ့ concept တွေ type system တွေသည် kotlin မှာလည်းရှိ တယ် အဲ ့
နားလည်မှ။ ဆိုလတ
ို ာက theory of programming language တွေကို နားလည်ဖို့လိတ
ု ယ်။
တော့။ recursion သည် recursion depth ဖြစ် သွားလေလေ stack တွေဆောက်ရတာဖြစ် တဲ့
ကတစ် ခါခေါ်တိင
ု ်း အပေါ်ကို method တစ် ခုpush လုပ်လပ
ု ် သွားတယ် အဲ တေ
့ ာ့ maximum
object oriented programming language ၊ သူ့ မှာရှိ တဲ့ assosiation တို့ composition တို့
ရင် computer နဲ တွ
့ က်ချက်နေတာကိုပြောတာပေါ ့ ၊ ဒါကတော့ ရို းရို းရှ င်းရှ င်းပြောရမယ်ဆိုရင်ပေါ ့
down ဆင်းကြည့်ရတဲအ
့ တွက် computer ကဘယ်လလ
ို ပ
ု ် သွားလဲ ၊ ဥပမာ variable ဆိုတာ
တဲခ
့ ါကျရင် သူသည် လျှပ် စီးလေးတွေပေါ ့ ၊ အဲ ့ လျှပ် စီးလေးတွေကရော တကယ်ရှိလားလို့ မေးရင်
ဲ ့ ားတာ။ အဲ တေ
ဆင့်ဆင့်နသွ ့ ာ့ ဒါတွေကိုနားလည်ခြင်းအားဖြင့် overall advancement of
computing ကိုနားလည်သွားမယ်ပေါ ့။
အဓိ ကကတော့ စာအုပ်တွေဖတ်ပေါ ့ ၊ ကျွန်တော် ကတော့ ဒီစာအုပ်တွေထဲကပါတာတွေရှိ မယ်
ို ျင်တဲသ
ဘာတွေတော့ ထည့်မယ် ၊ ဘာတွေတော့မထည့်ဘူးပေါ ့ ၊ ဆိုလခ ့ ဘောနဲပဲ့ ပြောတာပေါ ့။
2. Programming Domains
domain ဆိုတာ အသုံးချတဲ ့ area ပေါ ့။ ဥပမာ ရို ရု ိ းပြောရမယ်ဆိုရင်တော့ ကျွန်တော် တို့က
mobile တို့ web တို့ natural language processing တို့ AI တို့ ML တို့ တချ ို့ဆိုရင် high
ပေါ ့ စင်္ကာပူမရောက်ဖူးတဲအ
့ တ္ွက်။
အခု ပေါ်လာတဲ ့ machine learning တွေဘာတွေနဲ ့ မဟုတ်သေးဘူး ၊ သူက Symbolic လို့ ခေါ်
list တွေသုံးတဲကေ
့ ာင်ပေါ။့ အခု လို machine learning မဟုတ်တဲခေ
့ တ်ပေါ ့ ၊ အဲ ကေ
့ ာင်တွေဆို
python က interpret လုပ်တဲ့ language ပေါ ့၊ interpret လုပ်တဲ့ language ဖြစ် တော့ Java
တို့ ဘာတို့ နဲ ့ ယှဥ်ရင် နှေးပေမယ့် machine learning မှာ Computing power အများကြီးလို
တယ် အဲ တ
့ ာတွေဘယ်လိရေ
ု းထားလဲပေါ ့။ တကယ်တမ် းကကျ နောက်က library တွေသည်
python နဲ ရေးတာမဟု
့ တ်ဘူး။ ဥပမာ ကျွန်တော် တု့ ိက deep learning library တစ် ခုရှိတယ်ပေါ ့
အဲ ဒ
့ ီ deep learning library သည် python နဲ ့ မရေးဘူး C ဒါမှမဟုတ် C++ နဲရေးလိ
့ က ု ်တယ်
ရေးပြီ းသွားတော့ အဲ ကေ
့ ာင်ကို python interface ထုတ်ပေးလိက
ု ်တယ် wrapper လုပ်ပေးလိက
ု ်
တယ် အဲ တေ
့ ာ့ python ရဲ ့ အားသာချက်က ဘာလဲဆိုရင် learn လုပ်ရတာ ရှ င်းတယ် syntax က
အသုံးပြုရတာလွယ်တယ်။ အဲ တေ
့ ာ့ scientific background ကလာတဲလ
့ တွေ
ူ အတွက်ကျ
application အနေနဲလု
့ ပ်နေတဲကေ
့ ာင်ပေါ ့ ။ web ဆိုရင် ကျွန်တော် တု့ ိက PHP ကိုပဲ ပြေးမြင်လိမ့်
တယ် C နဲလည်
့ းရေးလို့ ရတယ်၊ ဟိးု အရင်တန
ု း် ကတော့ C နဲရေးတာပေါ
့ ့၊ Server-side
programming ခေါ်တဲအ
့ ခါရှိ ပါသေးတယ် မေ့သွားပြီ သတိရရင်တော့ ပြန်ပြောပြမယ်။ အခု
တွေဘာတွေရှိ မယ်၊ အဲ တ
့ ာမျ ိုးတွေနဲ သွ
့ ားလို့ ရတာပေါ ့။
assess လုပ်ဖို့လိတ
ု ယ်။ ဆိုလတ
ို ာကကောင်းတယ်မကောင်းဘူးပြောတဲအ
့ ခါကျရင် criteria နဲ ့
ဆုံးဖြတ်ရမှာပေါ။့
3.1 Readability
ဥပမာ Readability ပိုင်းအရကြည့်မယ်ဆိုပါစို့ C like language တွေဖြစ် တဲ့ Java တို့ C# တို့ ဆို
// VB .Net
Public Class Application
Public Shared Sub Main()
System.Console.WriteLine(“Hello, World!”)
End Sub
End Class
//C-like language
if(){
while(){
if(){
}
}
}
if(){
while(){
if(){
}
}
}
if(){while(){if(){}}}
ရေးလို့ ရတဲအ
့ တွက် while ကဆုံးတာလား if ကဆုံးတာလားဆိုတာ မသိ တော့ဘူး။ အဲ တ
့ ာသည်
တယ်။အဲ တေ
့ ာ့ language တစ် ခုရဲ့ readabilty ကောင်းမကောင်းဆိုတာသည် ဒါမျ ိုးကိုပြောတာ။
ဥပမာ Scala ဆိုရင် powerful ဖြစ် တဲ့ language ပဲ ဒါပေမယ့် သူ့ ရဲ့ feature တွေသည် အတော်
ကိုရှုပ်တယ် ၊ အဲ တေ
့ ာ့သူသည် growth ရယ် popularity ရယ်ဖြစ် ဖို့က မလွယ်ဘူး။ အဲ တေ
့ ာ့
ု ် ချင်တဲအ
ကိုယ်လပ ု ဲ ရှုပ်ရှုပ်ရှက်ရှက်မလိဘ
့ လုပ်တစ် ခုကို effort အများကြီးမလိဘ ု ဲ န ဲ ့ ပြီ းတာကို
ပေါ။့
3.3 Orthogonality
သင်္ချာမှာဆိုရင်တော့ orthogonal vector ပေါ ့၊ programming language မှာကျတော့
language feature တွေကို small set အနေနဲ ့ ပေးထားတာ၊ ဆိုပါစို့ feature လေးခု လောက်ပဲ
ပေးထားတယ်ပေါ ့ ဒါပေမယ့် အဲ လေ
့ းခု က အပြန်အလှနခ
် ျ ိတ်ဆက် ပြီး သုံးလို့ ရနေတယ်ဆိုရင်
orthogonal ဖြစ် တယ်ပေါ ့ ဥပမာ ဆိုပါစို့ overloading ပေးထားတယ် ဥပမာ java မှာဆိုရင်
ထားလို့ ။ အဲ လ
့ ို small set of language features တွေအပြန်အလှနခ
် ျ ိတ် ဆက်ပြီးသုံးလို့ ရင်
ဥပမာ orthogonal မဖြစ် တဲ့ design ကို example ပြမယ်ဆိုရင် Assembly မှာ operator
ကြောင့် ရတာပေါ။့
ပေါ၊့ အဲ တေ
့ ာ့ data type ပေးထားရင် data abstraction လို့ ခေါ်တယ်။ data abstraction ဆို
ဘယ်လောက်ထိဆောက်လရသလဲ
ို့ ပေါ ့ ဥပမာ object တွေဆောက်လရတယ်
ို့ ။ နောက်ဥပမာ Java
ို ဲ အ
first class မဟုတ်ဘူး၊ ဆိုလတ ့ ဓိ ပ္ပါယ်က first class ဖြစ် ဖို့က အချက်သုံးချက်ရှိတယ်၊ တစ်
parameter နဲ ့ပို့ လို့ ရရမယ် သုံးအချက်က function တစ် ခုကို parameter အနေနဲ ့return ပြန်
programming နဲရေးရင်
့ ပိုရှုပ်သွားတယ်။ အဲ တေ
့ ာ့ Javascript မှာရှိ တဲ့ function တွေသည်
abstraction တွေကိုဆောက်လရလဲ
ို့ ၊ နောက်တစ် ခုက အဲ ဒ
့ ီ data type တွေအပေါ်မှာ
့ ဲနောက်ပိုင်းကျရင်တော့ဒါမျ ိုးတွေလာမှာ
တွေဘယ်လောက်ထိရလဲ ဒါမျ ိုးတွေပါတာပေါ ့။ ရှ င်းတဲထ
ပေါ။့
အမှနတ
် ကယ်က အဲ လ
့ မ
ို ဟုတ်ဘူး။ C based family syntax နဲရေးရတဲ
့ အ
့ ခါမှာလည်း
တယ်၊ ဒါပေမယ့် Java Designer တွေက C ရဲ ့ syntax နဲပဲ့ တူအောင် design ချခဲ့ ကြတယ်။ သူ
တွေအများကြီးရှိ တဲဈေ
့ းကွက်ကိုသူတု့ ိကသိ ပြီးသား၊ အဲ တေ
့ ာ့ C programmer တွေသည်
နဲသာ
့ java ကပေါ်လာခဲ့ မယ်ဆိုရင် C programmer တွေသည် Java ကိုလေလ
့ ာဖို့ လက်တန
ွ မှ
့် ာ
ပေါ။့ အဲ တေ
့ ာ့ language designer တွေသည် syntax ကို ရှိ ပြီးသား language တွေရဲ ့ အထာနဲ ့
ပဲ ရေးလေ့ရှိတယ် အဲ တေ
့ ာ့ ဘယ်လိဖြ
ု စ် သလဲဆိုတော့ syntax သည် designer ရဲ ့ ဘယ်လလ
ို ခ
ို ျင်
တယ်ဆိုတဲအ
့ ပေါ်မှာပဲ မူတည်တယ်။ အမှနတ
် ိင
ု ်းပြောရရင် Readability သွားမလား writability
3.6 Writability
အစောကပြောခဲ့ သလို readability ကောင်းတိင
ု ်း writability ကောင်းတာမဟုတ်ဘူး။
writability ဆိုတဲအ
့ ဓိ ပ္ပါယ်က ဒီ program ကိုဘယ်လောက်တိတ
ု ိရေ
ု းလို့ ရသလဲပေါ ့၊ ဥပမာ ကိုယ်
က လုပ်ချင်တဲအ
့ လုပ်တွေရှိ တယ် အဲ အ
့ လုပ်တွေကို တိတ
ု ိတ
ု ပ
ု ် တပ
ု ် ရေးလို့ ရလေ၊ အမှ နတ
် ိင
ု ်းပြောရ
ု ဲ မရေးရလေကောင်းလေပဲ ၊ အဲ တ
ရင် ကျွန်တော် ပြောနေကျစကားလိပ ့ ာကို writability လို့ ခေါ်
ို ဲ အ
ပြဿနာကဘာဖြစ် သလဲဆိုရင် သူက writability ကိုကျစေတယ်၊ ဆိုလတ ့ ဓိ ပ္ပါယ်က ကိုယ်က
အဲ တ
့ ာသည် writability ကိုကျတယ်လို့ပြောရမှာပေါ ့။
သည် simple ဖြစ် တယ်၊ နောက်ပိုင်း language trend အရ GO သည် functional feature
loop ကိုဒီလိပ
ု တ်တယ်
for(int i=0;i<10;i++){
}
အဲ ဒ
့ ီတော့ loop ဆယ်ခါလေးပတ်ဖို့ အများကြီးရေးရတယ်၊ အကယ်၍သာ ကျွန်တော် တု့ ိက
10.times {
}
ဆိုပြီးရို က်လရခဲ ို့ ့ ရင်ရော၊ Ruby မှာဆိုရင် အဲ လ
့ ရ
ို တယ်၊ writability အရကြည့်လက
ို ်ရင် ruby
ပိုပြီးတော့ တတ်လယ
ွ ်မလဲ၊ ဖတ်လို့ရောလွယ်မလား၊ ruby မှာလိဆ
ု ိုပိုအဆင်ပြေတာပေါ ့
Smalltalk တို့ဆိုလည်းအဲ လ
့ သ
ို ွားတယ်။
3.7 Reliability
Reliability ကဘာလဲဆိုရင် program တစ် ခုက runtime မှာ မ hang ဘဲ န၊ဲ ့ အဲ တေ
့ ာ့
မ hang တဲ ့ language ရှိ သလားဆိုရင်မရှိ ဘူး၊ ဒါပေမယ့် ဘာရှိ သလဲဆိုရင် hang တာနည်းတာနဲ ့
Javascript ကိုပြေးမြင်မယ်လထင်
ို့ တယ်၊ ဥပမာ string နဲinteger
့ နဲပေါင်
့ ို ျင်တဲ့
းတာကိုယ်လခ
တယ်။
ပေးနိင
ု ်တာရယ်၊ runtime မှာerror စစ် ပေးနိင
ု ်တာရယ်ပါတယ်၊ အဲ တ
့ ာကို type checking လို့
operation လုပ်လမရဘူ
ို့ း။
int a=10;
a+true; // error
အဲ တ
့ ာသည် type checking ကြောင့်ဖြစ် တယ်။ type checking မှာအဲ လ
့ ိုပြဿနာဖြစ် မ
ုိ ်တဲ့
တွေသည် type checking လုပ်ပေးတယ်ဆိုတာ program ကိုမ run ခင်ကတည်းကဖြစ် နင
အလုပ်ပေါ။့ type checking မှာ နှစ်မျ ိုးရှိ တယ် static type checking နဲ ့ dynamic type
checking ပေါ၊့ static type checking ကတော့ မ run ခင်error စစ် တယ်၊ dynamic type
ဘူးinteger နဲstring
့ နဲကောက်
့ ပေါင်းလိက
ု ်လည်းပြဿနာမရှိ ဘူး boolean နဲကောက်
့ ပေါင်းလည်း
checking နဲပတ်
့ သတ်ရင်ဖေ့ဘုတ်မှာရေးထားတာတွေရှိ တယ် static type checking,
dynamic type checking, gradual type checking, optional type checking စသဖြင့်
ရှ ာဖတ်ကြည့်ပေါ။အဲ
့ တေ့ ာ့ type checker က programming language တိင
ု ်းမှာရှိ သလားဆို
C , C# အဲ လ
့ အ
ို နွယ်ဝင်တွေမှာပဲ ရှိတယ်။ အဲ ကေ
့ ာင်တွေcompiler သုံးရတဲအ
့ တွက်type
အဲ တေ
့ ာ့ဘာပိုကောင်းသလဲဆိုရင် reliable ပိုဖြစ် တယ်။ reliable ဖြစ် တဲအ
့ တွက်အဲကေ
့ ာင်
typescript ဆိုတာထုတ်လက
ို ်တယ်၊ အဲ တေ
့ ာ့ဘာဖြစ် သလဲဆို
အခါcompile time မှာလည်း error တွေစစ်ရတယ်။ runtime မှာလည်း error စစ် ရတယ်၊
တယ်အဲတ
့ ာကို exception handling လို့ ခေါ်တယ်။ အဲ တေ
့ ာ့programming language တစ် ခု
တယ်reliable
ဖြစ် တာပေါ။ဥပမာ
့ runtime မှာဖြစ် ချင်ရာဖြစ် ပြီးတော့hang သွားတာမျ ိုး၊ runtime မှာဖြစ် သွား
တဲe
့ rror တွေကိုစစ် မပေးနိင
ု ်ဘူးဆိုရင်ဒါသည်မကောင်းဘူး၊အဲ တေ
့ ာ့exception handling လုပ်
3.9 Aliasing
Alias ဆိုတာဘာလဲဆိုတော့ identity ပေါ ့ variable name ကိုပြောတာပေါ ့။ ဥပမာ
3.10 Cost
Programming language တစ် ခုမှာcost ဆိုတာအများကြီးရှိ တယ်
အဲ တေ
့ ာ့software တစ် ခုကရေးပြီ းတာနဲ ့၊ shortlist ဖြစ် တဲကေ
့ ာင်ဆိုဘာမှမဖြစ် ဘူး ၊ shortlist မ
ဖြစ် တဲကေ
့ ာင်ကျတော့ maintenance cost ရှိ တယ်၊ maintenance တွေလုပ်ရတယ် ၊
type မပါတဲအ
့ တွက် ဥပမာဆိုပါစို့ ကျွန်တော် တု့ ိက function တစ် ခုပေးလိက
ု ်တယ် အဲ ပေ ု ်တဲ့
့ းလိက
ကောင်က A ဖြစ် ချင်ဖြစ် မယ် B ဖြစ် ချင်ဖြစ် မယ် object ဖြစ် ချင်လည်းဖြစ် မယ် integer ဖြစ် ချင်
လည်းဖြစ် မယ်၊ အဲ ဒ
့ ီအပေါ်မူတည်ပြီးတော့ ကျွန်တော် တု့ ိက infer လုပ်လမရဘူ
ို့ း၊ ဒါပေမယ့် static
အဲ တ
့ ာသည် portability နဲဆိ
့ ုင်တယ်။ ဥပမာဆိုပါစို့ customer က
ပေမယ့် run လို့ မရဘူး ဘာလို့ လဲဆိုတော့ software တွေကမတူဘူး operating system တွေမ
ချင်မှ လုပ်မယ်။ အဲ တေ
့ ာ့ portability ပြဿနာတက်တယ်။ အဲ တေ
့ ာ့
ု ်တဲအ
လိက ့ တွက် ကြိုက်တဲ့platform မှာအဆင်ပြေပြေrun လို့ ရသွားမယ်၊ အဲ တေ
့ ာ့ သူတု့ ိသည် ပို
ပြီ းတော့ အသုံးများသွားတယ်ပေါ ့။ အမှနက
် Java က VM ကြားခံ တဲc
့ oncept ကိုစပြီ းတော့
ပေါ။့ Fortran ပေါ်တယ်ပြီးတော့ Lisp ပေါ်တယ် Lisp သည် functional programming ဖြစ်
တဲc
့ oncept ကပါသေးတယ်။ အဲ ဒ
့ ီ vm ု ်တဲအ
concept ကိုသုံးလိက ့ တွက်java
ို ဲ အ
သည်portability ဖြစ် တယ်။ ဆိုလတ ့ ဓိ ပ္ပါယ်က အဲ တ
့ န
ု း် က Sun က operating system တွေ
လည်းရောင်းတယ်။ အဲ တ
့ န
ု း် က Microsoft က Programming လောကကိုလက်ဝါးကြီးအုပ်ထား
တာ၊ ဘယ်လမ
ို ျ ိုးလဲဆိုတော့ ဥပမာ VB နဲsoftware
့ တစ် ခုရေးတယ်ဆိုပါတော့၊ အဲ အ
့ ခါမှာ user
အားသွင်းကြိုးပါမလာဘူး၊အဲ တေ
့ ာ့ ဲ့
နားကြပ် နအားသွ င်းကြိုးမရှိ ဘဲ ဒီဖုနး် ကသုံးလို့ အဆင်ပြေ
သလားမေးရင် မပြေဘူးလေ၊ အဲ တေ
့ ာ့ဘာထပ် ဝယ်ရမလဲဆိုတော့ နားကြပ် န ဲ ့ အားသွင်းကြိုးဝယ်ရ
တဲV
့ B လိကေ
ု ာင်မျ ိုးကို လန်ပြန်နေအောင်လပ
ု ် ပေးထားပြီ းတော့၊ VB နဲရေးထားတဲ
့ ့ application
တွေများလေလေwindows ကအများကြီးရောင်းရလေလေပေါ ့၊ အဲ တေ
့ ာ့ဘာဖြစ် သလဲဆိုရင် sun
portability နဲ platform
့ independent နဲကွ
့ ာတဲအ
့ ချက်ပေါ ့။
Generality . ဘာကိုဆိုလသ
ို လဲဆိုတော့ဘယ်လိa
ု pplication တွေနဲသုံ
့ းလို့ ရသလဲပေါ ့
development ပေါ။့ အဲ တေ
့ ာ့ kotlin နဲ ့ serverside တွေရေးလို့ ရလားဆိုရင် ရေးလို့ ရတယ်၊ ဒါ
ပေမယ့် အဲ ကေ
့ ာင်က shine မဖြစ် ဘူး။ အဲ လ
့ မ
ို ျ ိုးရှိ တယ်ပေါ ့။ နောက် Java ဆိုရင် အရင်က
ထုတ်ထားတာ android ရှိ တော့ mobile မှာrun လို့ ရတာပေါ ့။ ဟိးု အရင်တန
ု း် က
တယ်။အဲ တေ
့ ာ့ Javascript တက်လာတာပေါ ့။ Javascript ဆိုရင် generally mobile မှာလည်း
တယ်၊ ဥပမာဆိုရင် Python ဆိုရင် သူ့ မှာနှစ်မျ ိုးရှိ တယ် cpython ရယ် Cython ရယ်ဆိုတာရှိ
နဲ တခြားနဲ
့ ရေးထားတဲ
့ ့ python လည်းရှိ တယ် ဥပမာ Java နဲ ရေးထားတဲ
့ ့ python ကို Jython လို့
တယ် သူ့ ကို pypy လို့ ခေါ်တယ်။ Cython ဆိုရင် ဘာအတွက်ကောင်းလဲဆိုရင် C code ထုတ်ပေး
့ ီထဲ
သလဲဆိုရင် ခင်များက Java နဲ ့Enterprise system တစ် ခုရေးတယ်ပေါ ့ အကြီးကြီးပေါ ့၊ အဲ ဒ
ထုတ်တယ်။ အဓိ ကတော့ PHP ကို ပိုကောင်းအောင် လုပ်ထားတာ ဥပမာ type တွေထည့်လက
ို ်တာ
ပေးရတော့မှာပေါ။့ အဲ တေ
့ ာ့သူတု့ ိက PHP ရဲ ့ semantics ကို သူတု့ ိက detail သိဖို့လိတ
ု ယ်။ အဲ လ
့ ို
လိတေ
ု ာ့ PHP မှာ အဲ လ
့ ို defined လုပ်ထားတဲ ့ document ရှိ လားဆိုတော့ မရှိ ဘူး။ မရှိ တော့ ဘာ
တော့ရှိတယ်၊ ဆိုတော့ အဲ တ
့ ာသည် PHP language စထုတ်ကတည်းက ရှိ တာမဟုတ်ဘူး။ အဲ လ ို ဲ
့ ပ
language specification ရှိ တယ် C မှာတော့မရှိ ဘူး မရှိ တဲ့ language တွေမှာ ဘာပေးထား
language တို့၊ အဲ တ
့ ာတွေသည် Programming language designer တွေကိုယ်တိင
ု ်ရေးထား
တာ။ အဲ ကေ
့ ာင်တွေကို language specification အနေနဲ ့ သုံးကြတယ်ပေါ ့၊ but ဒါပေမယ့်
architecture ပေါ။့
architecture တစ် ခုတည်းပဲ သုံးလာကြတာပေါ ့၊ ဥပမာ ကျွန်တော် တု့ ိသုံးတဲ ့ Laptop တွေ
အဲ ဒ
့ ီ architecture မှာ ဘာပါသလဲဆိုတော့သူက Stored-program concept ဆိုတာကို သုံး
ကွနပ
် ျူတာထဲမှာ memory ရှိ တယ်၊ memory က data ကို CPU ကနေ ယူသုံးမယ် ပြီ းရင်
process လုပ်တယ်ပေါ၊့ input / output device တွေရှိ မယ်၊ memory ပေါ်မှာ ဘာထားလို့ ရသ
What is imperative?
Imperative ဆိုတဲအ
့ ဓိ ပ္ပါယ်က ပေါင်း၊ နှုတ်၊ မြှောက်၊ စား သုံးတယ်။ Assignment တွေ
လုပ်တယ်၊ အဲ တေ
့ ာ့ မေးစရာရှိ တယ်၊ ကိုသက်ခိုင်ရေ စောက်ခွက်ပြောင်နေတာလား၊ ပေါင်း၊နှုတ်၊
Haskell လိကေ
ု ာင်မျ ိုးတွေမှာ assignment တော့သုံးတယ်၊ ဒါပေမယ့် assignment လို့ မခေါ်
ပြီ းတစ် လင
ို ်း run တယ်။ အဲ တေ
့ ာ့ မေးစရာရှိ တာက programming language တွေအကုနလ
် ုံး
က တစ် လင
ို ်းပြီ းတစ် လင
ို ်း run တာမဟုတ်ဘူးလားလို့ မေးစရာရှိ တယ်။ အဲ တ
့ ာက မဟုတ်ဘူး။
run သွားတယ်။
likes(mary,food).
likes(mary,wine).
likes(john,wine).
likes(john,mary).
| ?- likes(mary,food).
yes.
| ?- likes(john,wine).
yes.
| ?- likes(john,food).
no.
ဒီ example မှာဆိုရင် line by line run တာ ဟုတ်ချင်မှဟတ
ု ်မယ်၊ ဒါသည် Prolog မှာရှိ တယ်။
အဲ တေ
့ ာ့ Programming language တိင
ု ်းတော့ line by line မ run ဘူး။ ဒါကိုပြောပြတာ။ အဲ ့
သူသည် ဘယ်လအ
ို လုပ်လပ
ု ် သလဲဆိုရင် Hardware က statement တစ် ကြောင်းကို ဘယ်လို
ု ် သွားသလဲဆိုတဲ့ ကိစ္စပေါ။့ အဲ တ
အလုပ်လပ ့ ာကို Programmer တွေက သိဖို့လိုသလားလို့ မေးတဲခ
့ ါ
ကျရင် သိဖို့လိတ
ု ယ်။ instruction တစ် ကြောင်းရှိ တယ် ဆိုပါစို့ OS/CPU က run တဲအ
့ ချ ိန်ကျရင်
့ ဲကလက်ရှိဘယ်လင
တယ်၊ အဲ ထ ို ်းကို run နေသလဲဆိုတာကို မှတ်ထားတာကို Program counter
မှတ်ထားတဲ ့ instruction ကိုဖတ်တယ်၊ ဖတ် ပြီးရင် program counter ကို တစ် တိးု တယ်၊ တိးု ပြီ း
လုပ်တာလား move လုပ်တာလား၊ ဒါမှမဟုတ်ရင် counter ကို တစ် တိးု တာလား၊ ဒါမှမဟုတ်
မယ်။ အဲ တေ
့ ာ့ ကျွန်တော် တု့ ိ အများဆုံးသုံးဖူးတဲ ့ language ကတော့ imperative လို့ ပြောရမှာ
ပေါ။့ အဲ တေ
့ ာ့ မေးစရာရှိ တယ် Java လိကေ
ု ာင်မျ ိုးက Object-oriented programming
ရေးချလိက
ု ်တာမဟုတ်ဘူး၊ ဘယ် Module တွေဘယ်လထ
ို ားမယ်၊ Component တွေကို ဘယ်
နေရာမှာထားမယ်ဆိုပြီး သတ်မှတ်ရတယ်၊ အဲ တ
့ ာကို Programming design methodologies
programming မှာဆိုရင် အဲ လ
့ ို principle တွေနဲပဲ့ သွားတယ်၊ thinking concept တွေကမတူ
ဘူး၊ အဲ တ
့ ာကို လူတစ် ချ ို့က ဘယ်လိုတွေးသလဲဆိုရင် large scale software ဆိုရင် ငါတို့ သုံး
ဆိုရင် C နဲရေးထားတာ၊
့ C++ ကိုမသုံးဘူး၊ဘာလို့ လဲဆိုရင် Linux သည်လည်း procedure
design ချတဲအ
့ ခါကျရင် Heavy system လိကေ
ု ာင်တွေလုပ်လရတာပေါ
ို့ ့။ အဲ တေ
့ ာ့ ဆိုလခ
ို ျင်
5. Language Categories
Language တွေကို category ခွဲ လရတယ်
ို့ ၊ စာအုပ်ထဲမှာတော့ imperative ,
functional, logic , object-oriented ရယ် ခွဲ တယ်ပေါ ့၊ ဒါပေမယ့် နောက်ပိုင်းမှာ Hybrid တွေ
လည်းပါလာတယ်။ ဆိုလတ
ို ာက အခု နောက်ပိုင်း Programming language တွေက Paradigm
ကတော့ ဘယ်အတိင
ု ်းအတာထိဆိုပြီး အကနသတ်
့် တော့ရှိတယ်၊ ဥပမာ Java သည် functional
Language Design Trade-Offs လို့ ခေါ်တယ်။ ဥပမာ ပြောရရင် C++ မှာဆိုရင် Garbage
ဘယ်လအ
ို လုပ်လပ
ု ် သလဲဆိုတာ ကျွန်တော် တု့ ိက သဘောပေါက်ဖို့လိတ
ု ယ်။ အဲ တေ
့ ာ့ GC ဘယ်လို
အလုပ်လပ
ု ် သလဲဆိုရင်၊ GC က program တွေမှာ ရေးထားတဲ ့ variable တွေကို stack ပေါ်မှာရှိ
တဲ ့ variable တွေကိုလက
ို ်ဖတ်ရတယ်။ ဖတ် ပြီးတော့ ဘယ် variable ကလွတ်တယ်
ဘယ်variable ကသုံးနေတယ်ဆိုလက
ို ် ကြည့်ရတယ်။ ကြည့်ပေါ် ပြီ းတော့မှ memory ပေါ်က
အဓိ က သုံးချင်တဲနေ
့ ရာသည် operating system implementation တွေ၊ operating
system တွေမှာ အဲ လ
့ လေ
ို းသွားတာသည် အဆင်မပြေဘူး။ မပြေတော့ C++ မှာ GC ထည့်မပေး
ဘူး၊ အဲ တေ
့ ာ့ နောက်ပိုင်း modern programming language ဖြစ် တဲ့ Java လိဟ
ု ာမျ ိုးမှာဆိုရင်၊
Collector ကိုထည့်လရတယ်
ို့ ။ application program တွေမှာ millisecond အနည်းငယ်
တဲအ
့ ခါမှာ သူတု့ ိ ရလိက
ု ်တာတွေရှိ တယ်၊ ပေးလိက
ု ်ရတာတွေရှိ တယ်၊ အဲ တ
့ ာမျ ိုးတွေ အဆင်ပြေ
ဆိုတာက C , Java တို့မှာဆိုရင် array index က 0 ကစတယ်၊ စပြီ းတော့ array length – 1
အထိသွားတယ်။ array index bound check ဖို့ ဆိုရင် language runtime ဥပမာ JVM , CLR
စေတယ်၊ အဲ တေ
့ ာ့ C သည် သူ့ ရဲ့ ရည်ရွယ်ချက်က system programming လုပ်ဖို့ system
program တွေရေးဖို့ ၊ အဲ လ
့ ို slowdown ဖြစ် တာကိုလက်မခံ ဘူး၊ အဲ တ
့ ာကြောင့်သူသည် array
ု ျင်တဲကေ
တာ။ ဒါကြောင့် Trade-Offs ဆိုတာ လိခ ့ ာင်တစ် ခုကြောင့် တခြားပေးလိက
ု ်ရတာမျ ိုး
အဲ လ
့ ို Platform independent ဖြစ် အောင် design ချထားတယ်။ အဲ တေ
့ ာ့ သူ့ ကို platform
အရှေ့မှာ ပြောခဲ့ ပြီးပြီ ။ platform independent ဖြစ် ရမယ်ဆိုတဲ့ decision ကြောင့် သူသည်
VM ကိုကြားခံ လက
ို ်ရတယ်။ VM ကို ကြားခံ လက
ို ်ရတော့ ကောင်းတာသည် platform
အဓိ ပ္ပါယ်က သူသည် Layer တစ် ခုအမြဲ ခံနေရတယ် ၊ hardware မှာ တိက ု ်တဲ့
ု ်ရု ိ က် မ run နိင
ဟာမျ ိုးလုပ်လရသွ
ို့ ားတယ်။ အဲ တေ
့ ာ့ နောက်ပိုင်း language တွေဆိုရင် vm မသုံးဘဲ န ဲ ့ garbage
collection လုပ်လရတဲ
ို့ ့ language တွေလည်းရှိ တယ်။ ဥပမာဆိုရင် go ပေါ ့၊ Go ဆိုရင်သူက VM
7. Implementation Methods
Implementation methods ဆိုတာရဲ ့ အဓိ ပ္ပါယ်က တော် တော် လေးရှုပ်တယ်၊ စမုံတန
ု း်
platform ဆိုတဲ့ အဓိ ပ္ပါယ်သည် operating system + hardware ကို platform လို့ ခေါ်တာ ၊
တော့ implementation method ကို category ခွဲ ရင် compiler ရှိ မယ် C , C++ တို့လိကေ
ု ာင်
မှာ a+b ရေးတယ်ဆိုပါစို့ ။ static language တွေမှာဆိုရင် a+b သည် ဘာလဲဆိုတာကို တန်းသိ
တယ်။ ဆိုလတ
ို ာက a သည် integer ဖြစ် ရင် ဒီ plus သည် integer operation လုပ်ရမယ်ဆို
တာ တန်းသိတယ်။ dynamic language တွေမှာ ဆိုရင် a သည် သူ့ type ကအချ ိန်မရွေး
ပြောင်းလဲနင
ုိ ်တယ်။ b လည်း ပြောင်းနိင ့ ီအပေါ်မူတည်ပြီးတော့သူ့ရဲ့ code သည် တန်း
ု ်တယ်။ အဲ ဒ
ပြီ းထုတ်လမရဘူ
ို့ း၊ ဘာဖြစ် သလဲဆိုတော့ dynamic code ကိုပဲထုတ်ရတယ်။ semantics သည်
run နေတဲအ
့ ချ ိန်မှာ ပြောင်းနိင
ု ်တယ်။ အဲ တေ
့ ာ့ dynamic language တွေသည် interpreter
compiler ရဲ ့ သဘောက input က source code ယူတယ်၊ output က machine code ဒါမှ
မဟုတ် intermediate code ဖြစ် တယ်။ ဥပမာ C compiler ဆိုရင် C source code ယူတယ်
exe ထုတ်တယ်။ Java compiler သည် java source code ကိုယူတယ် ထုတ်တာက java
language ဖြစ် တယ် ထွက်တာသည် machine code /byte code ကိုထုတ်တာ။ ဒီ term ကို
ပေါ၊့ ဆိုလတ
ို ာက ဥပမာ ဗမာစကားကနေပြီ းတော့ ကိုးရီ းယား၊ တရု တ်တု့ ိကို translate လုပ်သလို
ကလည်း High level ပဲ ၊ ဥပမာ CoffeeScript ကို translate လုပ်ရင် JavaScript ရတယ်။ အဲ ့
တော့ Javascript ကို browser မှာ run လို့ ရတယ်။ CoffeeScript ကို browser မှာ run လို့ မရ
approach နဲလု
့ ပ်ထားတာ၊ Typescript ကိုယူတယ် Typescript သည် High level
language တစ် ခုဖြစ် တယ်။ Typescript compiler ကနေ Javascript ကိုထုတ်ပေးတယ် ပေါ ့၊
အဲ တေ
့ ာ့ Translator ဆိုတဲ့ အဓိ ပ္ပါယ်သည် Input က High level language ယူတယ်၊ Output
ကလည်း High level language ပဲ ထွက်တယ်။ နောက်တစ် ခုက Babel ပေါ ့၊ Javascript မှာဆို
ရင် parse tree ကနေ code generation လုပ်ရတယ်။ code generation လုပ်တဲအ
့ ပိုင်းကို
ဆောက်ပြီးတော့ ဘာလုပ်လရသလဲ
ို့ ဆိုရင် backend က LLVM ကိုယူသုံးလိက
ု ်လရတယ်
ို့ ၊ အဲ လ
့ ို
တွေကလည်း စမုံတန
ု း် အောင်များတယ် :3။
7.1 Compilation
Compiler ကို နောက်တစ် ပိုင်းကျမှ ကျွန်တော့် compiler နဲ မြင်
့ သာအောင် ရှ င်းပြပေးမယ်၊
အခု example လောက်ပြောပြမယ်၊ compiler မှာ lexical analyzer ရှိ တယ်၊ သူကဘာလုပ်
တယ်။ syntax analyzer ကနေထုတ်ရင် parse tree ရတယ်၊ parse tree ကနေ code
ခေါ်တယ်။
က လူတွေထင်နေသလိသ
ု ာမန်အတိင
ု ်း source code ထဲက programming statement တစ်
လို့ ရတယ်။ နောက် C# မှာဆို CLR ပေါ။့ C# ဆိုရင် language specification ရှိ တဲအ
့ တွက် ဘာ
MSIL အကုနသ
် ည် CLR မှာ run လို့ ရတယ်။ အဲ တေ
့ ာ့ ဘာကောင်းလဲလို့မေးရင် ဥပမာ VB .Net နဲ ့
Enterprise အရမ်းကြီးလာတဲအ
့ ခါကျရင် ဒါသည် make sense ဖြစ် တာပေါ ့။ သုံးချင်လည်းသုံး
ရင်လည်း အရှ ည်ကြီးဆိုတော့ JVM အကြောင်း ရေးထားတဲ ့ series တစ် ခုရှိတယ် ဖတ် ကြည့်ပေါ ့။
ပြီ း replace လုပ်တဲ့ ပုံစံပဲ၊ source code ကနေ replace လုပ်တာပေါ ့ ၊ C မှာ #define
ဘယ်လိရေ
ု းသလဲဆိုတာကျတော့another topic ဖြစ် သွားပြီ ။ compiler တွေဘယ်လိဆေ
ု ာက်
သလဲဆိုတဲအ
့ ကြောင်းပေါ၊့ compiler ဆောက်တဲက
့ ိစ္စမှာကျတော့programming language
အဲ တေ
့ ာ့ဒီနေရှ့ င်းမှာကဘာလဲဆိုတော့ programming language တွေကိုဘယ်လတ
ို ည်ဆောက်
ကျယ်လန
ွ း် အားကြီးတော့ ပြဿနာကဘာလဲဆိုတော့တစ် ခုချင်းပိုင်းပြီ းတော့ ရှ င်းပြရတယ်၊
အကုနလ
် ုံးကို detail ပြောပြနိင
ု ်သလားဆိုတော့ time အရရယ် audience ရဲ ့ background အရ
ဘယ်လအ
ို လုပ်လပ
ု ် သွားတယ်ဆိုတာမျ ိုးကိုရှင်းပြမယ်၊ အဲ လ
့ ိုရှင်းပြခြင်းအားဖြင့် ဘာတွေနားလည်
ဘယ်လိပြ
ု ဿနာတွေရှိ တယ်ဆိုတာတွေကို အတွင်းကျကျနားလည်သွားမှာပေါ ့။ အခု ကတော့ ကိုယ်
လေ့လာဖို့ လိသေ
ု းတယ် ဒီလန
ို ယ်ပယ်မှာ ဒီလအ
ို ကြောင်းအရာတွေရှိ သေးတယ်ဆိုတာမျ ိုးသိသွား
compiler ရယ် interpreter ရယ်ပေါင်းပြီ းတော့ technical term အရ translator လို့ ခေါ် ကြ
တာတွေလည်းရှိ တယ်။ compiler တို့ interpreter တို့ပြောတဲ ့ အခါကျရင် compiler ဖြစ် ဖြစ်
interpreter ဖြစ် ဖြစ် ဘာလုပ်တာလဲဆိုရင် source program ရှိ တယ် Java, Javascript , PHP
code သို့ မဟုတ် native code ဖြစ် တဲ့ exe code ထုတ်ပေးတယ် အဲ တ
့ ာမျ ိုးကို ကျွန်တော် တို့က
translator လို့ ခေါ်တာပေါ။့ translator ဆိုတဲ့ term ထဲမှာ compiler နဲ ့ interpreter ဆိုတာပါ
ပြီ းသားပေါ။့
နဲ ့ run လာတယ်၊ ဥပမာ Java ပါတယ် CLR (Common Language Runtime) အောက်က
family တွေပါတယ် CLR ဆိုတာ ဘာလဲဆိုတော့ Microsoft ဘက်က C# တို့ VB.net တို့ အဲ ဒ
့ ီ
ပေါ ့ transpiler ဆိုတာဘာလဲဆိုတော့ high level language တစ် ခုကနေ တခြား သူ့ လောက်မ
လုပ်လရတယ်
ို့ ။
Compiler
့ ခါကျရင် High level ကနေ low level ဖြစ် တဲ့ intermediate
Compiler လို့ ပြောတဲအ
code ဒါမှမဟုတ် native executable code ထုတ်ပေးတာကို compiler လို့ ခေါ်တယ်။ ဥပမာ
ု ဲ compiler ကထုတ်တဲ့
ကနေမှတစ် ဆင့် executable code ထုတ်ရတာပေါ ့၊ အရင်ပြောခဲ့ သလိပ
cpu ပေါ ့ အဲ ဒ
့ ီလမ
ို ျ ိုးပေါ၊့ CPU တွေကလည်း မျ ိုးစုံရှိတယ် အဲ ဒ
့ ီပေါ်မူတည်ပြီးတော့ instruction
တဲ ့ ကောင်ကို တခြား linux, windows ပေါ်မှာ run လို့ မရဘူး။ ဘာကြောင့်လဲဆိုတော့ compiler
ကိုခေါ်တဲ ့ api တွေကို system call လို့ ခေါ်တယ်။ ဥပမာ mac မှာ run ဖို့ လုပ်ထားတဲ ့ ကောင်
သည် mac မှာခေါ်တဲ ့ system call တွေက တခြား platform တွေမှာ မရှိ တဲအ
့ တွက်ခေါ်လို့ မရ
တော့ အလုပ်မလုပ်နင
ုိ ်ဘူး။ အဲ တေ
့ ာ့ C/C++ တို့သည် platform တိင
ု ်းမှာ run လို့ မရဘူး၊ အဲ တေ
့ ာ့
ဟိဘ
ု က် platform မှာသွား run ချင်ရင် ဟိဘ
ု က် platform မှာ ပြန်ပြီးတော့ build လုပ်ရတယ်၊
အဲ ပြ
့ ဿနာရှိ တယ်။ အဲ ပြ
့ ဿနာကို ဖြေရှ င်းဖို့ အတွက် Java လိကေ
ု ာင်မျ ိုးက ဘယ်လလ
ို ပ
ု ် လက
ို ်
တွေပေါ၊့ အဲ ့ byte code ကို native platform ပေါ်မှာ run လို့ မရဘူး အဲ အ
့ တွက်ဘာရှိ ဖို့လိသ
ု လဲ
တယ်။ Virtual machine လို့ ပြောရင် computer science မှာ term နှစ်ခုရှိတယ်၊ ဘာဖြစ် လို့
ရမယ်လို့ပြောတယ်၊ အမှနက
် သူလည်း လိက ုိ ်ဘူး၊ သူရဲ့ထင်မြင်ယူဆချက်နဘာလို့
ု ်မစစ်နင ဲ့ ပြော
ု ဲ အတူတပ
Runtime လို့ ခေါ် ကြတယ်။ ဒါပေမယ့် concept အရဆိုရင် virtual machine လိပ ူ ဲ
ု ်တဲအ
code or intermediate representation ကိုထုတ်ပေးနိင ့ တွက် အဲ တ
့ ာကို virtual
compiler မှာဆိုရင် အဲ ကေ
့ ာင်တွေသည် native executable ကိုမထုတ်ဘူး၊ မထုတ်နင
ုိ ်တာ
code လို့ ခေါ်တယ် microsoft ဘက်မှာကျတော့ msil လို့ ခေါ်တယ်၊ microsoft intermediate
language ပေါ၊့ အဲ ကေ
့ ာင်တွေသည် operating system ပေါ်မှာ တန်းrun လို့ ရသလားဆိုရရင်
တစ် ခုတည်းအတွက်ရေးထားတာ အဲ တေ
့ ာ့ဘာပြဿနာတက်သလဲဆိုရင် Java သည် statically
implement လုပ်တဲအ
့ ခါကျရင်ပြဿနာတက်တယ် ဥပမာ Jython လိကေ
ု ာင်ပေါ ့ JVM ရဲ ့
မလာဘူး၊ ဒါပေမယ့် Microsoft ဘက်က CLR ကျတော့ dynamic instruction set တွေပါ ပါ
တယ်၊ အဲ တေ
့ ာ့ CLR သည် multi programming language တွေအတွက်ရေးထားသော VM
common language runtime မှာကို extensible mechanism တွေ data instruction တွေ
ပေးလို့ ရတယ် အဲ တေ
့ ာ့ သူ့ ရဲ့ specification ကိုမပျောက်စေဘဲ CLR ကို upgrade လုပ်လရတယ်
ို့
Java မှာဆိုရင် အဲ လ
့ လ
ို ပ
ု ် လမရဘူ
ို့ း၊ jdk 7 လောက်မှာ lambda တွေပါလာတော့မှာ virtual call နဲ ့
assembly လိကေ
ု ာင်မျ ိုးတွေကို virtually ပေးထားတာ၊ ဥပမာ load, store, pop, getfield
မှာ constant pool ဆိုတာပါသေးတယ်၊ constant pool ဆိုတာ ဘာလဲဆိုရင် program တစ် ခု
တာမျ ိုးကို constant pool လို့ ခေါ်တာ။ meta data + instruction တွေပါတာပေါ ့။
type ပါတယ်အဲ့type ကို runtime မှာ ပြောင်းလို့ မရဘူး၊ compile time မှာ type error တွေကို
စစ် ပေးနိင
ု ်တယ်၊အများအားဖြင့် statically typed language တွေသည် compiler နဲ ့
Interpreter
သီအိုရီအရတော့ dynamically typed language တွေက ဥပမာ Python, Ruby, PHP,
Javascript တို့လိကေ
ု ာင်တွေကို compiler နဲရေးလို့
့ မရဘူးလားဆိုရင် ရေးလို့ ရတယ်၊ ဒါပေမယ့်
သလဲဆိုတော့ program ကို parse လုပ်တယ် runtime မှာ byte code ကို cache လုပ်တယ်၊
ဆိုတာကစကားအဖြစ် ပြောတာပေါ၊ကြားထဲ
့ မှာ process တွေအများကြီးလုပ်ရတယ်၊ အဲ ဒ
့ ီကနေ
ရှိ တယ် Python မှာလည်း python byte code ဆိုတာရှိ တယ်၊ interpreter ကနေ ဖိုင်တစ် ဖိုင်
ို ်တယ်အဲဖ
ကိုဖတ်လက ့ ိုင်ကိုparse လုပ်တယ်၊ language analysis တွေလုပ်မယ်၊ syntax
analysis တွေလုပ်မယ် လုပ်ပြီးရင် byte code ထုတ်လက
ို ်တယ်၊ byte code ထုတ်ပြီးတော့
တယ်၊ dynamic language ဆိုတာ runtime မှာ type ကိုပြောင်းလို့ ရသောlangauge ဖြစ်
တယ်။
Virtual Machine
တချ ို့approach တွေသည် hybrid ကိုသုံးတယ် ဥပမာ Java လိကေ
ု ာင်မျ ိုးပေါ ့။ နောက်
မှာဆိုရင် 32bit ပဲ 4byte ပဲ ပေါ ့ 64bit ဖြစ် တဲ့ platform မှာဆိုရင်8byte ရမယ်ပေါ ့။
platform ပေါ်မှာမူတည်တယ်။ အဲ တေ
့ ာ့program တွေက pop လုပ်ရတာခက်တယ်၊အဲ တေ
့ ာ့
စရာမလိတေ
ု ာ့ဘဲန ဲ ့ run လို့ ရသွားတယ်။ အဲ တေ
့ ာ့သက်သာတယ်ပဲပြောရမှာပေါ ့။ အခု
ပေါ။့
Transpiler
Transpiler ဆိုတဲအ
့ ဓိ ပ္ပါယ်က high level programming language တစ် ခုကို
JIT/AOT compiler
JIT/AOT compiler ဆိုတာ interpreter , virtual machine တွေထဲမှာသုံးတဲ ့
ခါတော် မီှ လို့ ပြောရမှာပေါ ့ JVM မှာ byte code ကိုinterpret လုပ်တယ်ဆိုပါစို့ ၊ အဲ လ
့ လ
ို ပ
ု ် တာ
အဆင်မပြေဘူး နှေးတယ်ပေါ ့ အဲ တေ
့ ာ့ byte code ကနေ machine code ကိုပြောင်းပစ် ရတယ်
လိက
ု ်တယ်၊ အဲ လ
့ ိုပြောင်းတာကို Just-In-Time compilation လို့ ခေါ်တယ် Just-In-Time က
တယ်၊ နောက်တစ် ခု Hotspot JIT ဆိုတာရှိ သေးတယ်၊ JIT ရဲ ့အားနည်းချက်က လည်း byte
များတာကိုပဲပြောင်းမယ်run နေတဲဆ
့ ိုတာကျတော့ Hotspot JIT လို့ ခေါ်တယ်။
အနှစ်ချုပ် ပြောရရင် Bytecode တွေရဲ . instruction တွေကို line by line read ပြီ းတော့
decode လုပ်ရတဲအ
့ တွက်ကြာပါတယ်။ အဲ ဒ
့ ီအစား အဲ ဒ
့ ီခုနက stack ပေါ်ကနေ pop ချ ပေါင်းပြီ း
ပြန်တင် အဲ ဒ
့ ီအလုပ်တွေကို machine code အနေနဲ.ပြောင်းလိက
ု ်ပြီး ခု နက byte code နေရာမှာ
အစားထိုးလိက
ု ် ပါတယ် ။ Implementation အရဆို machine code ထုတ်ပြီး byte code
array ထဲမှာ void pointer အနေနဲ.ထားပါတယ်။ နောက်မှ pointer တွေ typecast လုပ်ပြီး
compile လုပ်ပါတယ် အားလုံးကို ဒါကို AOT (Ahead of Time ) Compilation လိ.ု ဆိုပါတယ်။
သုံးသုံး မသုံးသုံး အားလုံးကို AOT လုပ်တော့လဲ အဆင်မပြေပါဘူး။ မသုံးတဲ ့ method တွေ ဥပမာ
ု ှ ပဲ compile လုပ်
exception class တွေ အတွက်ဆို အလဟဿ ဖြစ် ပါတယ်။ ဒါကြောင့် လိမ
မယ်ပေါ။့ ဒါကို HotSpot လိ.ု ခေါ်ပါတယ်။ HotSpot ဆိုတာ method တခု က run ပြီ းရင် သူ.ကို
compile လုပ်တဲအ
့ တွက် hotspot compilation လိ.ု သုံးပါတယ်။ အပေါ်က ပြောခဲ့ တဲ့
သည် push, pop လုပ်တာမျ ိုးပေါ၊့ register based သည် register 1 မှာ store လုပ်ပါ
(UCSYLang နဲလက်
့ တွေ့ရှ င်းပြတာတွေကိုLive မှာကြည့်ပေးပါ)
Practical Theory of Programming Languages Part 4
Programming Environments
အဲ ကေ
့ ာင်တွေသုံးနေကျသူတွေပဲ Linker သဘောကိုနားလည်တယ်၊ အဲ l့ anguage တွေ
Library တွေနဲObject
့ code တွေနဲကိ
့ ုအချင်းချင်းပြန်ချ ိတ်ဖို့လိတ
ု ယ်၊အဲ ဒ
့ ီမှာ Linker ကိုသုံးတယ် ၊
ကိုသဘောပေါက်နင
ုိ ်ပေမယ့် လက်တွေ့ project တွေရေးရင်တော့ Full Featured IDE တွေသုံးပါ
တာပိုပြီး အလုပ်လယ
ွ ်ကူသက်သာစေတယ်ပေါ ့၊ နောက် Javascript လိကေ
ု ာင်ကို Eclipse နဲသုံ
့ းရင်
တာတွေအဆင်ပြေစေလိမ့်မယ်။ ဝယ်သုံးနိင
ု ်လားဆိုတော့မသုံးနိင
ု ်ဘူးအဲ တေ
့ ာ့ တနည်းနည်းနဲ ့
ရအောင်လပ
ု ် ပြီးသုံးပေါ ့။အခု နောက်ပိုင်းဆိုရင်တော့ Microsoft က Visual Studo ရှိ တယ်.Net ရှိ
ဆုံးပဲ ဘာကြောင့်လဲဆိုတော့ ဒီကောင်တွေသည် IDE တွေကိုတော် တော် ကို Perfect ဖြစ် အောင်ကို
တယ် ဒါပေမယ့် အဲ ထ
့ က်အရင်ပေါ်တဲ ့ Platform တွေရှိ တယ် ဥပမာ smalltalk ဆိုရင် drag and
drop နဲသွ
့ ားတာ၊ History အရ smalltalk သည်စောပေမယ့် drag and drop ရခဲ့ တယ်
တော့ GUI app ရေးဖို့ မလုပ်န၊ဲ ့ ဘာကြောင့်လဲဆိုရင် အဖြစ် မရှိ လို့၊ဘာကြောင့်အဖြစ် မရှိ သလဲဆိုရင်
ပါ၊ဥပမာ
့ Jetbrain ကထုတ်တဲကေ
့ ာင်တွေပေါ ့၊ PHP, Python တို့ဆိုရင်လည်းထိုနည်း၎င်းပေါ ့။
သလဲ အဲ ဒ
့ ီအကြောင်းတွေပါမှာပေါ၊တချ
့ ို့လူတွေကထင်မှာပေါ ့ငါတို့ Programming က JIT ပထမ
ထည့်ပေးလာတာ၊ နောက်ကျွန်တော် တု့ ိသုံးနေကျ Java,C#တို့မှာရှိ တဲ့ type system ဆိုရင် သူတို့
အစောကပြောတဲH
့ askell လိကေ
ု ာင်တွေပေါ ့အဲ ကေ
့ ာင်တွေရဲ ့ type system သည် တော် တော်
လူအချင်းချင်းပြောတဲဘ
့ ာသာစကား natural language ဆိုရင် တစ် ယောက်တည်းပြောနေလို့ မရ
ပြမယ်၊ တခြားသတ္တဝါတွေနဲလူ
့ တွေနဲဘာကွ
့ ာခြားသလဲဆိုရင် အဓိ ကကွာတာသည် ဘာသာစကားပဲ ၊
ခေါင်းထဲမှာပေါ်လာလိမ့်မယ်၊ ဆိုလခ ဲ့
ို ျင်တာက Language ရဲ ့သဘောကဒါပဲ တစ် ယောက်နတစ်
အောင်တွေးတောနိင
ု ်အောင်လပ
ု ် ပေးနိင
ု ်တာသည် language ရဲ ့အားသာချက်ပေါ ့ language ရှိ
ကိုကိုက်လက
ို ်တယ်ဆိုပါတော့ လူတွေကခြင်္သေ့ကိုဝိုင်းပြီ းတော့ သမ ကြမယ်ပေါ ့၊ အဲ ခ
့ ါမှာ ခြင်္သေ့က
ကောင်တွေနဲဝေးဝေးနေ၊
့ ဝေးဝေးရှောင်လမှ ို့ ာချင်မှာခဲ့ လရတယ်
ို့ ပေါ ့ စကားပြောတတ်ရင်ပေါ ့
တဲအ
့ တွက် develop လုပ်တာ၊ knowledge တွေကို Generation to generation ကို
transfer လုပ်လမရဘူ
ို့ း၊ဒါကို သဘောပေါက်မယ်ထင်တယ်၊အဲ လ
့ ိုမရတဲအ
့ တွက် ကျွန်တော် တို့လူ
လုပ်ခဲ့လမရဘူ
ို့ း ၊ language ရှိ တဲအ
့ တွက်transfer လုပ်လရတယ်
ို့ ၊ အဲ လ
့ e
ို ducational
intelligence တစ် ခုတည်း မဟုတ်ဘူး၊ ဥပမာ တချ ို့မျ ိုးစိ တ်တွေသည် လူတွေထက်
intelligence ပိုသာနေတဲကေ
့ ာင်တွေရှိ တယ်၊ ဒါပေမယ့်လူတွေလိပြေ
ု ာလို့ ရတယ် natural
မယ်အဲတ
့ ာကိုcomputer ကအလုပ်လပ
ု ် ပေးမယ် အဲ တ
့ ာကို programming language လို့ ခေါ်
တယ်၊အဲ တေ
့ ာ့ ကွနပ
် ျူတာကို ု ဲလို့မေးရင်
ဘာလုပ်ဖို့ခို င်းဖို့ လိလ ကွနပ
် ျူတာရဲ ့အလုပ်သည်
software ထည့်လက
ို ်ရင် ဒီကောင်သည် accountant ဖြစ် သွားမယ်၊ natural language
အများကြီးကိုလပ
ု ် လရတယ်
ို့ အဲ လ
့ လ
ို ပ
ု ် လရတာသည်
ို့ ၊ သူသည် program ပြောင်းလို့ ရအောင်လပ
ု ်
ထားတဲအ
့ တွက် ကွနပ
် ျူတာသည် တခြား electronic device တွေနဲယှ
့ ဥ်ရင် အားသာနေတာပေါ ့။
ကွနပ
် ျူတာကိုခိုင်းရင် ဘယ်လခ
ို ို င်းသလဲဆိုတော့ computer က natively နားလည်တာသည်
တွေ binary code တွေပေါ ့ hardware ကနားလည်တဲ့ electronic swich on/off လုပ်တာပေါ ့
ဒါတွေကို machine language လို့ ခေါ်တာပေါ ့၊ အဲ ကေ
့ ာင်တွေကို low level programming
low level programming language လို့ ခေါ်တယ် machine language, assembly မှအပ
ငါ ့language ကအရင်ရတာဆိုတဲက
့ ိစ္စမျ ိုးတွေ ပျောက်သွားတာပေါ ့၊ language တွေက တစ်
နဲလု
့ ပ်နေရတာ အဲ တ
့ ာကိုနားလည်ထားရင်ပိုပြီးတော့ အဆင်ပြေတာပေါ ့ ပြောရရင် ငါ ့language က
တော့ဘူးပေါ၊့ ဒီလိဖြ
ု စ် တာနည်းသွားတာပေါ ့။
http://rigaux.org/language-study/diagram.png
ပုံမှာပြထားတာသည် Assembly နဲ ့ helloworld ထုတ်ထားတာပေါ ့၊ Assembly တစ် ကြောင်း
တဲ ့ C ကိုအမှီပြုပြီ းတော့ထုတ်ထားတာပေါ ့ အဲ တေ
့ ာ့သူ့မှာ C လိfု eature တွေပါလာတယ်၊ C ရဲ ့
ပေါ။တိ
့ က ် ဟုတ်ဘဲ
ု ်ရု ိ က်ancestor ဆီ ကနေအပြင် တခြားlangauge တခု ခုကနေလည်း အကုနမ
program တွေလို့ ခေါ်တယ်၊ system programming သည် ဘာသာရပ် သက်သက် ရှိတယ် စာမ
ဲ့
တတ်ပေမတတ်ကောင်တွေပြောသလို software engineering ရရုံနရေးလို့ ရတယ်ဆိုတာ စောက်
system တွေရဲ ့ concept တွေရှိ တယ် theory တွေရှိ တယ် ဥပမာ file management,
communication အဲ တ
့ ာတွေကို လိက
ု ်ပြီးတော့ရေးရတယ်၊ အဲ တ
့ ာတွေလေ့လာဖို့ နောက်
concurrency တို့ဘာတို့အဲ တ
့ ာတွေလိက
ု ်လေလ
့ ာရတယ်၊ အဲ တ
့ ာတွေသည် system
compile လုပ်ရတယ် အဲ တေ
့ ာ့performance အရ speed အရမြန်တယ်၊ C ကနေ C++ကိုထုတ်
ပေမယ့် Oop ကို concept မိ အောင် ဥပမာ inheritence , interface , polymorphism တို့ အဲ ့
လိက
ု ်တာ။ အဲ တ
့ ာကြောင့် Smalltalk ကိုရေးတဲ ့ Alan Kay က Turing award ကိုရတယ်။ Turing
ပေါ။့ နောက် C++ပေါ၊့ C++ရဲ ့အားနည်းချက်က platform တစ် ခုတည်းမှာပဲ run လို့ ရတယ်၊ဆိုပါ
တယ်ဆိုရင်windows မှာပဲ run လို့ ရတယ် တခြားmac တို့linux တို့မှာ သွားrun လို့ မရဘူး
တယ် အဲ ဒ
့ ီမှာ Java သည် platform independent ဖြစ် တယ်၊ နောက်ပိုင်း
လို့ Java ရဲ ့feature တွေတော် တော် များများပါတယ်၊ ဒါပေမယ့် C# language designer သည်
အရမ်းတော် တဲအ
့ တွက် နောက်ပိုင်းမှာC#သည် Java ထက် Feature သုံးဆလောက်ပိုများ
ကိုပိုပြီးအာရုံစိုက်တယ်၊ အဲ တေ
့ ာ့Java သမားတွေအသုံးမဝင်ဘူးလားဆိုတော့ မဟုတ်သေး
ဘူးJava သည် OOP ကိုပိုပြီးအာရုံစိုက်တယ် ဒါကြောင့်တချ ို့Java method တွေဆိုရင် OOP ကို
လိက
ု ်နာနေတဲအ
့ တွက်အလုပ်ရှုပ်တာမျ ိုးတွေပါတယ်၊ C#မှာအဲ လ
့ မ
ို ဟုတ်ဘူး ွ ်ကူကူန ဲ ့
လွယ်လယ
လုပ်လရတာမျ
ို့ ိုးတွေ၊ဒီနေရာမှာတော့example မပြတော့ဘူး ရှ ည်သွားမှာစိုးတဲအ
့ တွက်။Java
လိက
ု ်ရေးရတယ်၊ ပြောရရင် Programmer ဆိုတာကမရေးရလေကောင်းလေပဲ ၊ အဲ တေ
့ ာ့
တိတ
ု ိတ
ု တ
ု ်တတ
ု ်အတိခ
ု ျုပ် ပြီးရေးလို့ ရတဲl့ anguage တွေကိုထုတ်လက
ို ်တယ် Kotlin ပေါ ့။
ဆိုတာက C++ code ကနေobject code ထုတ်တယ်၊ object code ကနေexe code ထုတ်
တယ်၊ အဲ မ
့ ှာ build time သည် အရမ် းကြာတယ်၊နောက် C++သည် memory safe မဖြစ် ဘူး၊
ပြဿနာတက်နင
ုိ ်တယ်၊အဲ တ
့ ာမျ ိုးကို handle လုပ်လရအောင်
ို့ နောက်ပိုင်းမှာဘာထုတ်လက
ို ်သလဲ
Rust နဲပြန်
့ ရေးလိက
ု ်တယ်။ build လုပ်တာကြာတဲက
့ ိစ္စကိုဖြေရှ င်းဖို့ အတွက် Google ကနေGo ဆို
တဲp
့ rogramming langauge ကိုထုတ်လက
ို ်တယ်၊ အခု နောက်ပိုင်းမှာ C++ကိုအစားထိုးပြီ းတော့
Go သော် လည်းကောင်း ၊Rust သော် လည်းကောင်း သုံးလို့ ရတယ်၊ ဒါပေမယ့် ရှိ ပြီး
တဲp
့ rogramming language ကနေ inspire လုပ်ပြီးယူထားတာ၊ အဲ တ
့ ာကြောင့် Javascript
သည် ဟိးု အစတည်းက function သည် first class ဖြစ် နေတာ။ java ကနေသာ inspire လုပ်ခဲ့
မယ်ဆိုရင် function သည် first class ဖြစ် စရာ အကြောင်းမရှိ ဘူး၊ ပြောရရင် သိုးရေခြုံထားတဲ ့
တယ်၊ Python, Ruby ရှိ တယ်၊ Python ဆိုရင် machine learning ဘက်မှာအသုံးများလာ
့ ှာမေးစရာရှိ တယ်၊ Machine learning မှာရှိ တဲ့Neural network တွေသည် core တွေ
တယ်၊ အဲ မ
ပေါ ့ နှေးတာပေါ ့ အဲ တ
့ ာကြောင့်Python နဲမရေးဘူ
့ း၊ ပြောချင်တဲအ
့ ဓိ ပ္ပါယ်က Machine
ရေးထားတာဖြစ် တဲအ
့ တွက် Python သည် C/C++ library တွေကိုယူသုံးလို့ ရတယ် ဆိုလတ
ို ာက
ပိုပီးတော့လယ
ွ ်တယ်ပေါ။အဲ
့ တ ့ ာကြောင့်Python သည် အဲ ဘ
့ က်မှာတက်လာတယ်ပေါ ့။
တာJava ပေါ်ခါစမှာ Browser တွေမှာrun တဲJ့ ava program တွေပေါ ့၊ Applet ပေါ်ခါစကဆိုရင်
ဥပမာTypescript လိကေ
ု ာင်မျ ိုးပေါ၊့ Type safety ပိုကောင်းသွားတာပေါ ့။ programming
Enhanced type system တွေပါတယ်၊ ဥပမာ tuple တို့ union type တို့ပါတယ်၊ complex
ဖြစ် တဲ့ type တွေအကြောင်းကို လေ့လာနိင
ု ်တာပေါ ့။ အခု နောက်ပိုင်းဆိုရင် dynamic
inferencing လုပ်တာလိမ
ု ျ ိုး၊ dynamic language တွေကလည်း static ရဲ ့type တွေကိုယူပြီး
တယ် Haskell ဆိုရင် သူ့ ရဲ့ type system ကအရမ်းမိုက်တယ်၊ functional programming ကို
လေ့လာချင်တဲသ
့ ူတွေHaskell ကိုလေလ
့ ာသင့်တယ်။ နောက် JVM ပေါ်မှာ run လို့ ရတဲ ့ Scala
language တွေရှိ တယ်၊ ဥပမာ Ruby တို့Python တို့ PHP တို့သည် တစ် ဦးချင်းရေးခဲ့ တဲ့
commity တွေနဲလု
့ ပ်လာရတယ်။