Download as pdf or txt
Download as pdf or txt
You are on page 1of 50

Practical Theory of Programming Languages Part 1

Practical theory of programming languages ဆိုတဘာလဲ ကိုပြောဖို့ က အများကြီး

ရှိ တော့ Series နဲဖြစ်


့ လိမ့်မယ် အဲ တေ
့ ာ့ ကိုးကားမယ့် စာအုပ်တွေကို အရင်ဆုံးတစ် ချက်ပြောပြ

မယ်။ ပထမဆုံးကိုးကားမယ့်စာအုပ်ကဘာလဲဆိုတော့ အဓိ က ပထမဆုံးတစ် အုပ်ကတော့

Concepts of programming languages - Robert W. Sebesta ဆိုတဲစ


့ ာအုပ်ပေါ ့ အရင်

တုနး် က ကွနပ
် ျူတာတက္ကသိုလ်တွေမှာ မာစတာမှာသင်တယ် အခု လည်းသင် သေးတယ်ထင်တယ်

အဲ ဒ
့ ီစာအုပ်ကို ကိုးကားမှာပေါ ့ Twelfth edition ပေါ ့ နောက်တစ် အုပ်က Programming

Language Pragmatics – Michael L. Scott ဆိုတဲ့ စာအုပ်ရယ် ကောင်းတာကတော့ ကျန်တာ

တွေက Reference စာအုပ်တွေပေါ ့ Benjamin C. Pierce ရဲ ့ Types and Programming

Languages တို့ Advanced topics in types and programming languages တို့ပေါ ့ အဲ ဒ


့ ီ

ကောင်တွေကတော့ဖတ်ရခက်တယ် အဲ ဒ
့ ါတွေပါမှာပေါ ့။

လောလောဆယ် ကျွန်တော် တု့ ိပြောမယ့်အကြောင်းအရာကဘာလဲဆိုတာကို အရင်ဆုံးပြော

ကြည့်မယ် concepts of programming languages ၊ programming language theory

လို့ ခေါ်တာပေါ ့ programming language theory ဆိုတာဘာလဲဆိုရင် programming

language တွေဘယ်လအ
ို လုပ်လပ
ု ် သလဲ၊ ဥပမာ ဆိုပါစို့ Java, C#, C++, JS functional

programming language တွေ အဲ ့ language တွေကို အသေးစိ တ်လေလ


့ ာတဲ ့ ဘာသာရပ် လို့

ဆိုလရတယ်
ို့ ။ အဲ တေ
့ ာ့မေးစရာရှိ တာက theory of programming language ဆိုတဲဘ
့ ာသာရပ်

ကို ဘာကြောင့်လေလ
့ ာဖို့ လိသ
ု လဲပေါ ့ ၊ ဘာကြောင့်လေလ
့ ာလဲဆိုတော့ ကျွန်တော် တု့ ိက developer

တွေဖြစ် တယ် programming language တွေနဲ ့ အလုပ်လပ


ု ် ရတယ် ၊ အဲ အ
့ ခါမှာ ဘာပြဿနာ

တက်လဲဆိုတော့ ကျွန်တော် တု့ ိက Programming language တစ် ခုခုကိုသင်လက


ို ်တယ် သင်

လိက
ု ်ပြီးရင် programmer တွေက အကြောင်းကြောင်းကြောင့် တခြား language တွေကိုပါ ထပ်

့ ခါဘာဖြစ် လဲဆိုတော့ ဒီ Knowledge ကိုပြန်ပြီးတော့ reuse လုပ်ရ


ပြီ းတော့သင်ရတယ် အဲ အ

တယ် အဲ တေ
့ ာ့ ခု နက programming language theory တွေရဲ ့အကြောင်းကိုနားလည်ထားရင်

တခြား language တွေကိုလေလ


့ ာတဲအ
့ ခါမှာ ပိုပြီးတော့ လွယ်ကူသွားမယ်၊ ပိုပြီးတော့ အဆင့်မြင့်

မြင့်နားလည်နင
ုိ ်သွားမယ်၊ နောက်တစ် ခုက programming language theory တွေထဲမှာဘာပါ

သေးလဲဆိုတော့ တစ် ချ ို့ကောင်တွေကျတော့ in-depth ဖြစ် တဲ့ implementation detail တွေပါ

ပါတယ်၊ အဲ လ
့ ပ
ို ါတော့ ဘာဖြစ် လဲဆိုတော့ ဆိုလခ
ို ျင်တာသည် ကိုလေလ
့ ာတဲဟ
့ ာကို truly

understand ဖြစ် တယ်ပေါ၊့ အဲ တေ


့ ာ့ ခု နက programming language တွေကိုသင်တယ်ဆိုရင်
specific language တစ် ခုကို သင်တာမဟုတ်ဘဲန ဲ ့ general အားဖြင့် computer

programming language အားလုံးရဲ ့ assent အနှစ်သာရကို ခြုံငုံပြီးသင်တာလို့ ကျွန်တော် တို့

က ပြောလို့ ရတယ်။ အဲ တေ
့ ာ့ ဒါကိုနားလည်ခြင်းအားဖြင့် ဘာဖြစ် သွားမလဲဆိုရင် ကိုယ်က

Programming language တွေကိုလေလ ့ ခါမှာ language paradigm တူတဲကေ


့ ာတဲအ ့ ာင်တွေ

ဥပမာ ဆိုပါစို့ ဗျာ oo programming language ကိုလေလ


့ ာပြီ းပြီ statically typed

programming language ကို လေ့လာပြီ းပြီ ဆိုရင်၊ ဥပမာ Java ကိုလေလ


့ ာပြီ းပြီ ဆိုပါစို့ Java

က object-oriented ဖြစ် တယ် statically typed programming language ဖြစ် တယ် အဲ ့

တာဆိုရင် object-oriented ဖြစ် တဲ့ statically typed ဖြစ် တဲ့ တခြားသော Programming

language ဖြစ် တဲ့ C++ သော် လည်းကောင်း၊ C#သော် လည်းကောင်း ပြန်ပြီးတော့လေလ


့ ာတဲ ့

အခါမှာ အဲ ကေ
့ ာင်တွေကိုပြန်ပြီးတော့ reuse လုပ်လရတယ်
ို့ ၊ knowledge ကိုပြန်ပြီးတော့

transfer လုပ်လတယ်
ို့ ုိ ်တဲ၊့ ဒီ language တွေ
၊ နောက်တစ် ခုကဘာလဲဆိုတော့ ဒီဟာတွေကိုသင်နင

ကို ကောင်းကောင်းမွနမ
် ွနရ ု ်တဲလ
် ှ င်းပြနိင ့ ူက မမြင်လ၊ို့ မမြင်တဲအ
့ ခါကျတော့ ကျွန်တော့အနေနဲဒါ

တွေက ရှ င်းပြသင့်တယ်၊ ဆိုလခ


ို ျင်တာက ကျွန်တော် မဟုတ်သောတစ် ယောက်ယောက်က ဒါတွေကို

ရှ င်းပြဖို့ က မလွယ်ဘူး၊ အဲ တေ
့ ာ့ဘာပြဿနာတက်လဲဆိုတော့ ဒါတွေကိုရေးပြဖို့ ကျတော့ time အရ

ကျွန်တော့်မှာ သင်တန်းကဖွင့်ထားတယ်၊ အလုပ်ကိစ္စတွေရောဆိုတော့ အဆင်မပြေနိင


ု ်ဘူး၊ ဆိုလို

ချင်တာက စာရေးဖို့ က အတော် အာရုံစိုက်ရပြီ အဲ ဒ ွ ်ကူတဲန


့ ီတော့လယ ့ ည်းနဲ ့ live လွှင့်လက
ို ်တာသည်

ပိုအဆင်ပြေတာပေါ။့ အဲ တေ
့ ာ့ ဒီ programming language theory ကိုသင်ရတဲ ့ ရည်ရွယ်ချက်

ကို သဘောပေါက်မယ်ထင်တယ်။

အမှနတ ု ်းပြောရရင် ဒါတွေကို တပည့်တွေကိုပဲ သင်ပေးမလို့ ပေါ ့၊ သင်တန်းတက်တဲ့ တပည့်


် ိင

တွေရှိ တယ်၊ ဒါပေမယ့်အားလုံးကို share လိက


ု ်ရင် ပိုကောင်းမယ်ဆိုတာမျ ိုးပေါ ့။ နောက်တစ် ခုက

ဒါတွေကိုသင်တဲအ
့ ခါ Pre-requisites ပေါ ့ ဘာတွေကို လိမ
ု လဲဆိုရင် အနည်းဆုံး programming

language တစ် မျ ိုးလောက်တော့ သိထားသင့်တယ် ကောင်းတာတော့ static ရော dynamic ရော

နှစ်မျ ိုးလောက်သိထားရင်တော့ ပိုအဆင်ပြေတာပေါ ့၊ ဒါမှသာ ကျွန်တော် တု့ ိက ပြောတဲဟ


့ ာတွေကို

နားလည်နင
ုိ ်မယ်။ တစ် ချ ို့ဟာတွေကျတော့ example နဲ code
့ တွေဘာတွေရေးပြမယ်၊ တချ ို့ဟာ

တွေကျတော့ theoretically ရှ င်းပြမယ်။ တစ် ချ ို့လိအ


ု ပ် တာတွေဆိုရင်လည်း google ခေါက် ပြီး

ရှ င်းပြတာမျ ိုးတွေရှိ မယ်။ ဒီစာအုပ်တွေကို http://libgen.rs/ မှာ ဒေါင်းလို့ ရမယ်။ နောက်တစ် ခုရှိ
သေးတယ် သင်ပေးရတဲ ့ အကြောင်းရင်းက စောက်မြင်ကပ် အောင်ပြောရရင် ဆရာကြီးလုပ်တာပေါ ့

လေ :3 ။ ဘာတွေပါမလဲဆိုတာပြောပြဖို့ ကျန်သေးတယ်။

1. Reasons for studying concepts of programming languages


2. Programming Domains
3. Language Evaluation Criteria
4. Influences on language design
5. Language Categories
6. Language Design Trade-offs
7. Implementation methods
8. Programming Environments

1. Reasons for studying concepts of programming languages

နံပါတ် ၁ ကတော့ဘာလို့ လေ့လာလဲဆိုတာကိုပြောပြီ းသွားပြီ ၊ ဘာကြောင့်လေလ


့ ာလဲဆိုရင်

အစောက programming language တွေအများကြီးရှိ တယ် အဲ အ


့ များကြီးရဲ ့ background ,

theory အဲ တ
့ ာတွေကိုနားလည်ခြင်းအားဖြင့် ကျွန်တော် တု့ ိက programming language တွေကို

switch လုပ်လရတယ်
ို့ ။ ဥပမာ C++ ကို နားလည်တဲလ
့ ူက Java ကို switch လုပ်ဖို့က မခဲ ယဥ်း

ဘူး၊ API လောက်ပဲ ကွာသွားမယ်။ အဲ တေ


့ ာ့ programming ကိုပိုပြီးတော့ in-depth သိသွားမယ်၊

နောက်တစ် ခုက ဒီ programming language တွေကိုနားလည်သွားပြီ ဆိုရင် သူ့ ရဲ့ အပေါ်ယံ

syntax လောက်တင်မဟုတ်ဘဲန ဲ ့ semantics တွေကိုပါ နားလည်မယ်။ နောက်တစ် ခုက တစ် ချ ို့

implementation theory တွေကိုပါ နားလည်မယ်။ အဲ တေ


့ ာ့ဘာလုပ်လရလဲ
ို့ ဆိုရင် ကျွန်တော် တို့

က compiler တွေဘာတွေရေးချင်ရင် ဒါတွေသည် မဖြစ် မနေသိကိုသိရမယ်။ နောက်တစ် ခုက

ကွနပ
် ျူတာတက္ကသိုလ်က ကလေးတွေသည် ဒါကိုသင်ရလိမ့်မယ့်၊ သင်တာသင်ရပေမယ့် စာအုပ်မှာ

ရှိ တဲ့ language တွေက ကျွန်တော် တု့ ိဆီ မှာ ရှိ တဲ့ domain နဲမတူ
့ ဘူးဖြစ် နေတယ်၊ ဥပမာ ဆိုပါစို့

ကျွန်တော် တို့ဆီ မှာဆိုရင် Java သုံးတယ် C# သုံးတယ် but ဒါပေမယ့် သူတု့ ိက example ပြတာ

သည် Java , C# , Javascript တို့ကိုမပြဘဲ န ဲ ့ကျန်တဲ့ တခြား programming language တွေ

ကိုပြတယ်ဆိုရင် အဆင်ပြေမှာမဟုတ်ဘူး။

1.1 Increased capacity to express ideas


ို ်တဲအ
Programming language တွေကိုသင်လက ို ်တဲ့
့ ခါကျရင်၊ theory တွေသင်လက

အခါကျရင် idea တွေကို express လုပ်ဖို့ capacity ပိုများသွားတယ်။ ဘာကိုဆိုလတ


ို ာလဲဆိုရင်

ကျွန်တော် တို့က functional programming concept ကိုနားလည်ပြီဆိုရင် Javascript နဲ ့


functional programming ကိုသုံးလို့ ရပြီ ။ functional programming concept ကိုနားမ

လည်ဘူးဆိုရင် Javascript ကိုသုံးပေမယ့် functional programming သုံးပြီ းရေးတတ်မှာ

မဟုတ်ဘူး။ အဲ တ
့ ာသည် ကျွန်တော် တု့ ိက concept တွေအားနည်းလို့ ။ အဲ တေ
့ ာ့ ကိုက ဒီ

programming language တွေသုံးပြီ းဆိုရင် ဒီ programming language theory တွေသာ

ကျေကျေညက်ညက် နားလည်တယ်ဆိုရင် ကျွန်တော် တု့ ိက ဒီ language ကနေပေးထားတဲကေ


့ ာင်

တွေကို ပိုပြီးတော့ အသုံးချနိင


ု ်သွားမယ်။ vocabulary ပိုပြီးတော့ကြွယ်သွားမယ်ပေါ ့။

1.2 Improved background for choosing appropriate languages


ု ် တဲအ
ကိုယ်လပ ့ လုပ်အတွက်ဘယ် language နဲသင
့ ့်တော် သလဲပေါ ့၊ ဥပမာ ကျွန်တော် တို့က

enterprise အကြီးကြီးရေးမှာလား၊ large scale ဖြစ် အောင်ရေးမှာလား၊ အဲ တ


့ ာဆိုရင် ကျွန်တော်

တို့ က large scale အတွက်ဆိုရင် ဘယ် language ကသင့်တော် တာလဲ၊ ဥပမာ ကျွန်တော် တို့က

static language နဲ ့ သင့်တော် လား dynamic languae နဲ ့ သင့်တော် လား အဲ တ


့ ာမျ ိုးရှိ တယ်။

နောက်တစ် ခုမှာချင်တာက ဒီစာအုပ် ဒီအကြောင်းအရာတွေက programming language တွေ

အားလုံးကို ခြုံငုံပြီးပြောတာဖြစ် တယ်။ အဲ ဒ


့ ီတော့ဆိုလခ
ို ျင်တာက ကောင်း၏ ဆိုး၏ကို

ို ျင်တာ တစ် ခါတစ် လေကျရင် ကိုယ်ကြိုက်တဲ့


technically အရလေ့လာတာဖြစ် တယ်။ ဆိုလခ

programming language တွေမှာ မကောင်းတဲ ့ point တွေ အားနည်းချက် တွေပေါ်လာတာမျ ိုးရှိ

တယ်။ အဲ ဒ
့ ီအခါကျရင် မလောင်ဖို့ ဖင်မနာဖို့ အဲ တ
့ ာလေးတွေရှိ တယ်။ အဲ လ
့ ို willing mindset နဲ ့

လေ့လာတာက ပိုပြီးတော့ အဆင်ပြေတယ်လို့ပြောရလိမ့်မယ်။ ကြိ ုကာထားတယ်နော် :3

အဲ တေ
့ ာ့ large scale ရေးမှာလား large scale ဆိုရင် high performance ဖြစ် တာ။

large scale ဆိုတော့ code တွေအများကြီးရေးရမှာဖြစ် တဲအ


့ တွက် code တွေအများကြီးကို

ုိ ်တဲ့ language ကဘယ်လမ


project အကြီးကြီးကို handle လုပ်နင ို ျ ိုး language တွေလဲ ဥပမာ

static ဖြစ် တဲ့ programming language တွေသည် compiler ပါတဲအ


့ တွက် error တွေကို

စစ်နင
ုိ ်တယ် အဲ ့ compiler တွေသည် interpreter တွေနဲ ့ ယှဥ်ရင် high performance ဖြစ်

တယ်၊ နောက်တစ် ခုက compiler တွေသည် static analysis ပါတဲအ


့ တွက် error တွေကို ရှ င်း

ပေးနိင
ု ်တယ်၊ အဲ တေ
့ ာ့ static language တွေသည် code base ကြီးလေလေ အားသာလေလေ

ဖြစ် တယ်။ အဲ ဒ
့ ါဆိုရင် မေးစရာရှိ တယ် facebook က PHP နဲရေးထားတယ်
့ ပေါ ့ facebook လို

ကောင်ကို large scale နဲရေးထားတယ်


့ facebook လိရေ
ု ာ မဖြစ် နင
ုိ ်ဘူးလား အဲ လ
့ မေ
ို းစရာရှိ

တယ်။ ဒါပေမယ့် facebook သည် PHP နဲ ့ run နေတာမဟုတ်ဘူး advanced ဖြစ် တဲ့
programming language တစ် ခုန ဲ run
့ နေတာ။ HACK လို့ ခေါ်မှာပေါ ့။ အဲ တ
့ ာက PHP ကို type

information တွေထည့်ပြီးပို ကောင်းအောင်လပ


ု ် ထားတာဖြစ် တယ်။ အဲ တေ
့ ာ့ facebook

engineering team သည် အခု ချ ိန်မှာ facebook ကိုအစကနေအဆုံးပြန်ရေးရမယ်ဆိုရင်

PHP ကိုသုံးချင်မှသုံးမှာ။ ဘာကြောင့်လဲဆိုတော့ dynamic language တွေသည် develop လုပ်

ရတာမြန်တယ် ဒါပေသိ large scale ဖြစ် သွားရင် အဲ ့ type မပါတာတွေကပဲ ပြန်ပြီးဒုက္ခပေးတတ်

တယ်။ အဲ တေ
့ ာ့ enterprise world မှာကြည့်လက
ို ်ရင် java တို့ C# တို့သည် ပန်းပန်နေတာ။ အဲ ့

တော့ programming language တွေကိုတကယ်နားလည်ရင် ဘယ်language သုံးရမလဲဆိုတာ

ရွေးလို့ ရမယ်။

1.3 Increased ability to learn new languages


ကျွန်တော် တု့ ိက android သမားဆိုရင် android သည် java ကိုသုံးတယ် ဘာဖြစ် လဲဆို

တော့ android က kotlin ဘက်ပြောင်းလာတဲအ


့ ခါ developer တွေသည် kotlin သင်တန်းရှ ာ

အုံး လိက
ု ်တက်အုံးဆိုပြီး ပြဿနာရှိ လာတယ်။ အဲ တေ
့ ာ့ ဒီprogramming language theory

တွေကိုနားလည်မယ်ဆိုရင် switch လုပ်ရတာသည် ပိုပြီးတော့ မြန်သွားတယ်၊ ပိုပြီးတော့ ကိုယ့်

အတွက်က အဆင်ပြေတယ်။ ဘာကြောင့်လဲဆိုတော့ knowledge က reuse လုပ်လရတယ်


ို့ ။

ဥပမာဆိုပါစို့ java မှာရှိ တဲ့ concept တွေ type system တွေသည် kotlin မှာလည်းရှိ တယ် အဲ ့

တော့ switch လုပ်တဲအ


့ ခါမှာ ဒီ knowledge တွေကိုပြန်ပြီး reuse လုပ်လရတဲ
ို့ အ
့ တွက် ပိုပြီး

တော့ switch လုပ်ရ မြန်သွားမယ်။

1.4 Better understanding of significance implementation


Programming language တစ် ခုမှာဆိုရင် construct တွေရှိ တယ်။ ဥပမာဆိုပါစို့

recursion ဆိုရင် recursion ကဘယ်လလ


ို ပ
ု ် ထားတာလဲ၊ recursion ကိုသုံးတဲအ
့ တွက် ဘယ်လို

side effect တွေရှိ နင


ုိ ်မလဲ drawback ( disadvantage ) ကဘာတွေရှိ လာသလဲပေါ ့၊ အဲ တ
့ ာ

တွေကျွန်တော် တု့ ိက သိလရတယ်


ို့ ။ အဲ တ
့ ာတွေသည် language ရဲ ့ implementation ကို

နားလည်မှ။ ဆိုလတ
ို ာက theory of programming language တွေကို နားလည်ဖို့လိတ
ု ယ်။

ဥပမာ ကျွန်တော် တု့ ိက for loop နဲ ့ recursion နဲ ့ ဘယ်ကောင်ကိုဘယ်နေရာမှာ သုံးရမလဲဆိုပါ

တော့။ recursion သည် recursion depth ဖြစ် သွားလေလေ stack တွေဆောက်ရတာဖြစ် တဲ့

အတွက် stack overflow ဖြစ် တတ်တယ်။ အဲ တေ


့ ာ့ အဲ လ
့ မ
ို ဖြစ် အောင် for loop သုံးမှာပေါ ့

performance ပိုကောင်းသွားမယ်။ ဒါပေသိ data နည်းတဲအ


့ ခါမှာ recursion သည်ပိုကောင်း
တယ်။ အဲ လ
့ ို bug တွေကို ရှ င်းနိင
ု ်တာပေါ ့ ဥပမာ java မှာဆိုရင် recursion ခေါ်တဲအ
့ ခါ method

ကတစ် ခါခေါ်တိင
ု ်း အပေါ်ကို method တစ် ခုpush လုပ်လပ
ု ် သွားတယ် အဲ တေ
့ ာ့ maximum

recursive depth ကို ရောက်တဲအ


့ ခါမှာ stackoverflow ဆိုတဲ့ exception တက်တယ်

StackOverFlow website ့ ီ call stack ကို အစွဲပြုပြီ းခေါ်ထားတာ။ အဲ တ


ကအဲ ဒ ့ ာသည်

programming language theory တွေကိုသေချာနားလည်တဲအ


့ တွက် language features

တွေကို ပိုပြီး detail ကျကျ better understanding ဖြစ် တာကို ပြောချင်တာပေါ ့။

1.5 Better use of languages that are already known


ဆိုလတ
ို ာက ကိုယ်သိထားတဲ ့ language ကိုကောင်းကောင်းအသုံးချနိင
ု ်တာပေါ ့။ ဥပမာ တ

ပည့်တွေကိုဆိုနေကျ စကားရှိ တယ် Java နဲ ့C program တွေမရေးနဲ ၊့ ဆိုလတ


ို ာက Java နဲ ့class

တွေ object တွေမသုံးဘဲ လျောက်မရေးနဲလို့


့ ပြောချင်တာ ၊ Java က ဘာ language လဲဆိုတော့

object oriented programming language ၊ သူ့ မှာရှိ တဲ့ assosiation တို့ composition တို့

aggregation တို့ inheritence တို့ abstract တို့ အဲ တ


့ ာတွေက ဘယ်လအ
ို သုံးချတာလဲ ၊ အဲ တ
့ ာ

့ ခါမှာ language ကို use လုပ်တဲအ


တွေကိုနားလည်သွားတဲအ ့ ခါမှာ better use ဖြစ် တယ်ပေါ ့။

1.6 Overall advancement of computing


Computing ကိုနားလည်စေတယ်။ computer ဆိုတာ ဘာလဲဆိုတော့ အမှနတ
် ိင
ု ်းပြောရ

ရင် computer နဲ တွ
့ က်ချက်နေတာကိုပြောတာပေါ ့ ၊ ဒါကတော့ ရို းရို းရှ င်းရှ င်းပြောရမယ်ဆိုရင်ပေါ ့

။ programming language ဘက်ကနေ ကြည့်ပြီးပြောရမယ်ဆိုရင် ဟိးု အောက်ဆုံးထိ deep

down ဆင်းကြည့်ရတဲအ
့ တွက် computer ကဘယ်လလ
ို ပ
ု ် သွားလဲ ၊ ဥပမာ variable ဆိုတာ

memory ပေါ်မှာတကယ်ရှိသလား ၊ အမှနတေ


် ာ့ abstraction ပေါ ့ abstraction ဆိုတဲ့ အဓိ ပ္ပါယ်

ကထင်ရောင်ထင်မှားနဲ ့ တကယ်ရှိသယောင်ကို ဖန်တီးထားတာပေါ ့ ၊ အဲ တေ


့ ာ့ တကယ့် memory

ပေါ်မှာရှိ တဲ့ variable ဆိုတာ cell ပေါ ့ ၊ အဲ တေ


့ ာ့ memory ဆိုတာကရော တကယ်ရှိလားလို့ မေး

တဲခ
့ ါကျရင် သူသည် လျှပ် စီးလေးတွေပေါ ့ ၊ အဲ ့ လျှပ် စီးလေးတွေကရော တကယ်ရှိလားလို့ မေးရင်

သူကဘာနဲ ့ လုပ်ထားလဲဆိုတော့ register တွေနဲလု


့ ပ်ထားတာ အဲ တေ
့ ာ့ abstraction တဲ ့ အဲ လ
့ အ
ို

ဲ ့ ားတာ။ အဲ တေ
ဆင့်ဆင့်နသွ ့ ာ့ ဒါတွေကိုနားလည်ခြင်းအားဖြင့် overall advancement of

computing ကိုနားလည်သွားမယ်ပေါ ့။
အဓိ ကကတော့ စာအုပ်တွေဖတ်ပေါ ့ ၊ ကျွန်တော် ကတော့ ဒီစာအုပ်တွေထဲကပါတာတွေရှိ မယ်

ကျွန်တော် ပြောချင်တာတွေရှိ မယ် ဒီစာအုပ်တွေကိုသုံးရတဲ ့ ရည်ရွယ်ချက်က reference အနေနဲ ့

ို ျင်တဲသ
ဘာတွေတော့ ထည့်မယ် ၊ ဘာတွေတော့မထည့်ဘူးပေါ ့ ၊ ဆိုလခ ့ ဘောနဲပဲ့ ပြောတာပေါ ့။

2. Programming Domains

Programming domain ဆိုတာက programming language တွေကို domain ခွဲ လရတယ်


ို့ ။

domain ဆိုတာ အသုံးချတဲ ့ area ပေါ ့။ ဥပမာ ရို ရု ိ းပြောရမယ်ဆိုရင်တော့ ကျွန်တော် တို့က

mobile တို့ web တို့ natural language processing တို့ AI တို့ ML တို့ တချ ို့ဆိုရင် high

speed contacting , message processing လုပ်တဲ့ ကောင်တွေ ဥပမာ chat လုပ်တဲကေ


့ ာင်

တွေ streaming server တွေဆိုရင် Erlang သုံးပြီ းရေးတာများတယ်။

2.1 Scientific Domains


Scientific နည်းအရတွက်ချက်ရတဲအ
့ ခါ အခု နောက်ပိုင်း ပေါ်လာတဲကေ
့ ာင်တွေရှိ တယ်

ဥပမာ Julia programming language ပေါ ့ high-performance , general-purpose

language နောက် computational science အတွက်သုံးလို့ အဆင်ပြေတာမျ ိုးပေါ ့။

2.2 Business Applications


Business application တွေမှာဆိုရင် ဟိတ
ု န
ု း် ကတော့ COBOL လိကေ
ု ာင်မျ ိုးသုံးတယ်

အခု နောက်ပိုင်းရှိ သေးလားဆိုတော့ ရှိ နင


ုိ ်သေးတယ်။ စင်္ကာပူ ကတစ် ချ ို့လေဆိ ပ်တွေမှာဆိုရင်

COBOL သုံးသေးတယ်လို့ တချ ို့မိ တ်ဆွေပြောတာတွေကြားဖူးတယ်။ ကိုယ်တိင


ု ်တော့မမြင်ဖူးဘူး

ပေါ ့ စင်္ကာပူမရောက်ဖူးတဲအ
့ တ္ွက်။

2.3 Artificial Intelligence


ဟိးု အရင် 1960 နဲ ့ 1970 ကြားလောက်က artificial intelligence ကိုဘာနဲသုံ
့ းလဲဆိုရင်

အခု ပေါ်လာတဲ ့ machine learning တွေဘာတွေနဲ ့ မဟုတ်သေးဘူး ၊ သူက Symbolic လို့ ခေါ်

တယ် ၊ သူက logic တွေ predicate logic တွေ အဲ ကေ


့ ာင်တွေကိုသုံးတယ်။ rule တွေ decision

list တွေသုံးတဲကေ
့ ာင်ပေါ။့ အခု လို machine learning မဟုတ်တဲခေ
့ တ်ပေါ ့ ၊ အဲ ကေ
့ ာင်တွေဆို

Lisp တို့ ဘာတို့သုံးတယ်။ အခု နောက်ပိုင်း AI က paradigm ပြောင်းသွားတဲအ


့ တွက် Lisp ကိုတော့

သိပ်မသုံးတော့ဘူး သိပ်ပြီး popular မဖြစ် တော့ဘူး။ ဒါပေမယ့် Prolog လိကေ


ု ာင်မျ ိုးကတော့

popular ဖြစ် လာတယ်။ ဒီဘက် ခေတ်မှာဆိုရင် Python တက်လာတာပေါ ့။ အဲ တေ


့ ာ့ AI ဆိုရင်
Python လိကေ
ု ာင်န ဲ ့ တွဲပြီးသားလိုဖြစ် နေတာ။ အဲ တေ
့ ာ့မေးစရာရှိ တာက Python က machine

learning မှာ ဘာကြောင့် popular ဖြစ် လာသလဲပေါ ့။ ဘာကြောင့်လဲဆိုတော့ သဘာဝအားဖြင့်

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 ကလာတဲလ
့ တွေ
ူ အတွက်ကျ

python က learn လုပ်ရတာလွယ်တယ်၊ အခု နကပြောသလို python က interface အနေနဲနေ


တယ် နောက်ကွယ်က C တို့ C++တို့က run သွားတယ် အဲ တေ


့ ာ့ python ကတက်လာတယ်။

2.4 Web Software


အခု က web software ဆိုရင် နှစ်မျ ိုးရှိ မှာပေါ ့ server အနေနဲလု
့ ပ်နေတဲကေ
့ ာင်န ဲ ့ web

application အနေနဲလု
့ ပ်နေတဲကေ
့ ာင်ပေါ ့ ။ web ဆိုရင် ကျွန်တော် တု့ ိက PHP ကိုပဲ ပြေးမြင်လိမ့်

မယ်။ PHP တင်မဟုတ်ဘဲန ဲ ့ python နဲလည်


့ းကျွန်တော် ကရေးလို့ ရတယ် Java နဲလည်
့ းရေးလို့ ရ

တယ် C နဲလည်
့ းရေးလို့ ရတယ်၊ ဟိးု အရင်တန
ု း် ကတော့ C နဲရေးတာပေါ
့ ့၊ Server-side

programming ခေါ်တဲအ
့ ခါရှိ ပါသေးတယ် မေ့သွားပြီ သတိရရင်တော့ ပြန်ပြောပြမယ်။ အခု

နောက်ပိုင်းဆို node.js နဲလည်


့ းရေးလို့ ရတယ်၊ အခု နောက်ပိုင်းဆိုရင် Java ရှိ မယ် C# ရှိ မယ် Go

တွေဘာတွေရှိ မယ်၊ အဲ တ
့ ာမျ ိုးတွေနဲ သွ
့ ားလို့ ရတာပေါ ့။

3. Language Evaluation Criteria


Language တစ် ခုကို ဝေဖန်တာပေါ ့ ဝေဖန်တဲအ
့ ခါမှာ ကျွန်တော် တု့ ိက technically

assess လုပ်ဖို့လိတ
ု ယ်။ ဆိုလတ
ို ာကကောင်းတယ်မကောင်းဘူးပြောတဲအ
့ ခါကျရင် criteria နဲ ့

ဆုံးဖြတ်ရမှာပေါ။့

3.1 Readability
ဥပမာ Readability ပိုင်းအရကြည့်မယ်ဆိုပါစို့ C like language တွေဖြစ် တဲ့ Java တို့ C# တို့ ဆို

brace နဲသွ ့ ားတော့ ဘာဖြစ် လဲဆိုတော့ ရေးချင်သလိရေ


့ ားတယ် brace နဲသွ ု းလို့ ရတော့ ဖတ်ရခက်

တယ်။ VB .Net လိကေ


ု ာင်မျ ိုး python လိကေ
ု ာင်မျ ိုးတွေကျ brace နဲမဟု
့ တ်ဘူး အဖွင့်ပိတ် tag

တွေ indentation တွေနဲသွ


့ ားတဲအ
့ တွက် ဖတ်ရပိုလယ
ွ ်တယ်။

// 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(){}}}

C-like language တွေမှာဆိုရင် ဒီ brace တွေက depth အရမ် းများတဲအ


့ ခါကျရင် ကြိ ုက်သလို

ရေးလို့ ရတဲအ
့ တွက် while ကဆုံးတာလား if ကဆုံးတာလားဆိုတာ မသိ တော့ဘူး။ အဲ တ
့ ာသည်

Readabilty မှာခက်သွားပြီ ။ ဒါပေမယ့် VB .Net လို language မှာကျတော့ ဖတ်ရတာလွယ်သွား

တယ်။အဲ တေ
့ ာ့ language တစ် ခုရဲ့ readabilty ကောင်းမကောင်းဆိုတာသည် ဒါမျ ိုးကိုပြောတာ။

Python မှာဆိုရင် ကြိုက်သလိရေ


ု းလို့ မရဘူး indentation တွေနဲရေးရတယ်
့ ၊ အဲ တေ
့ ာ့ python

သည် readability မှာပိုကောင်းတယ်။

3.2 Overall Simplicity


နောက်တစ် ခုကဘာလဲဆိုတော့ overall simplicity ၊ overall simplicity ဆိုတာဘာ

လဲဆိုတော့ ဘယ်လောက်ရှင်းသလဲပေါ ့၊ နောက်ပိုင်း language တွေရတဲ ့ trend ကဘာလဲဆိုတော့


ရှုပ်ရှပ်ခတ်နေတဲ ့ language ထက်စာရင် ပိုရှင်းတဲ ့ language တွေသည် ပိုပြီး popular ဖြစ် လာ

ရင် ဥပမာ Java ထက်စာရင် kotlin ကပိုပြီးတော့ ရှ င်းတယ် အဲ တေ


့ ာ့ popularity ပိုကောင်းတယ်၊

ဥပမာ Scala ဆိုရင် powerful ဖြစ် တဲ့ language ပဲ ဒါပေမယ့် သူ့ ရဲ့ feature တွေသည် အတော်

ကိုရှုပ်တယ် ၊ အဲ တေ
့ ာ့သူသည် growth ရယ် popularity ရယ်ဖြစ် ဖို့က မလွယ်ဘူး။ အဲ တေ
့ ာ့

python သည် simplicity ကောင်းတဲအ


့ တွက်သုံးရတာကောင်းတယ်လို့ပြောလို့ ရတယ်။ အဲ တေ
့ ာ့

ု ် ချင်တဲအ
ကိုယ်လပ ု ဲ ရှုပ်ရှုပ်ရှက်ရှက်မလိဘ
့ လုပ်တစ် ခုကို effort အများကြီးမလိဘ ု ဲ န ဲ ့ ပြီ းတာကို

simplicity လို့ ပြောလို့ ရတယ်။ ဒါတွေသည် language ကို evaluate လုပ်လရတဲ


ို့ ့ criteria တွေ

ပေါ။့

3.3 Orthogonality
သင်္ချာမှာဆိုရင်တော့ orthogonal vector ပေါ ့၊ programming language မှာကျတော့

language feature တွေကို small set အနေနဲ ့ ပေးထားတာ၊ ဆိုပါစို့ feature လေးခု လောက်ပဲ

ပေးထားတယ်ပေါ ့ ဒါပေမယ့် အဲ လေ
့ းခု က အပြန်အလှနခ
် ျ ိတ်ဆက် ပြီး သုံးလို့ ရနေတယ်ဆိုရင်

orthogonal ဖြစ် တယ်ပေါ ့ ဥပမာ ဆိုပါစို့ overloading ပေးထားတယ် ဥပမာ java မှာဆိုရင်

println သည် string လည်းထုတ်လရတယ်


ို့ integer လည်းထုတ်လရတယ်
ို့ ပေါ ့ method ကို

string သက်သက် integer သက်သက်ခဲွ ရေးစရာမလိဘ


ု ူးပေါ ့၊ ဘာလို့ လဲဆိုတော့ overload လုပ်

ထားလို့ ။ အဲ လ
့ ို small set of language features တွေအပြန်အလှနခ
် ျ ိတ် ဆက်ပြီးသုံးလို့ ရင်

orthogonal ဖြစ် တယ်ပေါ၊့ အဲ တေ


့ ာ့ language feature ဖေါင်းပွမှုတွေမဖြစ် တော့ဘူးပေါ ့။

ဥပမာ orthogonal မဖြစ် တဲ့ design ကို example ပြမယ်ဆိုရင် Assembly မှာ operator

တွေကို low-level လိကေ


ု ာင်မျ ိုးမှာပေါင်းတယ်ဆိုရင် ပေါင်းချင်တိင
ု ်းပေါင်းလို့ မရဘူး ဆိုလခ
ို ျင်

တာက integer နဲ ့ float နဲကိ


့ ုတိက
ု ်ရု ိ က်ပေါင်းလို့ မရဘူး တကယ့်တကယ်က integer ကို float

ပြောင်းပြီ းမှ float နဲ ့ float နဲ ့ ပြန်ပေါင်းရတာ။ အဲ တေ


့ ာ့ high level language တွေမှာဆိုရင်

plus က integer နဲ ့ float နဲကိ


့ ုတန်းပေါင်းလို့ ရတယ်၊ ဒါသည် compiler က integer ကို float

့ တွက်ရတာပေါ ့။ ဒါသည် orthogonality ဖြစ် တဲ့ feature


အဖြစ် convert လုပ်ပေးထားတဲအ

ကြောင့် ရတာပေါ။့

3.4 Data Types


နောက်တစ် ခုက data type တွေဘယ်လိပေ
ု းထားလဲ၊ data type တွေပေးထားတာလည်း

အသက်ပဲ။ ဥပမာ Assembly နဲရေးတယ်


့ ဆိုပါစို့ Assembly မှာပေးထားတဲ ့ data type သည်
နည်းတယ်။ နောက် Object Orientation ရတယ်ဆိုတာလည်း data type တွေပေးထားလို့ ရတာ

ပေါ၊့ အဲ တေ
့ ာ့ data type ပေးထားရင် data abstraction လို့ ခေါ်တယ်။ data abstraction ဆို

တာဘာလဲဆိုတော့ data တွေကိုဘယ်လောက်ထိabstract လုပ်ပြီးတော့ composite data တွေ

ဘယ်လောက်ထိဆောက်လရသလဲ
ို့ ပေါ ့ ဥပမာ object တွေဆောက်လရတယ်
ို့ ။ နောက်ဥပမာ Java

မှာရှိ တဲ့ function နဲ ့ javascript မှာ ရှိ တဲ့ function နဲမတူ


့ ဘူး၊ Java ရှိ တဲ့ function တွေသည်

ို ဲ အ
first class မဟုတ်ဘူး၊ ဆိုလတ ့ ဓိ ပ္ပါယ်က first class ဖြစ် ဖို့က အချက်သုံးချက်ရှိတယ်၊ တစ်

အချက်က variable ထဲကို assign လုပ်လရရမယ်


ို့ ၊ နှစ်အချက်က function တခု စီကို

parameter နဲ ့ပို့ လို့ ရရမယ် သုံးအချက်က function တစ် ခုကို parameter အနေနဲ ့return ပြန်

ု ်ရမယ်။ Java မှာရှိ တဲ့ function တွေသည် အဲ အ


နိင ့ ချက်တွေမဟုတ်တဲအ
့ တွက် functional

programming နဲရေးရင်
့ ပိုရှုပ်သွားတယ်။ အဲ တေ
့ ာ့ Javascript မှာရှိ တဲ့ function တွေသည်

first class ပေးထားတဲအ


့ တွက် ပိုပြီးတော့ရှင်းသွားတယ်။ အဲ တ
့ ာသည် data type တွေကို

handle လုပ်တဲ့ ပုံစံမျ ိုးပေါ၊့ ဘယ်လမ


ို ျ ိုး data type တွေကို လုပ်ပေးထားလဲ၊ ဘယ်လို

abstraction တွေကိုဆောက်လရလဲ
ို့ ၊ နောက်တစ် ခုက အဲ ဒ
့ ီ data type တွေအပေါ်မှာ

ို ဲ ့ အဓိ ပ္ပါယ်က type compatablity ၊ type rule


ဘယ်လောက်ထိ security ပေးထားလဲ။ ဆိုလတ

့ ဲနောက်ပိုင်းကျရင်တော့ဒါမျ ိုးတွေလာမှာ
တွေဘယ်လောက်ထိရလဲ ဒါမျ ိုးတွေပါတာပေါ ့။ ရှ င်းတဲထ

ပေါ။့

3.5 Syntax Design


Syntax design ဆိုတော့မေးစရာရှိ တယ် အတင်းတုပ်အုံးမယ် အငယ်တုံးက compiler

့ လဲဆိုတော့ C based family နဲသွ


ရေးတော့ ကျွန်တော့် design ကဘာနဲတူ ့ ားတူတယ်၊ အဲ အ
့ ခါကျ

ဆရာမတွေကဘာပြောသလဲဆိုတော့ မင်းဟာကြီးက သူများဆီ က ခိုးချထားတာလို့ ပြောတယ်

အမှနတ
် ကယ်က အဲ လ
့ မ
ို ဟုတ်ဘူး။ C based family syntax နဲရေးရတဲ
့ အ
့ ခါမှာလည်း

language designer ရဲ ့ရည်ရွယ်ချက်ရှိတယ်၊ ဥပမာ java က C based family syntax နဲ ့

မဟုတ်ဘဲ တခြားမတူတဲ့ ဥပမာ python လို syntax နဲရေးလို့


့ မရဘူးလားဆိုတော့ မဟုတ်ဘူး ရ

တယ်၊ ဒါပေမယ့် Java Designer တွေက C ရဲ ့ syntax နဲပဲ့ တူအောင် design ချခဲ့ ကြတယ်။ သူ

တို့ ရဲ ့ရည်ရွယ်ချက်က C programmer တွေကအများကြီးရှိ တယ်၊ အဲ တေ


့ ာ့ C programmer

တွေအများကြီးရှိ တဲဈေ
့ းကွက်ကိုသူတု့ ိကသိ ပြီးသား၊ အဲ တေ
့ ာ့ C programmer တွေသည်

language syntax ကိုအများကြီးပြောင်းပြီ းတော့ သင်စရာမလိဘ


ု ူးဆိုရင် adopt လုပ်ဖို့ java ကို
လေ့လာဖို့ က ပိုပြီးတော့လယ
ွ ်သွားမယ်၊ ဥပမာ စဥ်းစားကြည့်ပါစို့ တခြားကိုယ်မမြင်ဖူးတဲ ့ syntax

နဲသာ
့ java ကပေါ်လာခဲ့ မယ်ဆိုရင် C programmer တွေသည် Java ကိုလေလ
့ ာဖို့ လက်တန
ွ မှ
့် ာ

ပေါ။့ အဲ တေ
့ ာ့ language designer တွေသည် syntax ကို ရှိ ပြီးသား language တွေရဲ ့ အထာနဲ ့

ပဲ ရေးလေ့ရှိတယ် အဲ တေ
့ ာ့ ဘယ်လိဖြ
ု စ် သလဲဆိုတော့ syntax သည် designer ရဲ ့ ဘယ်လလ
ို ခ
ို ျင်

တယ်ဆိုတဲအ
့ ပေါ်မှာပဲ မူတည်တယ်။ အမှနတ
် ိင
ု ်းပြောရရင် Readability သွားမလား writability

သွားမလားဆိုတာတွေသည် practical မကျတာတွေရှိ နင


ုိ ်တယ်။ ဆိုပါစို့ VB .Net ဆိုရင်

Readability မှာကောင်းပေမယ့် writability မှာတော့ကျသွားတယ်။ အဲ တ


့ ာတွေကို ဘယ်ကောင်

တွေကနေ ကာဗာလုပ်ပေးလို့ ရသလဲဆိုရင် IDE ကနေ ကာဗာလုပ်ပေးလို့ ရတယ်။ အဲ ဒ


့ ီတော့

Design decision သည် အားလုံးအဆင်ပြေနေသလားဆိုတော့ မဟုတ်ဘူး၊ တစ် ဘက်မှာ

အဆင်ပြေနေပေမယ့် နောက်တစ် ဘက်မှာ အဆင်မပြေတာတွေလည်းရှိ နေနိင


ု ်တယ်။ ဥပမာ Ruby

ဆိုရင် သူ့ ရဲ့ syntax ကချစ်စရာကောင်းတယ် အဆင်ပြေတယ် ဒါမျ ိုးတွေပေါ ့။

3.6 Writability
အစောကပြောခဲ့ သလို readability ကောင်းတိင
ု ်း writability ကောင်းတာမဟုတ်ဘူး။

writability ဆိုတဲအ
့ ဓိ ပ္ပါယ်က ဒီ program ကိုဘယ်လောက်တိတ
ု ိရေ
ု းလို့ ရသလဲပေါ ့၊ ဥပမာ ကိုယ်

က လုပ်ချင်တဲအ
့ လုပ်တွေရှိ တယ် အဲ အ
့ လုပ်တွေကို တိတ
ု ိတ
ု ပ
ု ် တပ
ု ် ရေးလို့ ရလေ၊ အမှ နတ
် ိင
ု ်းပြောရ

ု ဲ မရေးရလေကောင်းလေပဲ ၊ အဲ တ
ရင် ကျွန်တော် ပြောနေကျစကားလိပ ့ ာကို writability လို့ ခေါ်

တယ်။ ဥပမာဆိုပါစို့ PHP မှာဆိုရင် variable တွေကို $ နဲ ့ စပြီ းတော့ ပေးရတယ်၊ အဲ တေ


့ ာ့

ို ဲ အ
ပြဿနာကဘာဖြစ် သလဲဆိုရင် သူက writability ကိုကျစေတယ်၊ ဆိုလတ ့ ဓိ ပ္ပါယ်က ကိုယ်က

variable တစ် ခုလပ


ု ် ချင်တိင
ု ်း shift နဲ key
့ တစ် ခုန ဲ တွ
့ ဲ န ှပ
ိ ် ရတယ်၊အဲ တေ
့ ာ့အဝေးကြီးဖြစ် သွားမယ်၊

အဲ တ
့ ာသည် writability ကိုကျတယ်လို့ပြောရမှာပေါ ့။

Simplicity and Orthogonality . အခု နောက်ပိုင်းပေါ်လာတဲ ့ language တွေမှာဆိုရင် GO

သည် simple ဖြစ် တယ်၊ နောက်ပိုင်း language trend အရ GO သည် functional feature

တွေကိုအသစ် ထပ် မထည့်ဘဲန ဲ ့ ရှိ ပြီးသားတွေကို simplify လုပ်လက


ို ်တာပေါ ့။ simplify လုပ်ပေမ

ယ့် သူသည် အသုံးဝင်အောင် လုပ်နင


ုိ ်တယ်၊ အဲ တေ
့ ာ့ ပိုပြီးတော့ လွယ်သွားတယ်၊ ပြောရရင် GO ရဲ ့

designer ထဲမှာ C ရဲ ့ designer လည်းပါတာပေါ ့။ သူတု့ ိသည် ဒါတွေကိုသဘောပေါက်တယ်။ ဒါ

ကြောင့် ဒီလို design ချတယ်။


Expressivity . ဖော် ပြနိင
ု ်စွမ်းပေါ၊့ ဥပမာဆိုပါစို့ Java လို C-like language တွေမှာဆိုရင် for

loop ကိုဒီလိပ
ု တ်တယ်
for(int i=0;i<10;i++){

}
အဲ ဒ
့ ီတော့ loop ဆယ်ခါလေးပတ်ဖို့ အများကြီးရေးရတယ်၊ အကယ်၍သာ ကျွန်တော် တု့ ိက
10.times {

}
ဆိုပြီးရို က်လရခဲ ို့ ့ ရင်ရော၊ Ruby မှာဆိုရင် အဲ လ
့ ရ
ို တယ်၊ writability အရကြည့်လက
ို ်ရင် ruby

သည် ပိုပြီးတော့ အားသာသွားတယ်၊ ပိုပြီးတော့ expressive ဖြစ် တယ်လို့ပြောလို့ ရတယ်၊ ဒါသည်

language တစ် ခုရဲ့ ကွာခြားချက်ပေါ။့ အဲ တေ


့ ာ့ language က ဒါမကောင်းဘူး ဒါကောင်းတယ်ဆို

တာသည် objectically ပြောနေတာမဟုတ်ဘူး၊ concept အရ theory အရ ကောင်းပါတယ်ဆို

တာမျ ိုး၊ ဆိုလခ


ို ျင်တာက အဲ ဒ
့ ီ loop ကို beginner ကိုသွားသင်ပေးလိက
ု ်မယ်ဆိုရင် ဘယ်ဟာက

ပိုပြီးတော့ တတ်လယ
ွ ်မလဲ၊ ဖတ်လို့ရောလွယ်မလား၊ ruby မှာလိဆ
ု ိုပိုအဆင်ပြေတာပေါ ့

Smalltalk တို့ဆိုလည်းအဲ လ
့ သ
ို ွားတယ်။

3.7 Reliability
Reliability ကဘာလဲဆိုရင် program တစ် ခုက runtime မှာ မ hang ဘဲ န၊ဲ ့ အဲ တေ
့ ာ့

မ hang တဲ ့ language ရှိ သလားဆိုရင်မရှိ ဘူး၊ ဒါပေမယ့် ဘာရှိ သလဲဆိုရင် hang တာနည်းတာနဲ ့

ကွာတယ်။ error တက်နေရင် error မပြဘဲ န ဲ ့ silently ပြဿနာတက်သွားမှာနဲ၊ ့


များတာနဲတော့

Javascript ကိုပြေးမြင်မယ်လထင်
ို့ တယ်၊ ဥပမာ string နဲinteger
့ နဲပေါင်
့ ို ျင်တဲ့
းတာကိုယ်လခ

integer plus operation မလုပ်ဘဲ string concatination လုပ်သွားတာမျ ိုး၊ အဲ ဒ


့ ီမှာ

error တွေတက်သွားတာမျ ိုး၊ အဲ တွေ


့ မဖြစ် အောင် ကာဗာလုပ်ပေးနိင
ု ်တာကို Reliability လို့ ခေါ်

တယ်။

Type checking . Reliability မှာဘာတွေပါသလဲဆိုရင် program မ run ခင်မှာerror တွေစစ်

ပေးနိင
ု ်တာရယ်၊ runtime မှာerror စစ် ပေးနိင
ု ်တာရယ်ပါတယ်၊ အဲ တ
့ ာကို type checking လို့

ခေါ်တယ်။ type ဆိုတာဘာကိုပြောတာလဲဆိုရင် data type ကိုပြောတာ။ ဥပမာ Java မှာဆိုရင်

int a=10.1 ဆိုပြီးမရဘူး၊ error တက်မယ်၊ integer ထဲကို double ထည့်လမရဘူ


ို့ း၊ ဒါသည်

type checking ပဲ ။ Javascript မှာဆိုရင် var a=10 ထဲကိုဘာထည့်ထည့်ဂေါ် ဇီ လာထည့်လည်း


ရတယ် a=’Gawzilla’ ဆိုလည်းရတယ်။ Java မှာဆိုရင် integer နဲ boolean
့ နဲmathematical

operation လုပ်လမရဘူ
ို့ း။

int a=10;
a+true; // error

အဲ တ
့ ာသည် type checking ကြောင့်ဖြစ် တယ်။ type checking မှာအဲ လ
့ ိုပြဿနာဖြစ် မ

ယ့်error တွေကိုstatic type language တွေသည် ထိနး် ထားပေးတယ်၊ ထိနး် ထားပေးတဲအ


့ တွက်

တော် ရုံပြဿနာဖြစ် မယ့်ကောင်မျ ိုးတွေသည်၊ ဥပမာ ကားစီးရင်ခါးပတ်ပတ်တာနဲတူ


့ တယ်၊ ခါးပတ်

မပတ်ရင် alarm မြည်သလိပေ


ု ါ။့ dynamic programming language တွေသည် ဘာနဲသွ
့ ားတူ

သလဲဆိုတော့ ခါးပတ်မရှိ ဘူး၊ ခါးပတ်မပတ်ထားလည်း ဘာမှမပြောဘူး၊ static language

ုိ ်တဲ့
တွေသည် type checking လုပ်ပေးတယ်ဆိုတာ program ကိုမ run ခင်ကတည်းကဖြစ် နင

error တွေကိုရှာပြီ းတော့သူက ဖမ် းထားပေးတယ်လို့ပြောတာ၊ အဲ တ


့ ာသည် type checking ရဲ ့

အလုပ်ပေါ။့ type checking မှာ နှစ်မျ ိုးရှိ တယ် static type checking နဲ ့ dynamic type

checking ပေါ၊့ static type checking ကတော့ မ run ခင်error စစ် တယ်၊ dynamic type

checking ကတော့run ပြီ းသွားတဲအ


့ ချ ိန်မှာစစ် တယ်။ ဥပမာ javascript မှာဆိုရင်compiler မရှိ

ဘူးinteger နဲstring
့ နဲကောက်
့ ပေါင်းလိက
ု ်လည်းပြဿနာမရှိ ဘူး boolean နဲကောက်
့ ပေါင်းလည်း

ရတယ်၊ object နဲကောက်


့ ပေါင်းလည်းရတယ်၊ ပြဿနာတက်မယ့်တက်ရော hang သွားမယ်ဒါမှ

မဟုတ် ဖမ် းရခက်တဲb


့ ug တွေရှိ လာနိင
ု ်တယ်။ ဒါမျ ိုးကိုtype checking လို့ ခေါ်တာ။ type

checking နဲပတ်
့ သတ်ရင်ဖေ့ဘုတ်မှာရေးထားတာတွေရှိ တယ် static type checking,

dynamic type checking, gradual type checking, optional type checking စသဖြင့်

ရှ ာဖတ်ကြည့်ပေါ။အဲ
့ တေ့ ာ့ type checker က programming language တိင
ု ်းမှာရှိ သလားဆို

ရင်မရှိ ဘူး၊ statically typed ဖြစ် တဲp


့ rogramming language တွေမှာပဲ ရှိတယ်။ဥပမာ java ,

C , C# အဲ လ
့ အ
ို နွယ်ဝင်တွေမှာပဲ ရှိတယ်။ အဲ ကေ
့ ာင်တွေcompiler သုံးရတဲအ
့ တွက်type

checking လုပ်ရတယ်၊ ပြီ းမှ error မပါဘူးဆိုမှ object code ထုတ်တယ်၊ အဲ တေ


့ ာ့မှ run တယ်၊

အဲ တေ
့ ာ့ဘာပိုကောင်းသလဲဆိုရင် reliable ပိုဖြစ် တယ်။ reliable ဖြစ် တဲအ
့ တွက်အဲကေ
့ ာင်

တွေသည်enterprise world မှာဆရာကြီးဖြစ် တယ်။ stable ဖြစ် တယ်ပေါ ့။အဲ တေ


့ ာ့မေးစရာရှိ

ု ခြားdynamic language တစ် ခုန ဲ ့enterprise တွေရေးလို့ မ


တယ် တခြား PHP , Python လိတ

ရဘူးလားဆိုတော့ရတယ်။ ဒါပေမယ့် code base ကြီးလာလေလေ engineering


team ရဲ ့effort ကအများကြီးလိတ
ု ယ်။အဲ တ
့ ာကြောင့်နောက်ပိုင်းမှာdynamic programming

language တွေသည်develop လုပ်ရတာမြန်တယ် expressive ဖြစ် တယ်၊ ဒါပေမယ့် သူတို့ရဲ ့

ပြဿနာသည် type checking အားနည်းတယ်၊ အဲ တေ


့ ာ့ဘာဖြစ် သလဲဆိုတော့အဲတ
့ ာ

ကိုhandle လုပ်ဖို့optional type system တွေထုတ်ရတယ်။ဥပမာဆိုရင် javascript မှာဆိုရင်

typescript ဆိုတာထုတ်လက
ို ်တယ်၊ အဲ တေ
့ ာ့ဘာဖြစ် သလဲဆို

တော့typescript သည်javascript မှာtype ထည့်လက


ို ်တာနဲအတူ
့ တပူ ဲ ၊အဲ တေ
့ ာ့သူက type

error တွေကိုစစ် ပေးနိင


ု ်တယ်။နောက်ပိုင်းကျရင် ဆိုင်ရာဆိုင်ရာတွေကိုအကျယ်ထပ် ပြောတဲအ
့ ခါ

ကျတော့ထပ် ပြောမယ်။ ဒါသည်အမွှနး် ပဲ ရှိသေးတဲသ


့ ဘောပေါ ့ :3။

3.8 Exception Handling


Programming language တစ် ခုက type ကိုreliable ဖြစ် အောင်လပ
ု ်ရတဲ ့

အခါcompile time မှာလည်း error တွေစစ်ရတယ်။ runtime မှာလည်း error စစ် ရတယ်၊

runtime စစ် တယ်ဆိုတာဘာလဲဆိုတော့program ကမှားသွားတယ် file ကမပွင့်ဘူးပြဿနာ

တစ် ခုခုတက်ပြီဆိုရင် program မှားနေပြီ ဆိုတာကိုသိရတယ်၊ သိ တော့ run ရင်းနဲhandle


့ လုပ်ရ

တယ်အဲတ
့ ာကို exception handling လို့ ခေါ်တယ်။ အဲ တေ
့ ာ့programming language တစ် ခု

က compile time မှာရောruntime မှာရောerror ကိုစစ် ပေးနိင


ု ်မှ သူ့ ကိုrobust ဖြစ် တယ်လို့ခေါ်

တယ်reliable

ဖြစ် တာပေါ။ဥပမာ
့ runtime မှာဖြစ် ချင်ရာဖြစ် ပြီးတော့hang သွားတာမျ ိုး၊ runtime မှာဖြစ် သွား

တဲe
့ rror တွေကိုစစ် မပေးနိင
ု ်ဘူးဆိုရင်ဒါသည်မကောင်းဘူး၊အဲ တေ
့ ာ့exception handling လုပ်

ု ်တဲ့programming language တွေသည်ပိုပြီးတော့reliable ဖြစ် တယ်ပေါ ့။


နိင

3.9 Aliasing
Alias ဆိုတာဘာလဲဆိုတော့ identity ပေါ ့ variable name ကိုပြောတာပေါ ့။ ဥပမာ

same entity တစ် ခုကိုနောက်ထပ် object သုံးခု လောက်ကနေသုံးခို င်းလို့ ရတယ်၊ အဲ တ


့ ာက java

တို့ C# တို့ C++တို့မှာရှိ တယ်၊ အဲ ကေ


့ ာင်သည်ကောင်းလားလို့ မေးရင် မကောင်းဘူး။ ဘာမကောင်း

တာလဲဆိုတော့ တစ် ခုကိုပြင်ရင် တခြားကောင်းတွေကိုပါသွားပြီ းတော့ effect ဖြစ် မယ်။

နောက်ပိုင်းfunctional programming language တွေမှာဆိုရင် aliasing ကိုကာဗာပေးထား


တာတွေရှိ တဲအ
့ တွက် ပိုပြီးတော့အားသာလာတယ်။ ဥပမာ လူတစ် ယောက်မှာ နာမည်တွေအများ

ု ါ ့ ဘယ်သူကဘယ်သူ့ကိုခေါ်နေမှနး် မသိ န။ဲ ့


ကြီးပေးထားသလိပေ

3.10 Cost
Programming language တစ် ခုမှာcost ဆိုတာအများကြီးရှိ တယ်

programmer ကိုtrain ဖို့ cost တွေ developer ရှ ာတဲc


့ ost တွေ၊ အဲ မ
့ ှာdeveloper တွေထည့်မ

တွက်တာဘာလဲဆိုတော့maintenance cost တွေပါတယ်၊

အဲ တေ
့ ာ့software တစ် ခုကရေးပြီ းတာနဲ ့၊ shortlist ဖြစ် တဲကေ
့ ာင်ဆိုဘာမှမဖြစ် ဘူး ၊ shortlist မ

ဖြစ် တဲကေ
့ ာင်ကျတော့ maintenance cost ရှိ တယ်၊ maintenance တွေလုပ်ရတယ် ၊

bug တွေfix ကတယ်၊ feature အသစ် တွေထပ် ထည့်ရတယ်၊ အဲ ဒ


့ ီcost တွေရှိ တယ်။ အဲ ့

ဒီcost တွေရှိ တဲအ


့ ခါမှာstatic type language တွေသည်အားသာတယ်။ dynamic

language တွေသည်မကောင်းဘူးလို့ ပြောတာမဟုတ်ဘူးနော် ။ များလာတဲအ


့ ခါကျ သူတို့မှာ

type မပါတဲအ
့ တွက် ဥပမာဆိုပါစို့ ကျွန်တော် တု့ ိက function တစ် ခုပေးလိက
ု ်တယ် အဲ ပေ ု ်တဲ့
့ းလိက

ကောင်က A ဖြစ် ချင်ဖြစ် မယ် B ဖြစ် ချင်ဖြစ် မယ် object ဖြစ် ချင်လည်းဖြစ် မယ် integer ဖြစ် ချင်

လည်းဖြစ် မယ်၊ အဲ ဒ
့ ီအပေါ်မူတည်ပြီးတော့ ကျွန်တော် တု့ ိက infer လုပ်လမရဘူ
ို့ း၊ ဒါပေမယ့် static

type programming language တွေမှာလုပ်လရတယ်


ို့ ၊ အဲ ဒ
့ ီမှာအားသာသွားတယ်၊ နောက်တစ် ခု

က cost မှာexecution cost တွေဘာတွေလိတ


ု ယ်။ ဥပမာကျွန်တော် တု့ ိက ဒီ language ကိုထည့်

ရင် server ဘယ်လောက်လမ


ို လဲ RAM ဘယ်လောက်လမ
ို လဲ၊ အဲ တ
့ ာမျ ိုးတွေရှိ တယ်။

နောက်တစ် ခုက portability cost ဆိုတာရှိ တယ်၊ portability ဆိုတာဘာအဓိ ပ္ပါယ်လဲဆိုတော့

software တစ် ခုရှိမယ်ဆိုပါစို့ အဲ ဒ


့ ီsoftware ကို platform ဘယ်လောက်မှာ run လို့ ရသလဲပေါ ့၊

အဲ တ
့ ာသည် portability နဲဆိ
့ ုင်တယ်။ ဥပမာဆိုပါစို့ customer က

software ကိုwindows အတွက်ရေးထားတယ်၊ နောက်တစ် ခါကျ linux ပေါ်မှာrun ချင်တယ် ၊ ဒါ

ပေမယ့် run လို့ မရဘူး ဘာလို့ လဲဆိုတော့ software တွေကမတူဘူး operating system တွေမ

တူဘူး၊ architecture တွေမတူဘူး၊အဲ တေ


့ ာ့ semantics တွေမတူဘူး၊ program ကအလုပ်လပ
ု ်

ချင်မှ လုပ်မယ်။ အဲ တေ
့ ာ့ portability ပြဿနာတက်တယ်။ အဲ တေ
့ ာ့

နောက်ပိုင်းlanguage တွေသည် portabiltiy ကောင်းအောင် vm တွေကြားခံ ပြီး design ထုတ်

တယ်၊ ဥပမာ Java တို့ C# တို့သည် VM တွေကြားခံ ပြီးတော့ portability ကောင်းအောင်လပ


ု ်

ု ်တဲအ
လိက ့ တွက် ကြိုက်တဲ့platform မှာအဆင်ပြေပြေrun လို့ ရသွားမယ်၊ အဲ တေ
့ ာ့ သူတု့ ိသည် ပို
ပြီ းတော့ အသုံးများသွားတယ်ပေါ ့။ အမှနက
် Java က VM ကြားခံ တဲc
့ oncept ကိုစပြီ းတော့

apply လုပ်programming language မဟုတ်ဘူး။ Java သမားတွေမကျေနပ် လာမေးပါ။ အဖြေ

ု ်မယ်။ ပထမဆုံးက SELF ဆိုတဲp


တော့ပြောလိက ့ rogramming language ပေါ ့ Lisp က ဒုတိယ

ပေါ။့ Fortran ပေါ်တယ်ပြီးတော့ Lisp ပေါ်တယ် Lisp သည် functional programming ဖြစ်

တယ် AI ခေတ်အစဦးမှာ Lisp ကိုသုံးကြသေးတယ်။ Lisp မှာတည်းက Virtual Machine ဆို

တဲc
့ oncept ကပါသေးတယ်။ အဲ ဒ
့ ီ vm ု ်တဲအ
concept ကိုသုံးလိက ့ တွက်java

ို ဲ အ
သည်portability ဖြစ် တယ်။ ဆိုလတ ့ ဓိ ပ္ပါယ်က အဲ တ
့ န
ု း် က Sun က operating system တွေ

လည်းရောင်းတယ်။ အဲ တ
့ န
ု း် က Microsoft က Programming လောကကိုလက်ဝါးကြီးအုပ်ထား

တာ၊ ဘယ်လမ
ို ျ ိုးလဲဆိုတော့ ဥပမာ VB နဲsoftware
့ တစ် ခုရေးတယ်ဆိုပါတော့၊ အဲ အ
့ ခါမှာ user

့ ခါမှာ အဲ ့software တင်မဟုတ်ဘဲန ဲ ့ windows ကိုပါဝယ်ရတယ်။ ဘာလို့ လဲဆိုတော့


ကဝယ်ရတဲအ

VB ကိုrun ဖို့ က windows ပေါ်မှာ run မှရတာကိုး၊ အဲ တေ


့ ု စ် လဲဆိုတော့
ာ့ဘယ်လိဖြ

အခု iphone တွေရောင်းသလိပေ


ု ါ ့၊ ဖုနး် တော့ရောင်းလိက
ု ်တယ်၊ ဒါပေမယ့် နားကြပ် ပါမလာဘူး

အားသွင်းကြိုးပါမလာဘူး၊အဲ တေ
့ ာ့ ဲ့
နားကြပ် နအားသွ င်းကြိုးမရှိ ဘဲ ဒီဖုနး် ကသုံးလို့ အဆင်ပြေ

သလားမေးရင် မပြေဘူးလေ၊ အဲ တေ
့ ာ့ဘာထပ် ဝယ်ရမလဲဆိုတော့ နားကြပ် န ဲ ့ အားသွင်းကြိုးဝယ်ရ

မယ်။ Microsoft လုပ်တဲန


့ ည်းက အဲ လ
့ လ ု ် သွားတာ။ သူ့ ရဲ့ programming language ဖြစ်
ို ပ

တဲV
့ B လိကေ
ု ာင်မျ ိုးကို လန်ပြန်နေအောင်လပ
ု ် ပေးထားပြီ းတော့၊ VB နဲရေးထားတဲ
့ ့ application

တွေများလေလေwindows ကအများကြီးရောင်းရလေလေပေါ ့၊ အဲ တေ
့ ာ့ဘာဖြစ် သလဲဆိုရင် sun

ကသူ့ ရဲ့server တွေမရောင်းရဘူး၊ အဲ တေ


့ ာ့သူက Virtual Machine Concept ဆိုတာနဲ ့

platform independent ဖြစ် အောင်လပ


ု ် ပစ် လက
ို ်တယ်။ အဲ တ
့ ာသည် portability ရသွားတာ

ပေါ။့ Platform independent ဆိုတာ portability နဲဘာကွ


့ ာလဲမေးရင် သိပ်တော့မကွာလှဘူး

ပေါ။့ portability ဆိုတာ code သည်အနည်းငယ်တော့ပြင်ရသေးတယ်ပေါ ့။platform

independent ဆိုတာ ကျတော့ ဘာမှ ပြင်စရာမလိဘ


ု ူးပေါ ့။ windows မှာrun တဲ ့

semantic သည် linux မှာrun တဲs


့ emantic နဲအတူ
့ တပူ ဲ ဖြစ် မယ်လို့ပြောတာ။အဲ တ
့ ာသည်

portability နဲ platform
့ independent နဲကွ
့ ာတဲအ
့ ချက်ပေါ ့။

Generality . ဘာကိုဆိုလသ
ို လဲဆိုတော့ဘယ်လိa
ု pplication တွေနဲသုံ
့ းလို့ ရသလဲပေါ ့

နောက်ပိုင်းထွက်တဲ့ programming language တွေသည် specific application purpose

တွေရှိ တယ် ဥပမာ Julia ပေါ ့ high performance computing, computational


science အတွက်သုံးတယ်ပေါ။့ ဥပမာ kotlin ရဲ ့ specific purpose area သည် android

development ပေါ။့ အဲ တေ
့ ာ့ kotlin နဲ ့ serverside တွေရေးလို့ ရလားဆိုရင် ရေးလို့ ရတယ်၊ ဒါ

ပေမယ့် အဲ ကေ
့ ာင်က shine မဖြစ် ဘူး။ အဲ လ
့ မ
ို ျ ိုးရှိ တယ်ပေါ ့။ နောက် Java ဆိုရင် အရင်က

ထုတ်ထားတာ android ရှိ တော့ mobile မှာrun လို့ ရတာပေါ ့။ ဟိးု အရင်တန
ု း် က

browser မှာrun လို့ ရဖို့ JavaPlus ဆိုတာလုပ်လက


ို ်သေးတယ်၊ ဒါပေမယ့် အဲ တ
့ ာကြီးက လစ် သွား

တယ်။အဲ တေ
့ ာ့ Javascript တက်လာတာပေါ ့။ Javascript ဆိုရင် generally mobile မှာလည်း

သုံးလို့ ရတယ် web browser မှာလည်းသုံးလို့ ရတယ် server-side မှာလည်းသုံးလို့ ရတယ်၊ အဲ ့

တော့ ဘယ်နေရာကိုသုံးသုံး သုံးလို့ ရတဲ ့ language ကိုပြပါဆိုရင် javascript ကိုသုံးချင်သုံးလို့ ရ

တယ်၊ နည်းနည်းတော့ စိ တ်ရှည်သည်းခံ ဖို့တော့လတ


ို ာပေါ ့နော့။

Practical Theory of Programming Languages Part 2


Well-definedness . ဘာကိုဆိုလသ
ို လဲဆိုတော့ Language specification ပေါ ့၊

language specification သည်ဘာကြောင့်လသ


ို လဲဆိုရင် ကျွန်တော် တု့ ိက language တွေကို

implement လုပ်ဖို့က language specification တွေ လိတ


ု ယ်၊ အဲ ဒါသည် industrial

purpose သော် လည်းကောင်း၊ research purpose အရသော် လည်းကောင်း ဒါတွေကလိအ


ု ပ်

တယ်၊ ဥပမာဆိုရင် Python ဆိုရင် သူ့ မှာနှစ်မျ ိုးရှိ တယ် cpython ရယ် Cython ရယ်ဆိုတာရှိ

တယ်။ လက်ရှိသုံးနေကျ python ကို C နဲရေးထားလို့


့ ့ တ်ဘဲ
သူ့ ကို Cpython လို့ ခေါ်တယ်၊ C နဲမဟု

နဲ တခြားနဲ
့ ရေးထားတဲ
့ ့ python လည်းရှိ တယ် ဥပမာ Java နဲ ရေးထားတဲ
့ ့ python ကို Jython လို့

ခေါ်တယ်၊ နောက်တစ် ခုက C# နဲ ့ ရေးထားတဲ ့ python ကို IronPython လို့ ခေါ်တယ်။

နောက်တစ် ခု Cython ဆိုတာရှိ တယ်၊ သူသည် C နဲတော့


့ ရေးထားတယ် ဒါပေမယ့် သူသည်

output က C code ထုတ်ပေးတယ်။ နောက်တစ် ခုက Python နဲ ့ ရေးထားတဲ ့ python လည်းရှိ

တယ် သူ့ ကို pypy လို့ ခေါ်တယ်။ Cython ဆိုရင် ဘာအတွက်ကောင်းလဲဆိုရင် C code ထုတ်ပေး

တော့ performance ကပိုပြီးတော့ကောင်းသွားတယ်။ Jython တို့ IronPython တို့ဘာကောင်း

့ ီထဲ
သလဲဆိုရင် ခင်များက Java နဲ ့Enterprise system တစ် ခုရေးတယ်ပေါ ့ အကြီးကြီးပေါ ့၊ အဲ ဒ

မှာ scripting language တွေကို support လုပ်ချင်တယ်ဆိုရင်၊ ဥပမာ python ကိုပေးချင်တယ်

ဆိုရင်၊ အဲ ဒါဆိုရင် Java ကနေ python ကို တိက


ု ်ရု ိ က်လှမ်းခေါ်လို့ မရဘူး။ အဲ တေ
့ ာ့ Java နဲ ့

implement လုပ်ထားတဲ ့ Jython ကိုခေါ်သုံးလို့ ရတယ်။ အဲ ဒ


့ ီလန
ို ည်းနဲ ့ ကျွန်တော် တု့ ိက Python

ကို JVM ပေါ်မှာ run လို့ ရသွားတယ်။ အဲ တေ


့ ာ့ Python package တွေအကုနလ
် ုံးကို run လို့ ရမှာ
လားဆိုတော့ မဟုတ်ဘူး အောက်က C package တွေကိုတော့ မရဘူးပေါ ့။ subset ကိုတော့ ရ

့ ာသည် ဘာလို့ လဲဆိုရင် Programming language specification ရှိ တဲအ


မယ်ပေါ။့ အဲ တ ့ ခါမှာ

လွယ်သွားတယ်။ ဒါပေမယ့် Python မှာအဲ တ


့ ာမျ ိုးမရှိ ဘူး။ မရှိ တော့ လုပ်ရခက်တယ်။ ဥပမာ

facebook ဆိုရင် PHP ကို adopt လုပ်တဲအ


့ ခါမှာ HACK ဆိုတဲ့ Programming language ကို

ထုတ်တယ်။ အဓိ ကတော့ PHP ကို ပိုကောင်းအောင် လုပ်ထားတာ ဥပမာ type တွေထည့်လက
ို ်တာ

ပေါ၊့ type script သဘောမျ ိုးပေါ။့ အဲ ကေ


့ ာင်ကို ဘယ်ပေါ်မှာ run သလဲဆိုရင် Hiphop virtual

machine ပေါ်မှာ run တယ်။ အဲ တေ


့ ာ့ သူတု့ ိက PHP ကို သူတု့ ိက different implementation

ပေးရတော့မှာပေါ။့ အဲ တေ
့ ာ့သူတု့ ိက PHP ရဲ ့ semantics ကို သူတု့ ိက detail သိဖို့လိတ
ု ယ်။ အဲ လ
့ ို

လိတေ
ု ာ့ PHP မှာ အဲ လ
့ ို defined လုပ်ထားတဲ ့ document ရှိ လားဆိုတော့ မရှိ ဘူး။ မရှိ တော့ ဘာ

လုပ်သလဲဆိုရင် facebook က သူတု့ ိကိုယ်တိင


ု ် ထုတ်ရတယ်။ အဲ လ
့ ို facebook ထုတ်ထားတာ

တော့ရှိတယ်၊ ဆိုတော့ အဲ တ
့ ာသည် PHP language စထုတ်ကတည်းက ရှိ တာမဟုတ်ဘူး။ အဲ လ ို ဲ
့ ပ

Ruby မှာလည်း language specification ထုတ်ထားတာမရှိ ဘူး။ အဲ တေ


့ ာ့ Ruby ကို ပြန်ရေးချင်

တယ်ဆိုရင် ပြဿနာတွေတက်တယ်။ အဆင်မပြေဘူး။ အဲ တ


့ ာဘာအကျ ိုးလဲဆိုတော့ language

specification ရမရရဲ ့ ပြဿနာပေါ။့ language specification ရှိ မရှိ language ကို

ဘယ်လောက်ထိ specified လုပ်နင


ုိ ်သလဲဆိုတာမျ ိုး ဒါမျ ိုးကိုပေးထားတာပေါ ့။ အဲ တ
့ ာကို ဘာနဲ ့

ပြောသလဲဆိုရင် well-definedness လို့ ပြောတာ။

နောက်တစ် ခုက တစ် ချ ို့ language တွေ ဆိုပါစို့ C++ လိကေ


ု ာင်မျ ိုးဆိုရင်တော့ Official

language specification ရှိ တယ် C မှာတော့မရှိ ဘူး မရှိ တဲ့ language တွေမှာ ဘာပေးထား

သလဲဆိုရင် the programming language ဆိုတဲ့ စာအုပ်တွေပေးထားတယ်။ ဥပမာ Kotlin တို့

ဆိုရင် the Kotlin programming language တို့၊ go မှာဆိုရင် the go programming

language တို့၊ အဲ တ
့ ာတွေသည် Programming language designer တွေကိုယ်တိင
ု ်ရေးထား

တာ။ အဲ ကေ
့ ာင်တွေကို language specification အနေနဲ ့ သုံးကြတယ်ပေါ ့၊ but ဒါပေမယ့်

language specification မဟုတ်တဲအ


့ တွက် မပြည့်စုံဘူးပေါ ့။ well-definedness ရှိ တယ်ဆို

ရင် ကျွန်တော် တု့ ိ language ကို အများကြီး implement လုပ်လရတယ်


ို့ ။ ဥပမာ ခင်များတို့ က

PHP ကိုကြိုက်တယ်ဆိုရင် တခြားဘယ် platform ပေါ်မှာ နေနေ implement တက်လပ


ု ် လရ
ို့

တယ် ဒါမျ ိုးတွေပြောတာပေါ ့။ အဲ ဒ


့ ါသည် ပိုပြီးတော့ widely usage ဖြစ် စေနိင
ု ်တယ်ပေါ ့။

4. Influences on Language Design


ု ်တဲကေ
Language design တွေကို လွှမ်းမိုးမှုရှိစေနိင ့ ာင်မျ ိုးတွေပေါ ့ ။ ဥပမာ computer

architecture ပေါ။့

4.1 Computer Architecture


Computer architecture လို့ ဆိုရင် လူတွေက အများကြီးမရှိ ဘူးလို့ ထင်နေကြတာ ဘာ

ဖြစ် လလဲ ို့ ဆိုတော့၊ ကျွန်တော် တု့ ိက များသောအားဖြင့် ကျွန်တော် ကိုယ်တိင


ု ်အပါဝင်ပေါ ့၊

architecture တစ် ခုတည်းပဲ သုံးလာကြတာပေါ ့၊ ဥပမာ ကျွန်တော် တု့ ိသုံးတဲ ့ Laptop တွေ

System unit တွေအကုနလ


် ုံးက von Neumann architecture နဲသွ
့ ားကြတာ၊ Von

Neumann ဆိုတာဘာလဲဆိုရင် John Von Neumann ဆိုတဲလ


့ ူထားခဲ့ တဲ့ architecture ပေါ ့။

အဲ ဒ
့ ီ architecture မှာ ဘာပါသလဲဆိုတော့သူက Stored-program concept ဆိုတာကို သုံး

တယ်၊ stored-program concept ဆိုတာ ဘာလဲဆိုရင် အောက်မှာပုံပြထားတယ်။

ကွနပ
် ျူတာထဲမှာ memory ရှိ တယ်၊ memory က data ကို CPU ကနေ ယူသုံးမယ် ပြီ းရင်

process လုပ်တယ်ပေါ၊့ input / output device တွေရှိ မယ်၊ memory ပေါ်မှာ ဘာထားလို့ ရသ

လဲဆိုရင် code ရော data ရော ထားလို့ ရတယ်။ အဲ လ


့ န
ို ည်းနဲသွ
့ ားတာကို Von Neumann

architecture လို့ ခေါ်တယ်။ ကျွန်တော် တု့ ိ လက်ရှိအသုံးပြုနေတဲ ့ ကွနပ


် ျူတာတွေအတော် များများ

့ ီ architecture ကိုပဲ သုံးတယ်။ နောက်တစ် ခုအနေနဲ ့ Von Neumann architecture မှာ


က အဲ ဒ

code ရော data ရော memory ပေါ်မှာပဲ ထားမယ်ဆိုတဲ့ concept က ဘယ်ကလာသလဲဆိုရင်

Alan Turing ကလာတယ်။ အဲ တေ


့ ာ့ Von Neumann architecture မှာဆိုရင် memory ,

cpu , input/output device တွေပါမယ်၊ memory ပေါ်ကနေ input/output device တွေကို


ယူသုံးမယ် program တွေကို manipulate လုပ်မယ်။ memory ပေါ်မှာ code ရော data ရောရှိ

တယ်။ ဒီ von Neumann architecture ပေါ်မှာ သွားတဲ ့ language တွေကို များသောအားဖြင့်

imperative language လို့ ခေါ်တယ်။

What is imperative?
Imperative ဆိုတဲအ
့ ဓိ ပ္ပါယ်က ပေါင်း၊ နှုတ်၊ မြှောက်၊ စား သုံးတယ်။ Assignment တွေ

လုပ်တယ်၊ အဲ တေ
့ ာ့ မေးစရာရှိ တယ်၊ ကိုသက်ခိုင်ရေ စောက်ခွက်ပြောင်နေတာလား၊ ပေါင်း၊နှုတ်၊

မြှောက်၊စားမလုပ်ဘဲန၊ဲ ့ assignment တွေမလုပ်ဘဲန ဲ ့ သုံးတဲ ့ language ရှိ သလားလို့ မေးရင် ရှိ

တယ်။ ဥပမာ Prolog ဆိုရင် Logical rule နဲသွ


့ ားတယ်၊ imperative မှာလို variable တစ် ခုကို

ခဏ ခဏ ပြောင်းနေတာမရှိ ဘူး။ ဥပမာ truly functional programming language ဖြစ် တဲ့

Haskell လိကေ
ု ာင်မျ ိုးတွေမှာ assignment တော့သုံးတယ်၊ ဒါပေမယ့် assignment လို့ မခေါ်

ဘူး initialization လို့ ပဲ ခေါ်တယ်။ assignment ဆိုတဲအ


့ ဓိ ပ္ပါယ်က variable တစ် ခုကို ခဏခဏ

ပြန်ပြီးတော့ data assign လုပ်လရတယ်


ို့ ။ ခု န pure functional programming language

ဖြစ် တဲ့ Haskell လိကေ


ု ာင်မျ ိုးမှာ ခဏခဏ ပြန် assign မလုပ်ဘူး တစ် ခါပဲ လုပ်တယ်။ အဲ တေ
့ ာ့

imperative language ရဲ ့ feature လို့ ဆိုရင် destructive assignment သုံးတယ်၊ တစ် လင


ို ်း

ပြီ းတစ် လင
ို ်း run တယ်။ အဲ တေ
့ ာ့ မေးစရာရှိ တာက programming language တွေအကုနလ
် ုံး

က တစ် လင
ို ်းပြီ းတစ် လင
ို ်း run တာမဟုတ်ဘူးလားလို့ မေးစရာရှိ တယ်။ အဲ တ
့ ာက မဟုတ်ဘူး။

ဥပမာ Prolog လိကေ


ု ာင်မျ ိုးသည် တစ် လင
ို ်းပြီ း တစ် လင
ို ်း run တာမဟုတ်ဘူး။ သူသည် set နဲ ့

run သွားတယ်။

Prolog code example


---------------------------

1. Here are some simple clauses.

likes(mary,food).
likes(mary,wine).
likes(john,wine).
likes(john,mary).

The following queries yield the specified answers.

| ?- likes(mary,food).
yes.
| ?- likes(john,wine).
yes.
| ?- likes(john,food).
no.
ဒီ example မှာဆိုရင် line by line run တာ ဟုတ်ချင်မှဟတ
ု ်မယ်၊ ဒါသည် Prolog မှာရှိ တယ်။

အဲ တေ
့ ာ့ Programming language တိင
ု ်းတော့ line by line မ run ဘူး။ ဒါကိုပြောပြတာ။ အဲ ့

တော့ Imperative ဆိုတဲ့ concept ကို နောက်ပိုင်းကျမှ အများကြီး ပြန်ရှင်းမယ်။

Imperative language တွေမှာဆိုရင် fetch-execute cycle ဆိုတာ ရှိ တယ်။


• initialize the program counter
• repeat forever
◦ fetch the instruction pointed to by the program counter
◦ increment the program counter to point at the next instruction
◦ decode the instruction
◦ execute the instruction
• end repeat

သူသည် ဘယ်လအ
ို လုပ်လပ
ု ် သလဲဆိုရင် Hardware က statement တစ် ကြောင်းကို ဘယ်လို

ု ် သွားသလဲဆိုတဲ့ ကိစ္စပေါ။့ အဲ တ
အလုပ်လပ ့ ာကို Programmer တွေက သိဖို့လိုသလားလို့ မေးတဲခ
့ ါ

ကျရင် သိဖို့လိတ
ု ယ်။ instruction တစ် ကြောင်းရှိ တယ် ဆိုပါစို့ OS/CPU က run တဲအ
့ ချ ိန်ကျရင်

Program သည် machine language ဖြစ် သွားတယ်၊ အဲ တေ


့ ာ့ line တွေအများကြီးဖြစ် သွား

့ ဲကလက်ရှိဘယ်လင
တယ်၊ အဲ ထ ို ်းကို run နေသလဲဆိုတာကို မှတ်ထားတာကို Program counter

လို့ ခေါ်တယ်။ condition အရ မထွက်မချင်း repeat လုပ်တယ်။ program counter က

မှတ်ထားတဲ ့ instruction ကိုဖတ်တယ်၊ ဖတ် ပြီးရင် program counter ကို တစ် တိးု တယ်၊ တိးု ပြီ း

ရင် ဒီ instruction က ဘာလုပ်သလဲဆိုတာကို ဆုံးဖြတ်ရတယ်။ ဥပမာ variable ကို assign

လုပ်တာလား move လုပ်တာလား၊ ဒါမှမဟုတ်ရင် counter ကို တစ် တိးု တာလား၊ ဒါမှမဟုတ်

ု ုံစံမျ ိုးပေါ ့။ Assembly ကိုသင်ဖူတဲသ


comparison လုပ်တာလား၊ Assembly လိပ ့ ူဆိုရင် ဒါကို ပို

နားလည်လိမ့်မယ်။ ဒါသည် Operating System concept မှာလည်းပါတယ်။ Von Neumann

architecture သည် ဒီ fetch-execution cycle နဲ ့ လုပ်သွားတာ။ functional , logic ,

imperative , object-oriented တွေကို ဆိုင်ရာ Paradigm တွေကျမှ အကျယ်ပြန်ရှင်းပေး

မယ်။ အဲ တေ
့ ာ့ ကျွန်တော် တု့ ိ အများဆုံးသုံးဖူးတဲ ့ language ကတော့ imperative လို့ ပြောရမှာ

ပေါ။့ အဲ တေ
့ ာ့ မေးစရာရှိ တယ် Java လိကေ
ု ာင်မျ ိုးက Object-oriented programming

language မဟုတ်ဘူးလားဆိုရင် ဟုတ်တယ်၊ သူသည် Imperative ကိုမှ Object-oriented

ဖြစ် အောင် facilities တွေပေါင်းထားတာဖြစ် တယ်။ များသောအားဖြင့် C အနွယ်ဝင် language

တွေသည် Imperative တွေလို့ ပြောလို့ ရတယ်။


4.2 Programming Design Methodologies
Programming ဆိုတာ Code တွေချည်းပဲ ရေးရတာမဟုတ်ဘူး design တွေလည်းလုပ်ရ

တယ်၊ ဥပမာ ဆိုပါစို့ software တစ် ခုရေးမယ်ဆိုရင် အဲ ဒ


့ ီ software ကိုတန်းပြီ းတော့ code

ရေးချလိက
ု ်တာမဟုတ်ဘူး၊ ဘယ် Module တွေဘယ်လထ
ို ားမယ်၊ Component တွေကို ဘယ်

နေရာမှာထားမယ်ဆိုပြီး သတ်မှတ်ရတယ်၊ အဲ တ
့ ာကို Programming design methodologies

လို့ ပြောတယ်။ ဘာတွေပါသလဲဆိုရင် ဥပမာ Object-oriented programming ပေါ ့၊ Java , C#

, C++ တို့ သည် Object တွေနဲ စဥ်


့ းစားတယ်၊ အဲ တေ
့ ာ့ object ဆိုတာ ဘာလဲဆိုရင် data ပါမယ်၊

operation ပါမယ်။ အဲ တ ု ် တယ်။ functional composition လုပ်တဲအ


့ ာတွေနဲ ့ အလုပ်လပ ့ ခါကျ

ရင် module တွေ composition လုပ်တဲအ


့ ခါကျရင် inheritance တို့ composition တို့ သုံး

သွားတာ။ ဒါသည် object-oriented design လို့ ခေါ်တယ်၊ အဲ တေ


့ ာ့ object-oriented design

သည် programming design methodology ဖြစ် တယ်။ နောက် C ဆိုရင် functional

composition နဲပဲ့ သွားထားတယ်။ လူတွေ တွေးတာမှားနေတာရှိ တယ်၊ ငါတို့ သုံးတဲ ့ language

paradigm ကမှ ကောင်းတယ်လို့တွေးတာပေါ ့၊ ဥပမာ functional programming

concept သည် program ကို function အသေးလေးတွေနဲ ့ ဆောက်သွားမယ်၊ အဲ ဒ


့ ီ function

တွေနဲ ့ execute လုပ်သွားမယ်၊ compile လုပ်မယ်၊ transform လုပ်ပြီးသွားမယ်၊ functional

programming မှာဆိုရင် အဲ လ
့ ို principle တွေနဲပဲ့ သွားတယ်၊ thinking concept တွေကမတူ

ဘူး၊ အဲ တ
့ ာကို လူတစ် ချ ို့က ဘယ်လိုတွေးသလဲဆိုရင် large scale software ဆိုရင် ငါတို့ သုံး

တဲ ့ paradigm နဲမှ့ အဆင်ပြေမယ်ဆိုပြီးထင်တယ်။ အဲ တ


့ ာက ဘာမှားသလဲဆိုရင် ဥပမာ Linux

ဆိုရင် C နဲရေးထားတာ၊
့ C++ ကိုမသုံးဘူး၊ဘာလို့ လဲဆိုရင် Linux သည်လည်း procedure

based programming ပေါ၊့ imperative programming ပေါ ့။ အဲ တေ


့ ာ့သူသည်လည်း well-

design ချတဲအ
့ ခါကျရင် Heavy system လိကေ
ု ာင်တွေလုပ်လရတာပေါ
ို့ ့။ အဲ တေ
့ ာ့ ဆိုလခ
ို ျင်

တာက Object-oriented မှမဟုတ်ဘူး၊ ဘယ် design methodology ပဲ သုံးသုံး ကိုယ်သုံးတဲ ့

language ကို ကောင်းကောင်းမွနမ


် ွနသ
် ုံးမယ်ဆိုရင်တော့ သုံးလို့ ရတယ်ပေါ ့။

5. Language Categories
Language တွေကို category ခွဲ လရတယ်
ို့ ၊ စာအုပ်ထဲမှာတော့ imperative ,

functional, logic , object-oriented ရယ် ခွဲ တယ်ပေါ ့၊ ဒါပေမယ့် နောက်ပိုင်းမှာ Hybrid တွေ

လည်းပါလာတယ်။ ဆိုလတ
ို ာက အခု နောက်ပိုင်း Programming language တွေက Paradigm

တစ် ခုတည်းပေးတာမဟုတ်ဘူး၊ ဥပမာဆိုပါစို့ Java ဆိုရင် Imperative လည်းရတယ်၊ Object-


oriented လည်းရတယ်၊ functional ကိုလည်း support ပေးလာတယ်၊ ဒါပေမယ့် တချ ို့ဟာတွေ

ကတော့ ဘယ်အတိင
ု ်းအတာထိဆိုပြီး အကနသတ်
့် တော့ရှိတယ်၊ ဥပမာ Java သည် functional

ကိုပေးတယ်ဆိုပေမယ့် သူသည် pure functional programming language မဟုတ်ဘူး၊

Object-oriented ပေးတယ်ဆိုရင်တောင် pure object-oriented မဟုတ်ဘူး၊ ဒါပေမယ့် သူ

သည် Object-oriented ကိုmainly features တွေနဲ ့ ဇောင်းပေးတဲအ


့ တွက် သူ့ ကို Object-

oriented programming language လို့ ပဲ သိကြတယ်။

6. Language Design Trade-Offs


Language တွေကိုဆောက်ရတဲအ
့ ခါကျရင် ကျွန်တော် တု့ ိက Design decision တွေချရ

ု ်တဲ့ decision ပေါ်မူတည်ပြီး ကောင်းတာတွေ ဆိုးတာတွေဖြစ် လာတယ်။ အဲ တ


တယ်၊ ချလိက ့ ာကို

Language Design Trade-Offs လို့ ခေါ်တယ်။ ဥပမာ ပြောရရင် C++ မှာဆိုရင် Garbage

Collector ဆိုတာမရှိ ဘူး၊ အဲ တေ


့ ာ့လူတွေကပြောကြတယ် ငါတို့ Modern programming

language တွေမှာဆိုရင် gc ရှိ တယ်၊ မင်းတို့ C++ မှာဘာကြောင့် gc မထည့်သလဲမေးတဲအ


့ ခါကျ

ရင်၊ C++ ရဲ ့ designer က gc မရေးတတ်လမဟု


ို့ ို ျင်တာက သူ့ ရဲ့ design
တ်ဘူး၊ ဆိုလခ

decision ကြောင့်ဖြစ် တယ်၊ C++ ကသူ့ ကိုထုတ်ရတယ် ရည်ရွယ်ချက်သည် ဘာကြောင့်ထုတ်

ရသလဲဆိုရင် C ကိုအစားထိုးပြီ းသုံးနိင


ု ်ဖို့ ၊ အဲ တ
့ န
ု း် က C ကိုဘယ်မှာသုံးသလဲဆိုတော့ system

programming တွေမှာသုံးတယ်၊ အခု လည်း system programming မှာသုံးတာပါပဲ ။ အဲ အ


့ ချ ိန်

တုနး် က mostly operating system တွေအတွက်သုံးတာ။ အဲ လ


့ သ
ို ုံးတဲအ
့ ခါမှာ GC သည်

ဘယ်လအ
ို လုပ်လပ
ု ် သလဲဆိုတာ ကျွန်တော် တု့ ိက သဘောပေါက်ဖို့လိတ
ု ယ်။ အဲ တေ
့ ာ့ GC ဘယ်လို

အလုပ်လပ
ု ် သလဲဆိုရင်၊ GC က program တွေမှာ ရေးထားတဲ ့ variable တွေကို stack ပေါ်မှာရှိ

တဲ ့ variable တွေကိုလက
ို ်ဖတ်ရတယ်။ ဖတ် ပြီးတော့ ဘယ် variable ကလွတ်တယ်

ဘယ်variable ကသုံးနေတယ်ဆိုလက
ို ် ကြည့်ရတယ်။ ကြည့်ပေါ် ပြီ းတော့မှ memory ပေါ်က

variable တွေကို deallocate လုပ်ရတယ်။ အဲ တေ


့ ာ့ gc ကို run မယ်ဆိုရင် ဘာဖြစ် သလဲဆိုတော့

cost ရှိ တယ်၊ အဓိ ပ္ပါယ်က သူသည် runtime မှာ အနည်းငယ်လေးသွားမယ်၊ အဲ တေ


့ ာ့ C++ ကို

အဓိ က သုံးချင်တဲနေ
့ ရာသည် operating system implementation တွေ၊ operating

system တွေမှာ အဲ လ
့ လေ
ို းသွားတာသည် အဆင်မပြေဘူး။ မပြေတော့ C++ မှာ GC ထည့်မပေး

ဘူး၊ အဲ တေ
့ ာ့ နောက်ပိုင်း modern programming language ဖြစ် တဲ့ Java လိဟ
ု ာမျ ိုးမှာဆိုရင်၊

Java သည် system programming ကို target ထားတာမဟုတ်ဘူး၊ သူသည် application


program တွေကို target ထားတာ၊ အဲ တေ
့ ာ့သူသည် ဘာလုပ်လရသလဲ
ို့ ဆိုရင် ဒီ Garbage

Collector ကိုထည့်လရတယ်
ို့ ။ application program တွေမှာ millisecond အနည်းငယ်

လောက်ဟသွားတာသည် ပြဿနာမရှိ ဘူး၊ အဲ တေ


့ ာ့ ဒါမျ ိုးကို language design Trade-Offs လို့

ခေါ်တယ်။ အဓိ က ပြောချင်တာက language designer တွေသည် language design ကိုရွေ း

တဲအ
့ ခါမှာ သူတု့ ိ ရလိက
ု ်တာတွေရှိ တယ်၊ ပေးလိက
ု ်ရတာတွေရှိ တယ်၊ အဲ တ
့ ာမျ ိုးတွေ အဆင်ပြေ

အောင် ဘာနဲ ့design လုပ်ထားသလဲဆိုတာကို သိဖို့လိတ


ု ယ်။ ဥပမာ C, C++ တို့မှာဆိုရင် array

index bound checking မရှိ ဘူး၊ အဲ တေ


့ ာ့နားလည်ရမှာက၊ array index bound checking

ဆိုတာက C , Java တို့မှာဆိုရင် array index က 0 ကစတယ်၊ စပြီ းတော့ array length – 1

အထိသွားတယ်။ array index bound check ဖို့ ဆိုရင် language runtime ဥပမာ JVM , CLR

တို့ က ဘာလုပ်ပေးရသလဲဆိုရင် array operation လုပ်တိင


ု ်းမှာ index က လွနနေ
် ပြီ ဆိုတာ အမြဲ

စစ်ရတယ်၊ စစ်ရတော့ ပြဿနာဘာဖြစ် သလဲဆိုတော့ program runtime ကို slowdown ဖြစ်

စေတယ်၊ အဲ တေ
့ ာ့ C သည် သူ့ ရဲ့ ရည်ရွယ်ချက်က system programming လုပ်ဖို့ system

program တွေရေးဖို့ ၊ အဲ လ
့ ို slowdown ဖြစ် တာကိုလက်မခံ ဘူး၊ အဲ တ
့ ာကြောင့်သူသည် array

index bound checking လိကေ


ု ာင်မျ ိုးလည်း မထည့်ဘူး။ ဒါသည် သူတု့ ိ language designer

တွေရဲ ့ choice ပေါ။့ ကိုယ်က ဆရာကြီးသွားလုပ်ပြီးတော့ ဘယ် language ရဲ ့ feature သည်

ဲ ့ ားပြီ းတော့ ဆုံးဖြတ်ဖို့က မလွယ်ဘူးလို့ ပြော


ဘာကြောင့်မပေးထားသလဲဆိုတာ ဘူမသိကိုးမသိ နသွ

ု ျင်တဲကေ
တာ။ ဒါကြောင့် Trade-Offs ဆိုတာ လိခ ့ ာင်တစ် ခုကြောင့် တခြားပေးလိက
ု ်ရတာမျ ိုး

ဥပမာ ထင်ရှားတဲ ့ ဥပမာဆိုရင် java သည် platform independent ကိုလခ


ို ျင်တယ်။

windows , linux , mac ဘယ်မှာ run, run semantics မှနမ


် ှ နအ
် ဆင်ပြေပြေနဲ run
့ သွားမယ်။

အဲ လ
့ ို Platform independent ဖြစ် အောင် design ချထားတယ်။ အဲ တေ
့ ာ့ သူ့ ကို platform

independent ဖြစ် စေခြင်းသည် စီးပွားရေးအရလည်းပါတယ်၊ microsoft နဲ sun


့ ရဲ ့ ပြဿနာကို

အရှေ့မှာ ပြောခဲ့ ပြီးပြီ ။ platform independent ဖြစ် ရမယ်ဆိုတဲ့ decision ကြောင့် သူသည်

VM ကိုကြားခံ လက
ို ်ရတယ်။ VM ကို ကြားခံ လက
ို ်ရတော့ ကောင်းတာသည် platform

independent ဖြစ် သွားတယ်။ မကောင်းတာကဘာဖြစ် သွားသလဲဆိုရင် slowdown ဖြစ် သွား

့ ာကြောင့် java သည် speed ကိုဘယ်လောက်ပဲ optimize လုပ်လာပါတယ်၊


တာ၊ အဲ တ

researcher team တွေနဲ ့ oracle က JVM ကို အရမ်း optimization တွေလုပ်နေပါတယ်ပြော

ပြော၊ native ထုတ်တဲ့ ကောင်တွေလောက် speed ကတက်မလာနိင


ု ်ဘူး၊ ဒါသည် theoretically
အရ မှနက
် ိုမှနတ
် ယ်၊ အဲ ဘေ
့ ုိ ်ဘူး။ ဘာကြောင့်လဲဆိုတော့ သူသည် bytecode ကို
ာင်ကို မကျော်နင

ု ် မလုပ်ရင် မလုပ်ရင် compile လုပ်နေရမယ်၊ ပြောချင်တဲ့


ပြန်ပြီးတော့ interpret လုပ်ရင်လပ

အဓိ ပ္ပါယ်က သူသည် Layer တစ် ခုအမြဲ ခံနေရတယ် ၊ hardware မှာ တိက ု ်တဲ့
ု ်ရု ိ က် မ run နိင

အတွက်သူသည် native တွေလောက်အဆင်မပြေလာဘူးပေါ ့။ နောက်တစ် ခုက VM ကိုသုံးတဲ ့

အတွက် GC တို့ Runtime တို့လုပ်လရသွ


ို့ ားတယ်၊ နောက်တစ် ခုက array bound checking လို

ဟာမျ ိုးလုပ်လရသွ
ို့ ားတယ်။ အဲ တေ
့ ာ့ နောက်ပိုင်း language တွေဆိုရင် vm မသုံးဘဲ န ဲ ့ garbage

collection လုပ်လရတဲ
ို့ ့ language တွေလည်းရှိ တယ်။ ဥပမာဆိုရင် go ပေါ ့၊ Go ဆိုရင်သူက VM

မသုံးဘူး ဒါပေမယ့် သူ့ မှာ GC ပါလာတယ်။ မြန်လည်းမြန်တယ်။ အဲ တ


့ ာတွေသည် programming

language design တွေရဲ ့ Trade-Offs တွေပေါ ့။

7. Implementation Methods
Implementation methods ဆိုတာရဲ ့ အဓိ ပ္ပါယ်က တော် တော် လေးရှုပ်တယ်၊ စမုံတန
ု း်

် ယ် :3 ။ Implementation methods ဆိုတဲ့ အဓိ ပ္ပါယ်သည်


အောင်ရှုပ်တယ်ဆိုရင် ပိုမှနမ

ို ျင်တဲ့ အဓိ ပ္ပါယ်


programming language တွေကို ဘယ်လို implement လုပ်သလဲပေါ ့၊ ဆိုလခ

က C ဆိုရင် Compiler ကိုသုံးတယ်၊ compiler သုံးတယ်ဆိုတဲ့ အဓိ ပ္ပါယ်က C code ကနေ

machine code ကိုထုတ်တယ်။ အဲ ဒ


့ ီ machine code သည် platform ပေါ်မှာ run လို့ ရတယ်၊

platform ဆိုတဲ့ အဓိ ပ္ပါယ်သည် operating system + hardware ကို platform လို့ ခေါ်တာ ၊

ဥပမာ windows os + Intel machine ရယ်ပေါင်းထားတာကို platform တစ် ခုလို့ခေါ်တာ။ အဲ ့

တော့ implementation method ကို category ခွဲ ရင် compiler ရှိ မယ် C , C++ တို့လိကေ
ု ာင်

တွေ၊ Java က compiler မသုံးဘူးလားဆိုရင်သုံးတယ်၊ ဒါပေမယ့် သူ့ ကို compiler သုံးပြီ း

implement လုပ်ထားတယ်လို့ပြောဖို့ တော့ သိပ်မလွယ်ဘူး။ ဘာလို့ ဆိုတော့ သူသည် compiler

သုံးပြီ း exe ထုတ်သွားတာမဟုတ်ဘူး။ သူသည် hybrid model ကိုသုံးသွားတာ၊ hybrid model

ဆိုတာ compiler + interpretation ပေါ ့၊ bytecode ကိုပြန်ပြီးတော့ VM သည် interpret

လုပ်ရတယ်။ နောက်တစ် ခု Interpreter ပေါ ့၊ interpreter ကိုဘယ်သူတွေသုံးလို့ ရသလဲဆိုရင်

dynamic programming language တွေသုံးလို့ ရတယ်၊ interpreter သည် dynamic

language တွေကို implement လုပ်ရတာ ပိုအဆင်ပြေစေတယ်။ဥပမာ dynamic language

မှာ a+b ရေးတယ်ဆိုပါစို့ ။ static language တွေမှာဆိုရင် a+b သည် ဘာလဲဆိုတာကို တန်းသိ

တယ်။ ဆိုလတ
ို ာက a သည် integer ဖြစ် ရင် ဒီ plus သည် integer operation လုပ်ရမယ်ဆို
တာ တန်းသိတယ်။ dynamic language တွေမှာ ဆိုရင် a သည် သူ့ type ကအချ ိန်မရွေး

ပြောင်းလဲနင
ုိ ်တယ်။ b လည်း ပြောင်းနိင ့ ီအပေါ်မူတည်ပြီးတော့သူ့ရဲ့ code သည် တန်း
ု ်တယ်။ အဲ ဒ

ပြီ းထုတ်လမရဘူ
ို့ း၊ ဘာဖြစ် သလဲဆိုတော့ dynamic code ကိုပဲထုတ်ရတယ်။ semantics သည်

run နေတဲအ
့ ချ ိန်မှာ ပြောင်းနိင
ု ်တယ်။ အဲ တေ
့ ာ့ dynamic language တွေသည် interpreter

တွေနဲ ့ implement လုပ်မှပဲ ပိုပြီးတော့ အဆင်ပြေတယ်။ နောက်တစ် ခုက translator ။

compiler နဲ ့ translator ဘာကွာသလဲဆိုရင် compiler လို့ ပြောတာက term က နည်းနည်းရှုပ်

တယ်၊ compiler နဲ ့ interpreter နဲ ့ နှစ်မျ ိုးတွဲပြီးတော့ compiler လို့ ခေါ်တာကရှိ သေးတယ်။

compiler ရဲ ့ သဘောက input က source code ယူတယ်၊ output က machine code ဒါမှ

မဟုတ် intermediate code ဖြစ် တယ်။ ဥပမာ C compiler ဆိုရင် C source code ယူတယ်

exe ထုတ်တယ်။ Java compiler သည် java source code ကိုယူတယ် ထုတ်တာက java

byte code ကိုထုတ်တယ်။ ဆိုလခ


ို ျင်တာက ဝင်လာတာသည် High level programming

language ဖြစ် တယ် ထွက်တာသည် machine code /byte code ကိုထုတ်တာ။ ဒီ term ကို

compiler လို့ ခေါ်တယ်။ Translator ဆိုတဲ့ term က technically အရ translate လုပ်တယ်

ပေါ၊့ ဆိုလတ
ို ာက ဥပမာ ဗမာစကားကနေပြီ းတော့ ကိုးရီ းယား၊ တရု တ်တု့ ိကို translate လုပ်သလို

ပေါ၊့ translate လုပ်တယ်ဆိုတဲ့နေရာမှာ ဗမာစကားကလည်း High level ပဲ ၊ ကိုးရီ းယားတရု တ်

ကလည်း High level ပဲ ၊ ဥပမာ CoffeeScript ကို translate လုပ်ရင် JavaScript ရတယ်။ အဲ ့

တော့ Javascript ကို browser မှာ run လို့ ရတယ်။ CoffeeScript ကို browser မှာ run လို့ မရ

ဘူး၊ မြင်သာအောင်ပြောရရင် Typescript ပေါ ့၊ Typescript သည် Javascript ကို type

information တွေထည့်ထားတာ၊ သူ့ ကို ဘယ်လို implement လုပ်ထားသလဲဆိုရင် Translation

approach နဲလု
့ ပ်ထားတာ၊ Typescript ကိုယူတယ် Typescript သည် High level

programming language ဖြစ် တယ်၊ Output ကကျတော့လည်း another programming

language တစ် ခုဖြစ် တယ်။ Typescript compiler ကနေ Javascript ကိုထုတ်ပေးတယ် ပေါ ့၊

အဲ တေ
့ ာ့ Translator ဆိုတဲ့ အဓိ ပ္ပါယ်သည် Input က High level language ယူတယ်၊ Output

ကလည်း High level language ပဲ ထွက်တယ်။ နောက်တစ် ခုက Babel ပေါ ့၊ Javascript မှာဆို

ရင် ES6 တို့ လိမ


ု ျ ိုးရှိ တယ်၊ တချ ို့ browser တွေမှာ ES5 ပဲ ရတယ်၊ အဲ တေ
့ ာ့ ES6 မှာပါတဲ ့

feature ကို ES5 မှာရအောင် ဘယ်လပ


ု ် လပ
ု ် သလဲဆိုရင် ES5 programming construct တွေနဲ ့
ပြန်ပြီးတော့ implement လုပ်ရတယ်။ အဲ လ
့ မ
ို ျ ိုး High level language တစ် ခုကနေ another

language တစ် ခုထုတ်ပေးတာကို Translation approach လို့ ခေါ်တယ်။

speed မှာတော့ compiler သုံးတဲကေ


့ ာင်တွေကအမြန်ဆုံးပေါ ့၊ သူ့ ထက်မြန်တာကတော့ C

့ ာပြီ းသွားတော့ Hybrid လုပ်တဲကေ


တို့ C++ တို့ ကအမြန်ဆုံးပေါ၊့ အဲ တ ့ ာင်တွေက သူတု့ ိထက်ပိုမြန်

တယ်။ scripting language တွေသည် performance အရအနှေးဆုံး၊ PHP , Python , Ruby

တို့ သည် နှေးတယ်။ နှေးတော့ဘာလုပ်ရသလဲဆိုလဲ interpreter တွေသည် JIT လိကေ


ု ာင်မျ ိုးသုံး

လာရတယ်၊ Just In Time compilation ပေါ ့။ နောက် Swift လိကေ


ု ာင်သည် C compiler

approach ထဲမှာပါတယ်၊ ဒါပေမယ့်သူရဲ့ implementation သည် တစ် မျ ိုးထူးဆန်းတယ်၊ အဲ ့

တာဘာလဲဆိုတော့ သူက LLVM ကိုသုံးတယ်၊ compiler တွေမှာ frontend နဲ backend


့ နဲဆိ
့ ုပြီးရှိ

တယ်၊ frontend ကဘာလုပ်သလဲဆိုရင် programming language input ကိုယူတယ်၊

syntax စစ် တာတွေ error စစ် တာတွေ၊ parse tree ထုတ်တာတွေလုပ်တယ်ပေါ ့၊ အဲ တ


့ ာပြီ းသွား

ရင် parse tree ကနေ code generation လုပ်ရတယ်။ code generation လုပ်တဲအ
့ ပိုင်းကို

backend လို့ ခေါ်တယ်။ အဲ တေ


့ ာ့ LLVM မှာ frontend တွေအများကြီးဆောက်လက
ို ်တယ်။

ဆောက်ပြီးတော့ ဘာလုပ်လရသလဲ
ို့ ဆိုရင် backend က LLVM ကိုယူသုံးလိက
ု ်လရတယ်
ို့ ၊ အဲ လ
့ ို

့ ပ်တဲ့ approach တွေလည်းရှိ တယ်။ programming language implementation


LLVM နဲလု

တွေကလည်း စမုံတန
ု း် အောင်များတယ် :3။

7.1 Compilation
Compiler ကို နောက်တစ် ပိုင်းကျမှ ကျွန်တော့် compiler နဲ မြင်
့ သာအောင် ရှ င်းပြပေးမယ်၊

အခု example လောက်ပြောပြမယ်၊ compiler မှာ lexical analyzer ရှိ တယ်၊ သူကဘာလုပ်

သလဲဆိုရင် ဥပမာ int a; ဆိုပြီးကြေညာတယ်ဆိုပါစို့ ၊ သူက int , a , ; ဆိုပြီး အပိုင်းလေးတွေ

ဖြတ်တာကို token ခွဲ တယ်လို့ခေါ်တယ်၊ natural language မှာလုပ်သလိုပဲ ဘယ်ဟာက စာလုံး

ဘယ်ဟာက word ခွဲ တာပေါ၊့ အဲ လ


့ ို tokenization လုပ်တာကို lexical analyzer လို့ ခေါ်တယ်။

Lexical ကနေဘာရသလဲဆိုရင် syntax analyzer ပေါ ့၊ syntax analyzer ကျဘာလုပ်သလဲဆို

တော့ grammar စစ် ပေးတာ၊ ဥပမာဆိုပါစို့ I go to school ပေါ ့ I က subject , go က verb ,

to school က prepositional phrase ပေါ ့၊ အဲ လ ို ဲွ ပေးတာ၊ အဲ တေ


့ ခ ့ ာ့ syntax analyzer ကြော

င့်ဘာရသလဲဆိုရင် programming မှာ error တက်တာသည် syntax analyzer ကပြပေးတာ။

Lexical analyzer ရော Syntax analyzer ရောဘာလုပ်ရသလဲဆိုရင် Symbol table ထဲကို


data ထည့်ရတယ်။ အစောက int a; မှာ a သသည် symbol ဖြစ် တယ် variable ပေါ ့၊ variable

name သည် a ပေါ၊့ သူ့ ရဲ့ type က integer ဖြစ် တယ်၊ အဲ တ


့ ာတွေကို ဘယ်မှာသုံးသလဲဆိုရင်

type checking လုပ်တဲအ


့ ချ ိန်မှာ symbol table ထဲနေခေါ် ပြီ းသုံးရတယ်၊ ဒီ method ကဘာ

return ပေးသလဲ ဘာ parameter တွေထည့်ရသလဲဆိုတာတွေသည် symbol table ထဲမှာထည့်

တယ်။ syntax analyzer ကနေထုတ်ရင် parse tree ရတယ်၊ parse tree ကနေ code

generation လုပ်တယ်။ နောက်တစ် ပိုင်းမှ ကျွန်တော့် compiler နဲ ့ သေချာရှ င်းပြမယ်။ code

generator ကဘာလုပ်သလဲဆိုတော့ intermediate code or machine-executable ဖြစ် တဲ့

code ကိုထုတ်တယ်ပေါ။့ အဲ ့ code ကို run တာပေါ ့။ အဲ တ


့ ာအပြင် optimization လည်းလုပ်

သေးတယ်၊ program ကို compiler က ပိုမြန်အောင်လပ


ု ် ပေးတာကို optimization လုပ်တယ်လို့

ခေါ်တယ်။

7.2 Pure Interpretation


Pure interpretation ကိုဘယ်ကောင်တွေသုံးသလဲဆိုရင် အရင်PHP တို့ Python တို့

Ruby တို့ သုံးတယ်။ Pure interpretation ဆိုတဲအ


့ ဓိ ပ္ပါယ်က PHP source code ဖတ်တယ်၊

Python source code ဖတ်တယ်၊ PHP interpretor က C နဲရေးထားတာ။


့ Interpretor ကနေ

instruction တွေကိုတစ် ကြောင်းချင်း run သွားတာ၊ တစ် ကြောင်းချင်း run တယ်ဆိုတဲအ


့ ဓိ ပ္ပါယ်

က လူတွေထင်နေသလိသ
ု ာမန်အတိင
ု ်း source code ထဲက programming statement တစ်

ကြောင်းချင်း မဟုတ်ဘူး။ bycode instruction တစ် ကြောင်းချင်းကို လုပ်တာ၊ အသေးစိတ်ကို

အောက်က link တွေမှာ ဝင်ဖတ်ကြည့်လရတယ်


ို့ ။

A Practical Theory of Programming Languages Series: Part 3


Implementation techniques for programming language
(https://www.facebook.com/thet.khine.587/posts/10215262432833649
)

How to build your own programming


(https://www.facebook.com/thet.khine.587/posts/10211820102897552
)
Runtime for a dynamic language(Gentle introduction to CPython)
(https://www.facebook.com/thet.khine.587/posts/
10206946588502738)

7.3 Hybrid Implementation


Hybrid implementation ဆိုတာ Java မှာသုံးသွားတဲ ့ approach လိမ
ု ျ ိုးပေါ ့။ Java

compiler ကနေ Java byte code ထုတ်တယ်၊ အဲ ဒ


့ ီ byte code သည် တစ် ခါတည်း

တန်းrun လို့ ရလားဆိုရင် မရဘူး၊ JVM နဲ ပြန်


့ run ရတယ်။ အဲ ဒ
့ ီလို byte code တွေကို ထုတ်ကြည့်

လို့ ရတယ်။ နောက် C# မှာဆို CLR ပေါ။့ C# ဆိုရင် language specification ရှိ တဲအ
့ တွက် ဘာ

တွေပိုကောင်းသွားလဲဆိုရင် နောက်ပိုင်း mac , linux တို့မှာလည်း run လို့ ရတယ်၊ ဆိုလတ


ို ာက

specification ရှိ လို့ အဲ လ


့ ို implement လုပ်ဖို့အဆင်ပြေသွားတာပေါ ့။ CLR ဆိုတာက

Common Language Runtime ပေါ၊့ C# ရဲ ့ design ကဘာကိုယူလဲဆိုရင် များသောအားဖြင့်

Java Design ကိုပိုကောင်းအောင်လပ


ု ် လက
ို ်တာပေါ ့။ CLR မှာ ဆိုရင် MSIL (Microsoft

intermediate language)ထုတ်တယ်၊ VB .Net လိကေ


ု ာင်မျ ိုးလည်း အဲ ဒ
့ ီ MSIL ပဲ ထုတ်တယ်။

MSIL အကုနသ
် ည် CLR မှာ run လို့ ရတယ်။ အဲ တေ
့ ာ့ ဘာကောင်းလဲလို့မေးရင် ဥပမာ VB .Net နဲ ့

ရေးထားတဲ ့ module တစ် ခုကို C# ကနေလည်းယူသုံးလို့ ရတယ်၊ အဲ တ


့ ာသည် CLR အတွက် တူညီ

တဲ ့ MSIL code ကိုထုတ်တဲအ


့ တွက်ဖြစ် တယ်။ Java လို language တစ် ခုတည်းမဟုတ်ဘဲအများ

ကြီးပြုံပီ းသုံးလို့ ရတယ်။ အဲ တေ


့ ာ့ programmer တစ် ယောက်က VB .Net နဲရေး
့ နောက်တစ်

ယောက်က C# ရေးလည်း Ok တယ်၊ ရေးတော့မရေးသင့်ဘူးပေါ ့။ ဥပမာ ပြောပြတာ။

Enterprise အရမ်းကြီးလာတဲအ
့ ခါကျရင် ဒါသည် make sense ဖြစ် တာပေါ ့။ သုံးချင်လည်းသုံး

လို့ ရတာပေါ။့ ဒါသည် Hybrid implementation အကြောင်းပေါ ့။ VM တွေအကြောင်းဆက် ပြော

ရင်လည်း အရှ ည်ကြီးဆိုတော့ JVM အကြောင်း ရေးထားတဲ ့ series တစ် ခုရှိတယ် ဖတ် ကြည့်ပေါ ့။

How does JVM work series 1-9


(https://www.facebook.com/thet.khine.587/posts/10205507889856171)

PHP , Python byte code တွေကိုဝါသနာပါရင် ထုတ်ကြည့်လရတယ်


ို့ ၊ ဆရာကြီးလို့ လာပြောတဲသ
့ ူ

ရှိ ရင် မင်းရေးထားတဲ ့ code က ဘာbyte code တွေထွက်သွားလဲမေးကြည့်ပေါ ့ ၊ သိတယ်ဆိုရင်ဒါ

language ရဲ ့ semantics ကို ကောင်းကောင်းနားလည်တဲသ


့ ူပေါ ့။
7.4 Preprocessor
Preprocessor ဆိုတာဘာလဲဆိုရင် C လို language မှာဆိုရင် preprocessor သုံးတယ်၊

GO မှာဆိုရင် Preprocessor မပါဘူး၊ Preprocessor ဆိုတာ ဥပမာ #နဲစရေးတဲ


့ ဟ
့ ာလိပေ
ု ါ ့။

(“#include ‘myLib.h’ “)။ preprocessor ဆိုတာ တကယ်တော့ regular expression သုံး

ပြီ း replace လုပ်တဲ့ ပုံစံပဲ၊ source code ကနေ replace လုပ်တာပေါ ့ ၊ C မှာ #define

max(A,B) ((A)>(B)?(A):(B)) မှာဆိုရင် ဘယ်ဘက်က max(A,B)ဆိုတဲကေ


့ ာင်တွေ့တိင
ု ်း

ညာဘက်က ရှိ တဲကေ


့ ဲ့
ာင်နအစားထိ ုးလိက
ု ်တာပေါ ့။ အဲ လ
့ လ
ို ပ
ု ် တာကို preprocessor လို့ ခေါ်တယ်။

preprocessor က compiler ကမလုပ်ခင်မှာ သူကအရင်လုပ်တယ်။ C မှာရှိ တယ် C++ မှာရှိ

တယ်။ GO မှာတော့ preprocessor မပါဘူး။ အဲ တ


့ ာကို နောက်တစ် ပိုင်းမှာ detail ပြန်ပြမယ်။

Practical Theory of Programming Languages Part 3

အရင်ပြောခဲ့ တဲ့ စာအုပ်ထဲမှာက compiler တွေဘယ်လိရေ


ု းသလဲဆိုတာမပါဘူး၊

Programming language တွေအကြောင်းပဲ ပါတာပေါ ့၊compiler တွေဘယ်လအ


ို လုပ်လပ
ု ် သလဲ

ဘယ်လိရေ
ု းသလဲဆိုတာကျတော့another topic ဖြစ် သွားပြီ ။ compiler တွေဘယ်လိဆေ
ု ာက်

သလဲဆိုတဲအ
့ ကြောင်းပေါ၊့ compiler ဆောက်တဲက
့ ိစ္စမှာကျတော့programming language

တွေက compiler တွေနဲပဲ့ ရေးတာမဟုတ်ဘူး တခြားဟာတွေလိသေ


ု းတယ်၊ ဥပမာ virtual

machine တို့ ဘာတို့ပေါ။့ အဲ ကေ


့ ာင်တွေအကုနလ
် ုံးသည်လည်း compiler technology ထဲမှာပါ

ပေမယ့်တချ ို့ virtual machine concept တွေကျတော့သက်သက်လပ


ု ် ရတာတွေလည်း ရှိ တယ်

အဲ တေ
့ ာ့ဒီနေရှ့ င်းမှာကဘာလဲဆိုတော့ programming language တွေကိုဘယ်လတ
ို ည်ဆောက်

ထားသလဲ ဘယ်လို approach တွေပါလဲပေါ ့၊ အဲ ့ topic ကြီးကအရမ် းကျယ်လန


ွ း် အားကြီးတယ်၊

ကျယ်လန
ွ း် အားကြီးတော့ ပြဿနာကဘာလဲဆိုတော့တစ် ခုချင်းပိုင်းပြီ းတော့ ရှ င်းပြရတယ်၊

အကုနလ
် ုံးကို detail ပြောပြနိင
ု ်သလားဆိုတော့ time အရရယ် audience ရဲ ့ background အရ

ဒါကအဆင်မပြေဘူး။ ဒါပေမယ့် ကြိုးစားပြီ းတော့ general concept ပေါ ့၊ ဘာတွေပါသွားတယ်

ဘယ်လအ
ို လုပ်လပ
ု ် သွားတယ်ဆိုတာမျ ိုးကိုရှင်းပြမယ်၊ အဲ လ
့ ိုရှင်းပြခြင်းအားဖြင့် ဘာတွေနားလည်

လာမလဲဆိုတော့ ကိုယ့်သုံးနေတဲ ့ programming language ကိုဘယ်လတ


ို ည်ဆောက်ထားတယ်

ဘယ်လိပြ
ု ဿနာတွေရှိ တယ်ဆိုတာတွေကို အတွင်းကျကျနားလည်သွားမှာပေါ ့။ အခု ကတော့ ကိုယ်

ကျောင်းတုနး် ကလုပ်ခဲ့ Compiler နဲတွ


့ ဲရှင်းပြပေးမယ်၊ ကွနပ
် ျူတာတက္ကသိုလ်တက်ဖူးတဲ ့
ကျောင်းသားတွေသည် နားလည်လိမ့်မယ်။ ဒါတွေပြီ းရင်တော့ တခု ခုတော့ရမှာပါ :3 (နောင်တရ

တာတို့ စိ တ်ဓာတ်ကျတာတို့ ဖြစ် ရင်ဖြစ် မယ်) နောက်တာပါ နားမလည်လည်း ငါက ဒီဟာတွေလိက


ု ်

လေ့လာဖို့ လိသေ
ု းတယ် ဒီလန
ို ယ်ပယ်မှာ ဒီလအ
ို ကြောင်းအရာတွေရှိ သေးတယ်ဆိုတာမျ ိုးသိသွား

ရင် မဆိုးဘူးပေါ။့ Known Unknown ပေါ ့ မသိသေးတာတွေဘာတွေရှိ လဲဆိုတာသိလာမယ်။

programming language တွေဆိုတာလည်း program တွေရေးထားတာပါပဲ ။

programming language တွေရအောင် program ရေးထားတာပေါ ့။ အဲ ့ program ကိုဘာလို့

ခေါ်သလဲဆိုတော့ ခြုံငုံပြီးပြောရရင် compiler ရယ် interpreter ရယ်ဆိုပြီးခေါ် ကြတယ်။

compiler ရယ် interpreter ရယ်ပေါင်းပြီ းတော့ technical term အရ translator လို့ ခေါ် ကြ

တာတွေလည်းရှိ တယ်။ compiler တို့ interpreter တို့ပြောတဲ ့ အခါကျရင် compiler ဖြစ် ဖြစ်

interpreter ဖြစ် ဖြစ် ဘာလုပ်တာလဲဆိုရင် source program ရှိ တယ် Java, Javascript , PHP

ဒါတွေက source program ပေါ၊့ ပြီ းရင်သူကဘာထုတ်ပေးသလဲဆိုတော့ intermediate byte

code သို့ မဟုတ် native code ဖြစ် တဲ့ exe code ထုတ်ပေးတယ် အဲ တ
့ ာမျ ိုးကို ကျွန်တော် တို့က

translator လို့ ခေါ်တာပေါ။့ translator ဆိုတဲ့ term ထဲမှာ compiler နဲ ့ interpreter ဆိုတာပါ

ပြီ းသားပေါ။့

programming language လုပ်တဲ့ approach ကဘယ်နှစ်မျ ိုးရှိ လဲဆိုတော့ယေဘူယျ

အားဖြင့် compiler , interpreter , virtual machine , transpiler , JIT/AOT compiler ဒီ

လို approach တွေပါတယ်၊ များသောအားဖြင့်သိတာက ကျွန်တော် တု့ ိက compiler ,

interpreter သိတယ်၊ နောက်တစ် ခုက vm ပေါ ့ vm ကျတော့ နောက်ပိုင်း language တွေမှာ vm

နဲ ့ run လာတယ်၊ ဥပမာ Java ပါတယ် CLR (Common Language Runtime) အောက်က

family တွေပါတယ် CLR ဆိုတာ ဘာလဲဆိုတော့ Microsoft ဘက်က C# တို့ VB.net တို့ အဲ ဒ
့ ီ

် ုံးက CLR ဆိုတဲကေ


.Net family တွေအကုနလ ့ ာင်အောက်မှာ run လို့ ရတယ်။ နောက် transpiler

ပေါ ့ transpiler ဆိုတာဘာလဲဆိုတော့ high level language တစ် ခုကနေ တခြား သူ့ လောက်မ

မြင့် language တစ် ခုကိုပြောင်းလိက


ု ်တယ် အဲ တ
့ ာကို transpiler လို့ ခေါ်တယ်။ ဥပမာ ဘယ်မှာ

သုံးလဲဆိုရင် Typescript လိကေ


ု ာင်မျ ိုးမှာသုံးတယ်၊ နောက်တစ် ခုက JIT/AOT တို့ အဲ ကေ
့ ာင်တွေ

ကပြောရမယ်ဆိုရင် နောက်ပိုင်း modern programming language တွေမှာပါလာတယ်။ အဲ ့

တော့ JIT ဆိုတာဘာလဲဆိုရင် ငါ ့ programming က JIT ပေးတယ် Just-In-Time ဆိုတာဘယ်လို

မျ ိုးလဲ ဘာလုပ်တာလဲ နောက် Angular ဆိုရင် AOT နဲသွ


့ ားတယ်ဘာကြောင့် AOT နဲသွ
့ ားတာလဲ
AOT နဲသွ
့ ားတော့ ဘာတွေပိုကောင်းလဲဆိုတာ ကိုယ်ကဒါကိုသိလရတယ်
ို့ ။ သိလို့ရှိ ရင် ဒါကို apply

လုပ်လရတယ်
ို့ ။

Compiler
့ ခါကျရင် High level ကနေ low level ဖြစ် တဲ့ intermediate
Compiler လို့ ပြောတဲအ

code ဒါမှမဟုတ် native executable code ထုတ်ပေးတာကို compiler လို့ ခေါ်တယ်။ ဥပမာ

များသောအားဖြင့်သုံးတာက သိသာအောင်ပြရရင် C/C++ compiler ပေါ ့။ C/C++

compiler ဆိုရင် ကျွန်တော် တု့ ိက C နဲရေးလိ


့ က ု ်တယ်ထွက်လာရင် native executable ထွက်

လာတယ်၊ တကယ်ကတော့ compiler ကနေ native executable တန်းထွက်လာတာတော့

မဟုတ်ဘူး ကြားထဲမှာ analysis လုပ်တာတွေ object code ထုတ်တာတွေလုပ်ရသေးတယ်

object code သည် ဥပမာ assembly လိကေ


ု ာင်မျ ိုးပေါ ့ link လုပ်ရတဲကေ
့ ာင်ပေါ ့၊ object code

ု ဲ compiler ကထုတ်တဲ့
ကနေမှတစ် ဆင့် executable code ထုတ်ရတာပေါ ့၊ အရင်ပြောခဲ့ သလိပ

code သည် native platform မှာတိက


ု ်ရု ိ က် run လို့ ရတယ်။ အဲ တေ
့ ာ့ native platform ဆိုတာ

ဘာလဲဆိုရင် operating system + hardware လို့ ပြောရတယ် ဥပမာ windows + intel

cpu ပေါ ့ အဲ ဒ
့ ီလမ
ို ျ ိုးပေါ၊့ CPU တွေကလည်း မျ ိုးစုံရှိတယ် အဲ ဒ
့ ီပေါ်မူတည်ပြီးတော့ instruction

ို ာက Intel CPU ကနားလည်တဲ့ instruction set နဲ intel


set တွေကွာသွားတယ်၊ ဆိုလတ ့ မဟုတ်

့ ခြား CPU တခု က နားလည်တဲ့ instruction set ကမတူဘူး၊ နောက်တခု က platform ကမ


တဲတ

တူးဘူး၊ ဥပမာ linux , mac, windows ပေါ ့။ အဲ လ


့ မ
ို တူတော့ windows ပေါ်မှာ build လုပ်ထား

တဲ ့ ကောင်ကို တခြား linux, windows ပေါ်မှာ run လို့ မရဘူး။ ဘာကြောင့်လဲဆိုတော့ compiler

ထဲမှာက system call တွေပါတယ်၊ system call ဆိုတာဘာလဲဆိုတော့ operating system

ကိုခေါ်တဲ ့ api တွေကို system call လို့ ခေါ်တယ်။ ဥပမာ mac မှာ run ဖို့ လုပ်ထားတဲ ့ ကောင်

သည် mac မှာခေါ်တဲ ့ system call တွေက တခြား platform တွေမှာ မရှိ တဲအ
့ တွက်ခေါ်လို့ မရ

တော့ အလုပ်မလုပ်နင
ုိ ်ဘူး။ အဲ တေ
့ ာ့ C/C++ တို့သည် platform တိင
ု ်းမှာ run လို့ မရဘူး၊ အဲ တေ
့ ာ့

ဟိဘ
ု က် platform မှာသွား run ချင်ရင် ဟိဘ
ု က် platform မှာ ပြန်ပြီးတော့ build လုပ်ရတယ်၊

အဲ ပြ
့ ဿနာရှိ တယ်။ အဲ ပြ
့ ဿနာကို ဖြေရှ င်းဖို့ အတွက် Java လိကေ
ု ာင်မျ ိုးက ဘယ်လလ
ို ပ
ု ် လက
ို ်

သလဲဆိုတော့ Java compiler ကနေ compile လုပ်လက


ို ်ရင် Byte code ထွက်တယ် .class ဖိုင်

တွေပေါ၊့ အဲ ့ byte code ကို native platform ပေါ်မှာ run လို့ မရဘူး အဲ အ
့ တွက်ဘာရှိ ဖို့လိသ
ု လဲ

ဆိုရင် virtual machine ရှိ ဖို့လိတ


ု ယ် ၊ native platform ပေါ်မှာ run ပေးတဲ ့ software
layer ပေါ။့ အဲ ဒ
့ ီ virtual machine သည် software လို့ ပြောလို့ ရသလားဆိုရင် mostly သည်

ပြောလို့ ရတယ်၊ ဒါပေမယ့် hardware မှာလည်း hardware virtual machine လည်းရှိ နင


ုိ ်

တယ်။ Virtual machine လို့ ပြောရင် computer science မှာ term နှစ်ခုရှိတယ်၊ ဘာဖြစ် လို့

ပြောပြရသလဲဆိုရင် ကျောင်းတုနး် က ကျွန်တော့်compiler ကိုကြည့်တဲဆ


့ ရာမကြီးက သူက

distributed system တွေဘာတွေသင်တာ၊ သူကဘာပြောသလဲဆိုရင် vm ကမင်းကိုယ်တိင


ု ်ရေး

ရမယ်လို့ပြောတယ်၊ အမှနက
် သူလည်း လိက ုိ ်ဘူး၊ သူရဲ့ထင်မြင်ယူဆချက်နဘာလို့
ု ်မစစ်နင ဲ့ ပြော

ရသလဲဆိုရင် သူ ပြောတဲ ့ vm က operating system တွေရဲ ့ vm ကိုပြောတာ ဥပမာ vitual box

တို့ vmware တို့လိပေ


ု ါ။့ Microsoft ဘက်မှာဆိုရင် vm လို့ မခေါ် ကြဘူး၊ Common Language

ု ဲ အတူတပ
Runtime လို့ ခေါ် ကြတယ်။ ဒါပေမယ့် concept အရဆိုရင် virtual machine လိပ ူ ဲ

ဘာကြောင့် vm လို့ ခေါ်သလဲဆိုရင် physical machine လိမ


ု ျ ိုးတုပြီးတော့ လုပ်နင
ုိ ်တယ် byte

ု ်တဲအ
code or intermediate representation ကိုထုတ်ပေးနိင ့ တွက် အဲ တ
့ ာကို virtual

machine လို့ ခေါ်တယ်။ java compiler နဲ ့ C compiler ဘာကွာလဲဆိုရင် C compiler သည်

end of process မှာ native executable code ကိုထုတ်လက


ို ်တယ်၊ ဒါပေမယ့် Java or C#

compiler မှာဆိုရင် အဲ ကေ
့ ာင်တွေသည် native executable ကိုမထုတ်ဘူး၊ မထုတ်နင
ုိ ်တာ

မဟုတ်ဘူး၊ သူတု့ ိ design အရမထုတ်တာ။ byte code ထုတ်လက


ို ်တယ် Java မှာဆိုရင် byte

code လို့ ခေါ်တယ် microsoft ဘက်မှာကျတော့ msil လို့ ခေါ်တယ်၊ microsoft intermediate

language ပေါ၊့ အဲ ကေ
့ ာင်တွေသည် operating system ပေါ်မှာ တန်းrun လို့ ရသလားဆိုရရင်

ဥပမာ exe လိမ


ု ျ ိုးတန်းrun လို့ မရဘူး သူက CLR ဆိုတာလိတ
ု ယ်၊ JVM ဆိုရင် java language

တစ် ခုတည်းအတွက်ရေးထားတာ အဲ တေ
့ ာ့ဘာပြဿနာတက်သလဲဆိုရင် Java သည် statically

typed language ဖြစ် တယ်၊ အဲ တေ


့ ာ့ JVM ပေါ်မှာ dynamically typed language တွေကို

implement လုပ်တဲအ
့ ခါကျရင်ပြဿနာတက်တယ် ဥပမာ Jython လိကေ
ု ာင်ပေါ ့ JVM ရဲ ့

instruction set ကိုယ်တိင


ု ်မှာ dynamic language feature တွေအတွက် instruction set ပါ

မလာဘူး၊ ဒါပေမယ့် Microsoft ဘက်က CLR ကျတော့ dynamic instruction set တွေပါ ပါ

တယ်၊ အဲ တေ
့ ာ့ CLR သည် multi programming language တွေအတွက်ရေးထားသော VM

လို့ ပြောလို့ ရတယ် နောက်တစ် ခုကဘာလဲဆိုရင် extensible လုပ်လရတယ်


ို့ ို ာက သူရဲ့
ဆိုလတ

common language runtime မှာကို extensible mechanism တွေ data instruction တွေ

ပေးလို့ ရတယ် အဲ တေ
့ ာ့ သူ့ ရဲ့ specification ကိုမပျောက်စေဘဲ CLR ကို upgrade လုပ်လရတယ်
ို့
Java မှာဆိုရင် အဲ လ
့ လ
ို ပ
ု ် လမရဘူ
ို့ း၊ jdk 7 လောက်မှာ lambda တွေပါလာတော့မှာ virtual call နဲ ့

invoke dynamic ဆိုတဲ့ opcode တစ် ခုကိုထပ် ထုတ်ပေးရတယ်၊ အဲ တေ


့ ာ့ compiler ဆိုတဲ့

အဓိ ပ္ပါယ်ကို အကြမ် းဖျင်းတော့ သဘောပေါက်လောက်ပြီ၊ byte code မှာ ဘာတွေပါသလဲဆိုရင်

assembly လိကေ
ု ာင်မျ ိုးတွေကို virtually ပေးထားတာ၊ ဥပမာ load, store, pop, getfield

တို့ assignment လုပ်တာတို့ method call ခေါ်တာတို့ဒါတွေပါတယ်၊ နောက်ပြီး byte code ထဲ

မှာ constant pool ဆိုတာပါသေးတယ်၊ constant pool ဆိုတာ ဘာလဲဆိုရင် program တစ် ခု

ကနောက် program တစ် ခုကိုခေါ်ရင် ဒါမှမဟုတ် library တစ် ခုကိုခေါ်ရင် အဲ တ


့ ာတွေကိုမှတ်ထား

တာမျ ိုးကို constant pool လို့ ခေါ်တာ။ meta data + instruction တွေပါတာပေါ ့။

compiler တွေကိုဘာကြောင့်သုံးလဲဆိုရင် high performance ဖြစ် ချင်တယ် exe code

ထုတ်ချင်တယ်ဆိုရင် compiler ကိုသုံးတယ်၊ နောက်တစ် ခုက static programming

language ထုတ်ဖို့အတွက်၊ static language တွေရဲ ့ characteristic ကိုတစ် ချက်ရှင်းပြရရင်

type ပါတယ်အဲ့type ကို runtime မှာ ပြောင်းလို့ မရဘူး၊ compile time မှာ type error တွေကို

စစ် ပေးနိင
ု ်တယ်၊အများအားဖြင့် statically typed language တွေသည် compiler နဲ ့

implement လုပ်တယ်၊ဒါကသူ့ သဘောသဘာဝအရပေါ ့။

Interpreter
သီအိုရီအရတော့ dynamically typed language တွေက ဥပမာ Python, Ruby, PHP,

Javascript တို့လိကေ
ု ာင်တွေကို compiler နဲရေးလို့
့ မရဘူးလားဆိုရင် ရေးလို့ ရတယ်၊ ဒါပေမယ့်

တကယ် implement လုပ်ရင် တော် တော် ခက်တယ်၊ အကုနလ


် က
ို ်စစ် ရတော့မှာဖြစ် တယ်

efficient code မဖြစ် ဘူး၊ အဲ ဒ


့ ါကြောင့် interpreter ကိုသုံးတယ်၊ Interpreter ကဘယ်လလ
ို ပ
ု ်

သလဲဆိုတော့ program ကို parse လုပ်တယ် runtime မှာ byte code ကို cache လုပ်တယ်၊

လူတွေထင်တာက Javascript တို့ python တို့သည် line by line run တယ်လထင်


ို့ ကြတာ၊ အဲ ့

တာသည် လုံးဝမှားတယ်၊ ဘယ် programming language မှ line by line မ run နိင


ု ်ဘူး၊

တကယ်က interpreter ကနေ code တွေကိုsimplify လုပ်ချတယ်၊ ရှ င်းလိက


ု ်တာပေါ ့၊ ရှ င်းတယ်

ဆိုတာကစကားအဖြစ် ပြောတာပေါ၊ကြားထဲ
့ မှာ process တွေအများကြီးလုပ်ရတယ်၊ အဲ ဒ
့ ီကနေ

byte code ထွက်လာတယ်အဲဒ


့ ီbyte code ကိုမှ interpret လုပ်တယ်၊ PHP မှာဆိုPcode ဆိုတာ

ရှိ တယ် Python မှာလည်း python byte code ဆိုတာရှိ တယ်၊ interpreter ကနေ ဖိုင်တစ် ဖိုင်

ို ်တယ်အဲဖ
ကိုဖတ်လက ့ ိုင်ကိုparse လုပ်တယ်၊ language analysis တွေလုပ်မယ်၊ syntax
analysis တွေလုပ်မယ် လုပ်ပြီးရင် byte code ထုတ်လက
ို ်တယ်၊ byte code ထုတ်ပြီးတော့

မှinterpret လုပ်တာသည် ပိုပြီးတော့အဆင်ပြေတယ်၊ ထွက်လာတဲ ့ byte code မှာ byte code

instruction တွေရှိ တယ်၊ အဲ လ


့ ို instruction တွေကို runtime မှာ evaluate လုပ်တာကို

interpret လုပ်တယ်လို့ခေါ်တယ်၊ interpret ကိုdynamic type ရှိ တဲ့ language တွေမှာသုံး

တယ်၊ dynamic language ဆိုတာ runtime မှာ type ကိုပြောင်းလို့ ရသောlangauge ဖြစ်

တယ်။

Virtual Machine
တချ ို့approach တွေသည် hybrid ကိုသုံးတယ် ဥပမာ Java လိကေ
ု ာင်မျ ိုးပေါ ့။ နောက်

ု ်တယ် ဥပမာ int a; ဆိုတဲ့


Go, C တို့ သည် platform မတူရင် semantics တွေပြောင်းနိင

ု ်းအတွက်မတူဘူး a သည် 32bit ဖြစ် တဲ့ operating system


semantics သည် platform တိင

မှာဆိုရင် 32bit ပဲ 4byte ပဲ ပေါ ့ 64bit ဖြစ် တဲ့ platform မှာဆိုရင်8byte ရမယ်ပေါ ့။

language တစ် ခုတည်းရဲ ့ int a; တစ် ခုတည်းတောင်မှ 4byte ယူမှာလား8byte ယူမှာလားဆိုတာ

platform ပေါ်မှာမူတည်တယ်။ အဲ တေ
့ ာ့program တွေက pop လုပ်ရတာခက်တယ်၊အဲ တေ
့ ာ့

hybrid ဖြစ် တဲကေ


့ ာင်တွေလုပ်လက
ို ်တယ်၊ အဲ တေ
့ ာ့ program တွေသည် semantics တွေချ ိန်း

စရာမလိတေ
ု ာ့ဘဲန ဲ ့ run လို့ ရသွားတယ်။ အဲ တေ
့ ာ့သက်သာတယ်ပဲပြောရမှာပေါ ့။ အခု

နောက်ပိုင်းplatform independent ဖြစ် တဲကေ


့ ာင်တွေကိုအသုံးများလာတော့ C လိကေ
ု ာင်မျ ိုးမ

သုံးဖူးရင် pop လုပ်ရတဲ ့ ဒုက္ခကိုသိမှာမဟုတ်ဘူး။ ဒါသည် Virtual machine တွေရဲ ့အကြောင်းပဲ

ပေါ။့

Transpiler
Transpiler ဆိုတဲအ
့ ဓိ ပ္ပါယ်က high level programming language တစ် ခုကို

input ယူတယ် တခြားhigh level programming language တစ် ခုပြန်ထုတ်ပေးတယ်၊ ဥပမာ

Typescript ဆိုရင် Javascript ကို type ထည့်ထားတာ အဲ ဒ


့ ီမှာဆိုရင် input အနေနဲ ့ Typescript

ကိုယူတယ်output က javascript ထုတ်ပေးတယ်၊ အဲ တေ


့ ာ့typescript သည် browser မှာ

တန်းrun လို့ ရသလားဆိုရင်မရဘူး၊ typescript compiler ကနေcompile လုပ်တော့

မှjavascript code ထွက်လာတယ်၊ javascript code ကိုမှbrowser မှာrun ရတယ်၊ နောက်

ES6 ပေါ၊့ browser မှာက ES5 ပဲ ရှိတယ် ES6 မရှိ ဘူးဆိုပါစို့ အဲ တ


့ ာဆိုရင် အစောက်

က transpiler ဆိုတာကိုသုံးရတယ် babel transpiler သုံးပြီ း ES6 code ကို ES5


code ထုတ်ပေးတယ်၊ input ကလည်း high level language တစ် ခုဖြစ် မယ် output ကလည်း

high level language ဖြစ် မယ် abstraction ကွာရင် အဲ ကေ


့ ာင်ကို tranpiler လို့ ခေါ်တယ်

JIT/AOT compiler
JIT/AOT compiler ဆိုတာ interpreter , virtual machine တွေထဲမှာသုံးတဲ ့

compiler ကို JIT/AOT လို့ ခေါ်တယ်၊ JIT ဆိုတဲအ


့ ဓိ ပ္ပါယ်က Just-In-Time ပေါ ့ မြန်မာလိုပြောရင်

ခါတော် မီှ လို့ ပြောရမှာပေါ ့ JVM မှာ byte code ကိုinterpret လုပ်တယ်ဆိုပါစို့ ၊ အဲ လ
့ လ
ို ပ
ု ် တာ

အဆင်မပြေဘူး နှေးတယ်ပေါ ့ အဲ တေ
့ ာ့ byte code ကနေ machine code ကိုပြောင်းပစ် ရတယ်

machine code ကိုဘယ်ချ ိန်မှာကောက် ပြောင်းလဲဆိုတော့ ု ပ် တဲအ


လိအ ့ ချ ိန်မှာကောက်ပြောင်း

လိက
ု ်တယ်၊ အဲ လ
့ ိုပြောင်းတာကို Just-In-Time compilation လို့ ခေါ်တယ် Just-In-Time က

လည်း compile လုပ်တာပဲ အဲတ


့ ာလည်းနှေးတယ် မ run ခင်byte code ကို machine code ကြိ ု

ပြောင်းထားမယ်ဆိုပြီး ပြောင်းတာကိုကျတော့ AOT (Ahead Of Time) Compilation လို့ ခေါ်

တယ်၊ နောက်တစ် ခု Hotspot JIT ဆိုတာရှိ သေးတယ်၊ JIT ရဲ ့အားနည်းချက်က လည်း byte

code ကို compile ပြန်လပ


ု ် နေရတာဆိုတော့ လာသမျှ class တိင
ု ်းကိုတော့ မပြောင်းဘူးအသုံး

များတာကိုပဲပြောင်းမယ်run နေတဲဆ
့ ိုတာကျတော့ Hotspot JIT လို့ ခေါ်တယ်။

အနှစ်ချုပ် ပြောရရင် Bytecode တွေရဲ . instruction တွေကို line by line read ပြီ းတော့

execute လုပ်ရင် ဒါက interpretation ပါ။ အဲ လ


့ ို interpret လုပ်ရတာက နှေးပါတယ် ဘာ

လိ.ု လဲဆိုတော့ bytecode instruction opcode တွေက ဘာလုပ်မယ်(ဘယ် opcode လဲ add

ဆိုရင်ပေါင်းရမယ် ဒါဆို stack ပေါ်က ကောင်တွေကို pop လုပ်ပြီးပေါင်း ပြီ းပြန်တယ်)ဆိုတာကို

decode လုပ်ရတဲအ
့ တွက်ကြာပါတယ်။ အဲ ဒ
့ ီအစား အဲ ဒ
့ ီခုနက stack ပေါ်ကနေ pop ချ ပေါင်းပြီ း

ပြန်တင် အဲ ဒ
့ ီအလုပ်တွေကို machine code အနေနဲ.ပြောင်းလိက
ု ်ပြီး ခု နက byte code နေရာမှာ

အစားထိုးလိက
ု ် ပါတယ် ။ Implementation အရဆို machine code ထုတ်ပြီး byte code

array ထဲမှာ void pointer အနေနဲ.ထားပါတယ်။ နောက်မှ pointer တွေ typecast လုပ်ပြီး

function call အနေနဲ. execute လုပ်ခိုင်းတာပါ။ အဲ သ


့ ည်လို bytecode ကနေ machine code

ကို runtime မှာပြောင်းပြစ် တာကို Compilation လုပ်တယ်လို.ခေါ်ပါတယ်။  Compilation မှာ

လဲပြဿနာရှိ ပါတယ် ။ဒါကဘာလဲဆိုတော့ ခု နက bytecode တွေကို machine code အနေနဲ.

compile လုပ်ဖို. အချ ိန်ရယ် memory ရယ်ကုနပ


် ါတယ်။ ဒါကြောင့် ဘာမှ မ run ခင် ကြိုပြီ း

compile လုပ်ပါတယ် အားလုံးကို ဒါကို AOT (Ahead of Time ) Compilation လိ.ု ဆိုပါတယ်။
သုံးသုံး မသုံးသုံး အားလုံးကို AOT လုပ်တော့လဲ အဆင်မပြေပါဘူး။ မသုံးတဲ ့ method တွေ ဥပမာ

ု ှ ပဲ compile လုပ်
exception class တွေ အတွက်ဆို အလဟဿ ဖြစ် ပါတယ်။ ဒါကြောင့် လိမ

မယ်ပေါ။့ ဒါကို HotSpot လိ.ု ခေါ်ပါတယ်။ HotSpot ဆိုတာ method တခု က run ပြီ းရင် သူ.ကို

counter လေးနဲ.မှတ်ထားပါတယ်။ ခနခန run လေ counter လေးက တက်လာလေပေါ ့ အဲ ့

counter လေးက treshold တခု ရောက်လာမှ အဲ ဒ


့ ီ method ရဲ . bytecode တွေကို machine

code အနေနဲ. compile လုပ်ပါတယ်။ ဒါကို ပူနေတဲနေ


့ ရာလေးပဲ (hotspot) လေးတွေပဲ ကွက်

compile လုပ်တဲအ
့ တွက် hotspot compilation လိ.ု သုံးပါတယ်။  အပေါ်က ပြောခဲ့ တဲ့

Interpretation , AOT, HotSpot အဲ ဒ


့ ါတွေကိုစုပြီး runtime မှာ dynamic translation လုပ်

တာကိုတော့ JIT (Just In Time) Compilation လိ.ု ခေါ်ပါသတဲဗ


့ ျာ။

Types of Virtual Machine


Vritual Machine မှာလည်း stack based နဲ ့ register based ဆိုပြီးရှိ တယ် ၊

JVM,CLR,Ruby,Python မှာသုံးတဲ ့ VM တွေသည် stack based virtual machine တွေချည်း

ပဲ ။ Lua ကတော့ထူးတယ်။ register based virtual machine ကိုသုံးတယ်။  PHP ကတော့

bytecode သည် register based instruction format မျ ိုးကိုသုံးတယ်။  Stack based

သည် push, pop လုပ်တာမျ ိုးပေါ၊့ register based သည် register 1 မှာ store လုပ်ပါ

register 2 မှာ store လုပ်ပါ အဲ တ


့ ာမျ ိုးပေါ ့။

(UCSYLang နဲလက်
့ တွေ့ရှ င်းပြတာတွေကိုLive မှာကြည့်ပေးပါ)
Practical Theory of Programming Languages Part 4
Programming Environments

Programming Environment ဆိုတာ programmer တိင


ု ်းမဖြစ် မနေသုံးရမယ့်ကောင်

တွေပေါ၊့ Programming Environment မှာဘာတွေပါသလဲဆိုတော့ သုံးနေကျ tools တွေ၊

ဥပမာ စရေးတာကနေ deploy လုပ်တဲအ


့ ချ ိန်ထိ အဲ ဒ
့ ီprocess ထဲမှာသုံးရတဲt့ ools တွေအကုနလ
် ုံး

ကိုProgramming Environment လို့ ခေါ်တယ်၊ ဘာတွေလဲဆိုရင် ဥပမာ compiler, text

editor, IDE, Linker , Linker ဆိုတာကိုဘယ်သူတွေနားလည်သလဲဆိုတော့ Go, C , C++ တို့

အဲ ကေ
့ ာင်တွေသုံးနေကျသူတွေပဲ Linker သဘောကိုနားလည်တယ်၊ အဲ l့ anguage တွေ

မှာlinker ကိုသုံးရတာကိုး၊Linker ဆိုတာဘာလဲဆိုရင်တချ ို့programming language တွေ

က source code ကနေintermediate code ထုတ်တယ်၊အဲ ဒ


့ ီintermediate code ကို C တို့ C+

+တို့ မှာ Object code လို့ ခေါ်တယ် အဲ ဒ


့ ီ object code မှာ Library တွေပါမယ်၊ အဲ ဒ
့ ီ

Library တွေနဲObject
့ code တွေနဲကိ
့ ုအချင်းချင်းပြန်ချ ိတ်ဖို့လိတ
ု ယ်၊အဲ ဒ
့ ီမှာ Linker ကိုသုံးတယ် ၊

Programming ကိုစလေ့လာခါစမှာ သာမာန်text editor တွေသုံးတာက compiler သဘောတွေ

ကိုသဘောပေါက်နင
ုိ ်ပေမယ့် လက်တွေ့ project တွေရေးရင်တော့ Full Featured IDE တွေသုံးပါ

လို့ ပြောချင်တယ်၊ သာမာန် General purpose လိကေ


ု ာင်အတွက်ဆို VSCode လိကေ
ု ာင်န ဲ ့

အဆင်ပြေပေမယ့် Java လိကေ


ု ာင်မျ ိုးဆိုရင် Jetbrain ကနေထုတ်တဲ့Intellij လိကေ
ု ာင်မျ ိုးနဲသုံ
့ း

တာပိုပြီး အလုပ်လယ
ွ ်ကူသက်သာစေတယ်ပေါ ့၊ နောက် Javascript လိကေ
ု ာင်ကို Eclipse နဲသုံ
့ းရင်

လည်း အဆင်ပြေမှာမဟုတ်ဘူး Eclipse မှာ Javascript syntax highlight လုပ်တာတောင်မမှန ်

ချင်ဘူး၊ဒါကြောင့်Jetbrain ကနေထုတ်တဲ့Webstorm လိကေ


ု ာင်မျ ိုးသုံးပေါ ့။ Refactoring လုပ်ရ

တာတွေအဆင်ပြေစေလိမ့်မယ်။ ဝယ်သုံးနိင
ု ်လားဆိုတော့မသုံးနိင
ု ်ဘူးအဲ တေ
့ ာ့ တနည်းနည်းနဲ ့

ရအောင်လပ
ု ် ပြီးသုံးပေါ ့။အခု နောက်ပိုင်းဆိုရင်တော့ Microsoft က Visual Studo ရှိ တယ်.Net ရှိ

တယ် IDE ထဲမှာဘယ်ကောင်ကိုကြိုက်လဲဆိုရင် Microsoft platform ကကောင်တွေကိုအကြိုက်

ဆုံးပဲ ဘာကြောင့်လဲဆိုတော့ ဒီကောင်တွေသည် IDE တွေကိုတော် တော် ကို Perfect ဖြစ် အောင်ကို

ရေးထားတာကြောင့်ပေါ။့ ကျွန်တော် တု့ ိက GUI application တွေရေးတဲအ


့ ခါမှာ အရင်ဆုံးဘာကို
့ ခါ Microsoft ရဲ ့ dot Net ကိုပဲမြင်ကြ
ပြေးမြင်တတ်ကြလဲဆိုတော့ drag and drop လုပ်ရတဲအ

တယ် ဒါပေမယ့် အဲ ထ
့ က်အရင်ပေါ်တဲ ့ Platform တွေရှိ တယ် ဥပမာ smalltalk ဆိုရင် drag and

drop နဲသွ
့ ားတာ၊ History အရ smalltalk သည်စောပေမယ့် drag and drop ရခဲ့ တယ်

Microsoft ကစထုတ်တဲ့ Environment မျ ိုးမဟုတ်ဘူး၊ တချ ို့IDE တွေဆိုရင် language တစ် ခု

ထက်ပိုပြီးsupport လုပ်တယ် ဥပမာ Microsoft do Net ဆိုရင် C# တို့VB.Net တို့F#တို့

Jscript တို့ C/C++တို့ပါရတယ်။နောက် Xcode ဆိုရင်လည်း C++ တွေပါသွားရေးလို့ ရတယ်၊

Environment ကောင်းရင်develop လုပ်ရတာအရမ် းသက်သာတယ်။ Spring ရေးတာမျ ိုးဆိုရင်

Eclipse သုံးတာထက် Spring Tool Suite သုံးတာက ပိုပြီးတော့ အဆင်ပြေတယ်။Deskstop

app တွေကိုJava နဲရေးရင်


့ တော့ NetBeans လိကေ
ု ာင်မျ ိုးနဲကအဆင်
့ ပြေတယ်၊ဒါပေမယ့်Java နဲ ့

တော့ GUI app ရေးဖို့ မလုပ်န၊ဲ ့ ဘာကြောင့်လဲဆိုရင် အဖြစ် မရှိ လို့၊ဘာကြောင့်အဖြစ် မရှိ သလဲဆိုရင်

C#, VB.Net နဲယှ


့ ဥ်လက
ို ်လို့ပေါ ့။ပိုအဆင်ပြေတယ်ပေါ ့၊ Java နဲရေးရင်
့ ပင်ပန်းတာပေါ ့။

နောက်Javascript ဆိုရင်ကိုယ်ပိုင်IDE ဆိုမျ ိုးမရှိ ဘူး တခြားကုမ္ပဏီကထုတ်တာမျ ိုးတော့ရှိတာေ

ပါ၊ဥပမာ
့ Jetbrain ကထုတ်တဲကေ
့ ာင်တွေပေါ ့၊ PHP, Python တို့ဆိုရင်လည်းထိုနည်း၎င်းပေါ ့။

Evolution of the Major Programming Languages

Programming Language တွေဘယ်လမ


ို ျ ိုးဖြစ် လာသလဲဘယ်လိုFeature တွေပါလာ

သလဲ အဲ ဒ
့ ီအကြောင်းတွေပါမှာပေါ၊တချ
့ ို့လူတွေကထင်မှာပေါ ့ငါတို့ Programming က JIT ပထမ

ဆုံးရတာတို့ Type Inferencing ကငါတို့language ကစပေးလိက


ု ်တာမျ ိုးတို့အမှနတေ
် ာ့မဟုတ်

ဘူး Type Inferencing ဆိုရင် Haskell လိကေ


ု ် ဲ့ တဲအ
ာင်မှာလွနခ ့ နှစ်သုံးဆယ်လောက်ကရနေတာ

Haskell ဆိုတာ statically typed functional programming language ပေါ ့ အဲ ဒ


့ ီက

concept တွေကိုမှနောက်ပိုင်းprogramming language တွေဥပမာJava,C#တို့လိကေ


ု ာင်မျ ိုးက

ထည့်ပေးလာတာ၊ နောက်ကျွန်တော် တု့ ိသုံးနေကျ Java,C#တို့မှာရှိ တဲ့ type system ဆိုရင် သူတို့

ထက် ပိုပြီး expressive ဖြစ် တဲကေ


့ ာင်တွေရှိ တယ် ကျွန်တော် တု့ ိဆီ မှာသိ ပ်ပြီးတော့မသုံးကြဘူး၊

အစောကပြောတဲH
့ askell လိကေ
ု ာင်တွေပေါ ့အဲ ကေ
့ ာင်တွေရဲ ့ type system သည် တော် တော်

ကိုpowerful ဖြစ် တယ်။


Programming language ဆိုရင်programming ဆိုတာရှ င်းရမယ် language ဆိုတာအ

ရင်ရှင်းရမယ်၊ language ဆိုတာဘာသာစကားပေါ ့၊ ဘာသာစကားဆိုတဲအ


့ ဓိ ပ္ပါယ် Entity နှစ်ခု

လူအချင်းချင်းပြောတဲဘ
့ ာသာစကား natural language ဆိုရင် တစ် ယောက်တည်းပြောနေလို့ မရ

ဘူး party နှစ်ခုရှိမှ communicate လုပ်လရမှ ို့ ာပေါ ့၊ language ရဲ ့အရေးပါပုံကိုနည်းနည်းပြော

ပြမယ်၊ တခြားသတ္တဝါတွေနဲလူ
့ တွေနဲဘာကွ
့ ာခြားသလဲဆိုရင် အဓိ ကကွာတာသည် ဘာသာစကားပဲ ၊

language သည် လူတွေမှာပဲ Evolve ဖြစ် တယ်၊ ကမ္ဘာပေါ်မှာမျ ိုးနွယ်စုတွေအများကြီးရှိ တာတာ

တောင်မှ Individual အနေနဲ ့ develop ဖြစ် လာကြတာ၊language ရှိ တော့communicate လုပ်

လို့ ရတယ်၊ ကျွန်တော် က ခင်များခေါင်းထဲကို ဆိုပါစို့ ဆင်ပျ ံကြီးလို့ ပြောလိက


ု ်တယ် ဆင်ပျ ံကြီးကို

ခင်များတို့ ကမမြင်ဖူးဘူး ဒါပေမယ့် ခေါင်းထဲမှာ ဆင်ဆိုတာရယ် ဆင်ကိုတောင်ပံတပ် ထားတာရယ်

ခေါင်းထဲမှာပေါ်လာလိမ့်မယ်၊ ဆိုလခ ဲ့
ို ျင်တာက Language ရဲ ့သဘောကဒါပဲ တစ် ယောက်နတစ်

ယောက်ရဲ့ခေါင်းကို ဝိုင်ယာကြိ ုးထိုးစရာမလိဘ


ု ဲ န ဲ အချင်
့ းချင်းခေါင်းထဲမှာ တစ် စုံတစ် ခုကို ပုံဖေါ် နိင
ု ်

အောင်တွေးတောနိင
ု ်အောင်လပ
ု ် ပေးနိင
ု ်တာသည် language ရဲ ့အားသာချက်ပေါ ့ language ရှိ

ဲ ့ ယောက်ကသင်ပေးလို့ ရတယ်၊ ဥပမာ ခြင်္သေ့တစ် ကောင်က လူတစ် ယောက်


တော့တစ် ယောက်နတစ်

ကိုကိုက်လက
ို ်တယ်ဆိုပါတော့ လူတွေကခြင်္သေ့ကိုဝိုင်းပြီ းတော့ သမ ကြမယ်ပေါ ့၊ အဲ ခ
့ ါမှာ ခြင်္သေ့က

သေခါနီးဆိုပါစို့ ဗျာ၊ တခြားခြင်္သေ့တွေကသူ့ ကိုလာတွေ့တယ်ဆိုပါစို့ ခြင်္သေ့ကဘာပြောလို့ ရသလဲ၊

့ ရာမှာဆိုရင် သားကြီးတို့ရေ ငါ ့ကိုလူဆိုတဲမ


လူသာအဲ နေ ့ ျ ိုးနွယ်ကသမသွားတယ် မင်းတို့လူဆိုတဲ့

ကောင်တွေနဲဝေးဝေးနေ၊
့ ဝေးဝေးရှောင်လမှ ို့ ာချင်မှာခဲ့ လရတယ်
ို့ ပေါ ့ စကားပြောတတ်ရင်ပေါ ့

စကားမပြောတတ်တော့ communicate လုပ်လမရဘူ


ို့ း အဲ တေ
့ ာ့အတွေ့အကြုံကို ပြန်ရှယ်လမရ
ို့

ဘူး knowledge ကိုshare လို့ မရဘူး၊ အဲ တေ


့ ာ့လူမဟုတ်တဲတ
့ ခြားမျ ိုးစိ တ်တွေမှာ language မရှိ

တဲအ
့ တွက် develop လုပ်တာ၊ knowledge တွေကို Generation to generation ကို

transfer လုပ်လမရဘူ
ို့ း၊ဒါကို သဘောပေါက်မယ်ထင်တယ်၊အဲ လ
့ ိုမရတဲအ
့ တွက် ကျွန်တော် တို့လူ

တွေလို develop လုပ်တာမမြန်ဘူးအရမ်းနှေးတယ်ပေါ ့၊ ကျွန်တော် တု့ ိလူတွေကျ generation to

generation သော် လည်းကောင်း၊ မျ ိုးနွယ်တစ် ခုကနေ နောက်တစ် ခုကိုလည်းကောင်း

အတွေ့အကြုံ၊ဗဟုသုတတွေကို ပြန်မျှဝေလို့ ရတယ်ပေါ ့။ အဲ တ


့ ာကြောင့် Technology တွေ
Science တွေ၊ဥပမာNewton ခေတ်ကတည်းကသီအိုရီတွေကိုlanguage သာမရှိ ရင် transfer

လုပ်ခဲ့လမရဘူ
ို့ း ၊ language ရှိ တဲအ
့ တွက်transfer လုပ်လရတယ်
ို့ ၊ အဲ လ
့ e
ို ducational

knowledge တွေကို language ရှိ တဲအ


့ တွက်ပိုကောင်းလာအောင် အဆင့်မြှင့်လရတယ်
ို့ ၊ အဲ တ
့ ာ

ကြောင့်လူတွေရဲ ့အားသာချက်သည် intelligence ရောပေါ ့၊ လူတွေရဲ ့အားသာချက်သည်

intelligence တစ် ခုတည်း မဟုတ်ဘူး၊ ဥပမာ တချ ို့မျ ိုးစိ တ်တွေသည် လူတွေထက်

intelligence ပိုသာနေတဲကေ
့ ာင်တွေရှိ တယ်၊ ဒါပေမယ့်လူတွေလိပြေ
ု ာလို့ ရတယ် natural

language မရှိ ဘူး၊ ဒါသည် What is language?ဆိုတာကိုရှင်းပြတာပေါ ့။

Programming language သည် Entity နှစ်ခုပဲ ဘယ်သူနဘယ်


ဲ့ သူ့ကြားလဲဆိုရင်

Programmer နဲ ့ computer နဲကြားထဲ


့ မှာဆက်သွယ်ပေးတဲကေ
့ ာင်ပေါ ့၊ programmer ကခို င်း

မယ်အဲတ
့ ာကိုcomputer ကအလုပ်လပ
ု ် ပေးမယ် အဲ တ
့ ာကို programming language လို့ ခေါ်

တယ်၊အဲ တေ
့ ာ့ ကွနပ
် ျူတာကို ု ဲလို့မေးရင်
ဘာလုပ်ဖို့ခို င်းဖို့ လိလ ကွနပ
် ျူတာရဲ ့အလုပ်သည်

programmable machine ဖြစ် တယ်၊ ဥပမာ aircon ရှိ တယ်ဆိုရင် အဲ ကေ


့ ာင်ကဘာလုပ်သလဲဆို

တော့ aircon အလုပ်ကိုပဲလပ ို ာက အပူချ ိန်ပြင်တာလောက်ပဲပေါ ့၊ သူ့ မှာ limited


ု ် တယ်ဆိုလတ

capability ရှိ တယ်၊ ကွနပ


် ျူတာကျ programmable ဖြစ် တယ် ဆိုလတ
ို ာက computer သည်

သူ့ ကို program ရေးတဲအ


့ ပေါ်မူတည်းပြီ း capability ပြောင်းနိင
ု ်တယ်၊ ဥပမာ accounting

software ထည့်လက
ို ်ရင် ဒီကောင်သည် accountant ဖြစ် သွားမယ်၊ natural language

processing တွေထည့်ပြီးတော့လည်း AI machine တစ် ခုဖြစ် သွားနိင


ု ်တယ်၊ သူသည် task

အများကြီးကိုလပ
ု ် လရတယ်
ို့ အဲ လ
့ လ
ို ပ
ု ် လရတာသည်
ို့ ၊ သူသည် program ပြောင်းလို့ ရအောင်လပ
ု ်

ထားတဲအ
့ တွက် ကွနပ
် ျူတာသည် တခြား electronic device တွေနဲယှ
့ ဥ်ရင် အားသာနေတာပေါ ့။

Programming language တွေဘာကြောင့်လသ


ို လဲဆိုတာကိုထပ် ပြီးတော့ပြောပြမယ်

ကွနပ
် ျူတာကိုခိုင်းရင် ဘယ်လခ
ို ို င်းသလဲဆိုတော့ computer က natively နားလည်တာသည်

machine language ကိုနားလည်တာ၊ machine language ဆိုတာဘာလဲဆိုတော့ hexa code

တွေ binary code တွေပေါ ့ hardware ကနားလည်တဲ့ electronic swich on/off လုပ်တာပေါ ့
ဒါတွေကို machine language လို့ ခေါ်တာပေါ ့၊ အဲ ကေ
့ ာင်တွေကို low level programming

language လို့ ခေါ်တယ် low level programming language တွေသည် လူတွေနားလည်ဖို့

ခက်တယ် နောက်Assembly ဆိုရင် machine language ကိုtext နဲကိ


့ ုယ်စားပြုလိက
ု ်တာပေါ ့ သူ

သည် machine language နဲစာရင်


့ တော့ဖတ်ရလွယ်တာပေါ ့၊ ဒါပေမယ့် Assembly ကိုလည်း

low level programming language လို့ ခေါ်တယ် machine language, assembly မှအပ

တခြားprogramming language တွေကို high level programming language လို့ ခေါ်

တယ်၊ ကျွန်တော် တု့ ိ လက်ရှိသုံးနေတဲ ့ programming language တွေသည် high level

programming language တွေလို့ ပြောလို့ ရတယ်၊ အဲ တေ


့ ာ့သမိုင်းကြောင်းကိုပြောပြမယ့် ဘာလို့

ပြောပြလဲဆိုရင် ဖင်မယားအောင်လို့ပေါ ့ တချ ို့ကျတော့ ငါ ့language မှာဒါရှိ တယ်

ငါ ့language ကအရင်ရတာဆိုတဲက
့ ိစ္စမျ ိုးတွေ ပျောက်သွားတာပေါ ့၊ language တွေက တစ်

ဲ ့ ယောက် ကူးလူးပြီ း inspire လုပ်ပြီးတော့ ဟိက


ယောက်နတစ် ု ဟာဒီယူလက
ို ် ဒီကဟာ ဟိက
ု ိုယူလက
ို ်

နဲလု
့ ပ်နေရတာ အဲ တ
့ ာကိုနားလည်ထားရင်ပိုပြီးတော့ အဆင်ပြေတာပေါ ့ ပြောရရင် ငါ ့language က

ဒါအရင်ရတာဆိုပြီး ဖီ းမတက် တော့ဘူးပေါ ့၊ ဟိးု အရင်language တွေမှာရခဲ့ ပြီးသားအဲ တ


့ ာကိုကို

ယ့်language designer ကအခု မှထထည့်ပေးတာကိုသဘောပေါက်သွားရင် အဆန်းအပြားမဖြစ်

တော့ဘူးပေါ၊့ ဒီလိဖြ
ု စ် တာနည်းသွားတာပေါ ့။

အောက်က Link မှာ diagram သွားကြည့်ပါ

http://rigaux.org/language-study/diagram.png
ပုံမှာပြထားတာသည် Assembly နဲ ့ helloworld ထုတ်ထားတာပေါ ့၊ Assembly တစ် ကြောင်း

့ တယ် စဥ်းစားကြည့်ပေါ ့ helloworld တောင်အဲ့


သည် Machine language တစ် ကြောင်းနဲညီ

လောက်ရေးရရင် Assemply နဲသာအကု


့ နရေ
် းရရင် စမုနတ
် ုနး် ကုနမ
် ှာပေါ ့၊ အဲ တေ
့ ာ့ high level

programming language တွေနဲရေးရင်


့ အဆင်ပြေသွားတယ် မြန်သွားတယ်ပေါ ့၊ language

တွေကို design လုပ်တဲအ


့ ခါမှာ ancestor တွေရှိ တယ် ဥပမာ C++ဆိုရင် သူ့ ရဲ့ ancestor ဖြစ်

တဲ ့ C ကိုအမှီပြုပြီ းတော့ထုတ်ထားတာပေါ ့ အဲ တေ
့ ာ့သူ့မှာ C လိfု eature တွေပါလာတယ်၊ C ရဲ ့

syntax တွေပါလာတယ် pointer တွေ၊ memory management တွေပါလာတာပေါ ့။ အဲ လ


့ ို

ancestor တွေသိခြင်းအားဖြင့် ဒီlanguage ကဘာကြောင့်ဒီလရ


ို သလဲဆိုတာတွေသိလရတယ်
ို့

ပေါ။တိ
့ က ် ဟုတ်ဘဲ
ု ်ရု ိ က်ancestor ဆီ ကနေအပြင် တခြားlangauge တခု ခုကနေလည်း အကုနမ

နည်းနည်းစီ inspire ယူတာမျ ိုးလည်းရှိ တယ်၊ ဥပမာJava မှာinterface ဆိုတဲc


့ onstruct က သူ့ ရဲ့

ancestor ဖြစ် တဲ့C++မှာမရှိ ဘူး၊ ဘယ်ကယူသလဲဆိုရင် Eiffel ဆိုတဲl့ anguage ကနေယူတယ်။

အရင်က Lisp ဆိုရင် Artificial intelligence အတွက်လပ


ု ် ထားတာ အခု တော့ popular main

stream ထဲမှာတော့မရှိ တော့ဘူးပေါ၊့ သုံးတော့သုံးသေးပေမယ့် သူကနေဆင်းသက်လာတဲ ့ F#လို

ကောင်မျ ိုးကတော့ main stream ထဲကိုရောက်လာတယ်ပေါ ့၊ နောက်Rust ပေါ ့၊ အဲ ကေ


့ ာင်

တွေသည် functional programming ကနေဆင်းသက်လာတဲ ့ language တွေပေါ ့။

C ရဲ ့သမိုင်းကြောင်းကိုပြောရရင် Unix ဆိုတဲ့ operating system ကိုရေးဖို့ C ကိုထုတ်ခဲ့

တာပေါ၊့ system programming ပေါ ့။ system programming ဆိုတာဘာလဲဆိုရင်


compiler,operating system, networking software တို့ browser တို့သည် system

program တွေလို့ ခေါ်တယ်၊ system programming သည် ဘာသာရပ် သက်သက် ရှိတယ် စာမ

ဲ့
တတ်ပေမတတ်ကောင်တွေပြောသလို software engineering ရရုံနရေးလို့ ရတယ်ဆိုတာ စောက်

ရူ းနားကန်းတွေပြောတာ၊ သူရဲ့သီးခြားနယ်ပယ်တစ် ခုရှိတယ််၊ သီးသနလိ


့် က
ု ်လေလ
့ ာရတယ်၊ ဥပမာ

operating system ဆိုရင် software engineering တတ်ရုံန ဲ ့ ရေးလို့ မရဘူး၊ operating

system တွေရဲ ့ concept တွေရှိ တယ် theory တွေရှိ တယ် ဥပမာ file management,

memory management, process management, networking နောက် interprocess

communication အဲ တ
့ ာတွေကို လိက
ု ်ပြီးတော့ရေးရတယ်၊ အဲ တ
့ ာတွေလေ့လာဖို့ နောက်

concurrency တို့ဘာတို့အဲ တ
့ ာတွေလိက
ု ်လေလ
့ ာရတယ်၊ အဲ တ
့ ာတွေသည် system

programming operating system ရေးချင်တဲသ


့ ူတွေသည် ဒါတွေကိုလေလ
့ ာရတယ်၊

C သည် system programming ဖြစ် တဲအ


့ တွက်သူ့အောက်က assembly ကို

compile လုပ်ရတယ် အဲ တေ
့ ာ့performance အရ speed အရမြန်တယ်၊ C ကနေ C++ကိုထုတ်

တော့မှ oop ထည့်လက


ို ်တာ အဲ တေ
့ ာ့ Object oriented programming ကိုC++ကနေစထည့်

တာလားဆိုတော့မဟုတ်ဘူး အများသိတာတော့smalltalk ကစထည့်တယ်လသိ ို့ တယ်၊ အဲ တ


့ ာ

လည်း မှားတယ် ဘယ်ကစလဲဆိုရင် Simula ဆိုတဲ့ programming language ကနေစတယ် ဒါ

ပေမယ့် Oop ကို concept မိ အောင် ဥပမာ inheritence , interface , polymorphism တို့ အဲ ့

ို ်လဲဆိုတော့ smalltalk ကနေစပြီ းတော့လပ


တာတွေကို popular ဖြစ် အောင်ဘယ်သူက လုပ်လက ု ်

လိက
ု ်တာ။ အဲ တ
့ ာကြောင့် Smalltalk ကိုရေးတဲ ့ Alan Kay က Turing award ကိုရတယ်။ Turing

award ဆိုတာကတော့ Computer Science လောကကိုတစ် ခေတ်ပြောင်းစေတဲသ


့ ူတွေပဲ ရတာ

ပေါ။့ နောက် C++ပေါ၊့ C++ရဲ ့အားနည်းချက်က platform တစ် ခုတည်းမှာပဲ run လို့ ရတယ်၊ဆိုပါ

စို့ C++ program တစ် ခုရေးလိက


ု ်တယ် ကျွန်တော် တု့ ိက Windows platform ပေါ်မှာပဲ ရေးလိက
ု ်

တယ်ဆိုရင်windows မှာပဲ run လို့ ရတယ် တခြားmac တို့linux တို့မှာ သွားrun လို့ မရဘူး

Mac မှာrun ချင်ရင် mac အတွက်သုံးတဲs


့ ystem call တွေapi တွေပြင်ပြီးမှပြန်build ရတယ်၊ အဲ ့

တော့program သည် portable မဖြစ် ဘူးplatform တွေမှာ ပြဿနာတွေတက်တယ်၊အဲ တေ


့ ာ့
1995 လောက်မှာ Sun Microsystem ကနေအဲ ့ပြဿနာကိုဖြေရှ င်းပြီ းတော့Java ကိုထုတ်လက
ို ်

တယ် အဲ ဒ
့ ီမှာ Java သည် platform independent ဖြစ် တယ်၊ နောက်ပိုင်း

မှာMicrosoft ကနေJava ကို အတုခိုးပြီ းတော့Visual J++ဆိုပြီးထုတ်တယ်Java ပါပဲ ၊ အဲ မ


့ ှာ

Sun ဘက်ကတင်းပြီ းတော့Microsoft ကိုတရားစွဲတယ်၊ Microsoft ကအဲ မ


့ ှာ Visual J++ထုတ်မ

ရရင် C#ထုတ်တယ်ကာွ ဆိုပြီး C#ကိုထုတ်လက ု ီ းလုပ်ခဲ့တာဖြစ်


ို ်တယ် C#သည် Java ကိုတပြ

လို့ Java ရဲ ့feature တွေတော် တော် များများပါတယ်၊ ဒါပေမယ့် C# language designer သည်

အရမ်းတော် တဲအ
့ တွက် နောက်ပိုင်းမှာC#သည် Java ထက် Feature သုံးဆလောက်ပိုများ

ပြီ းEvolve ဖြစ် လာတယ်၊ ဥပမာLinq လိကေ


ု ာင်မျ ိုးဆိုရင် C#မှာရတယ်အရမ် းမိုက်

တဲf့ eature တွေပေါ ့။Drag and drop တွေအရမ် လယ


ွ ်အောင်လပ
ု ် ပေးတယ်၊ သူသည် အသုံးဝင်မှု

ကိုပိုပြီးအာရုံစိုက်တယ်၊ အဲ တေ
့ ာ့Java သမားတွေအသုံးမဝင်ဘူးလားဆိုတော့ မဟုတ်သေး

ဘူးJava သည် OOP ကိုပိုပြီးအာရုံစိုက်တယ် ဒါကြောင့်တချ ို့Java method တွေဆိုရင် OOP ကို

လိက
ု ်နာနေတဲအ
့ တွက်အလုပ်ရှုပ်တာမျ ိုးတွေပါတယ်၊ C#မှာအဲ လ
့ မ
ို ဟုတ်ဘူး ွ ်ကူကူန ဲ ့
လွယ်လယ

လုပ်လရတာမျ
ို့ ိုးတွေ၊ဒီနေရာမှာတော့example မပြတော့ဘူး ရှ ည်သွားမှာစိုးတဲအ
့ တွက်။Java

သည်တခြား dynamic type ဖြစ် တဲ့ Python, Ruby တို့နဲယှ


့ ဥ်လက
ို ်ရင်ရေးရတာ

အရမ်းverbose ဖြစ် တယ်၊ verbose ဖြစ် တယ်ဆိုတာကတခု ခုရေးချင်ရင် ရှ ည်ရှည်ဝေးဝေးတွေ

လိက
ု ်ရေးရတယ်၊ ပြောရရင် Programmer ဆိုတာကမရေးရလေကောင်းလေပဲ ၊ အဲ တေ
့ ာ့

တိတ
ု ိတ
ု တ
ု ်တတ
ု ်အတိခ
ု ျုပ် ပြီးရေးလို့ ရတဲl့ anguage တွေကိုထုတ်လက
ို ်တယ် Kotlin ပေါ ့။

C++ကိုပြန်သွာရအောင် C++သည် system programming အတွက်ထုတ်ထားတာ၊

C++မှာဘာပြဿနာရှိ သလဲဆိုတော့build လုပ်တဲအ


့ ခါကျရင် ဥပမာ project အကြီးကြီးရှိ မယ်၊

File တွေကတစ်ရာလောက်ဖြစ် ချင်ဖြစ် မယ် တစ် ထောင်လောက်ဖြစ် ချင်ဖြစ် မယ်၊build လုပ်တယ်

ဆိုတာက C++ code ကနေobject code ထုတ်တယ်၊ object code ကနေexe code ထုတ်

တယ်၊ အဲ မ
့ ှာ build time သည် အရမ် းကြာတယ်၊နောက် C++သည် memory safe မဖြစ် ဘူး၊

ဆိုလတ ့ ုက်တဲ့နေရာကိုသွားလို့ ရတယ်၊ သွားပြီ းတော့ pointer နဲ ့


ို ာ memory ပေါ်မှာ pointer နဲကြိ

ထောက် ပြီးတော့operating system ရဲ ့ကြိုက်တဲ့နေရာမှာ memory သွားရို က်လရတယ်


ို့ ၊အဲ တ
့ ာ
ကိုlanguage ကနေမကာပေးထားဘူး၊ အဲ တေ
့ ာ့system programming တချ ို့နေရာတွေမှာ

ပြဿနာတက်နင
ုိ ်တယ်၊အဲ တ
့ ာမျ ိုးကို handle လုပ်လရအောင်
ို့ နောက်ပိုင်းမှာဘာထုတ်လက
ို ်သလဲ

ဆိုတော့ Rust ထုတ်လက


ို ်တယ် Mozilla ကနေပြီ းတော့၊ ထုတ်ပြီးတော့Mozilla က Firefox ကို

Rust နဲပြန်
့ ရေးလိက
ု ်တယ်။ build လုပ်တာကြာတဲက
့ ိစ္စကိုဖြေရှ င်းဖို့ အတွက် Google ကနေGo ဆို

တဲp
့ rogramming langauge ကိုထုတ်လက
ို ်တယ်၊ အခု နောက်ပိုင်းမှာ C++ကိုအစားထိုးပြီ းတော့

Go သော် လည်းကောင်း ၊Rust သော် လည်းကောင်း သုံးလို့ ရတယ်၊ ဒါပေမယ့် ရှိ ပြီး

သားprogram တွေကို Go နဲပြန်


့ ရေးဆိုရင်တော့ဘယ်ကောင်မှရေးတတ်မှာမဟုတ်သေးဘူး၊ အဲ ့

တော့C++ programmer တွေကချက်ချင်းကြီးအလုပ်ပြုတ်မှာတော့မဟုတ်သေးဘူးပေါ ့။

Dynamically typed language ဘက်ကို ပြန်သွားရင် Javascript ရှိ တယ်၊ Javascript

သည် Java နဲမရှေးမနှောင်


့ းလောက်မှာ ထုတ်ထားတာ ဒါပေမယ့် Javascript သည် scheme ဆို

တဲp
့ rogramming language ကနေ inspire လုပ်ပြီးယူထားတာ၊ အဲ တ
့ ာကြောင့် Javascript

သည် ဟိးု အစတည်းက function သည် first class ဖြစ် နေတာ။ java ကနေသာ inspire လုပ်ခဲ့

မယ်ဆိုရင် function သည် first class ဖြစ် စရာ အကြောင်းမရှိ ဘူး၊ ပြောရရင် သိုးရေခြုံထားတဲ ့

ဝံ ပုလွေပေါ။့ ပြီ းရင် dynamic language နယ်ပယ်မှာဘယ်သူတွေပါလာသလဲဆိုရင် PHP ရှိ

တယ်၊ Python, Ruby ရှိ တယ်၊ Python ဆိုရင် machine learning ဘက်မှာအသုံးများလာ

့ ှာမေးစရာရှိ တယ်၊ Machine learning မှာရှိ တဲ့Neural network တွေသည် core တွေ
တယ်၊ အဲ မ

CPU, GPU တွေတမုနး် သုံးရတယ်၊ အဲ မ


့ ှာPython dynamic language နဲသုံ
့ းတော့မနှေးဘူးလား

ပေါ ့ နှေးတာပေါ ့ အဲ တ
့ ာကြောင့်Python နဲမရေးဘူ
့ း၊ ပြောချင်တဲအ
့ ဓိ ပ္ပါယ်က Machine

့ သတ်တဲ့ library တွေသည် C/C++တို့နဲရေးထားတာ၊


learning နဲပတ် ့ Python ကို C/C++နဲ ့

ရေးထားတာဖြစ် တဲအ
့ တွက် Python သည် C/C++ library တွေကိုယူသုံးလို့ ရတယ် ဆိုလတ
ို ာက

C/C++နဲ ့ library တွေကိုအရင်ရေးလိက


ု ်တယ်၊ အဲ ့library ကို Python ကခေါ်သုံးနိင
ု ်တယ်။

Programmer ထိတွေ့နေရတာကတော့Python code ပဲ ဒါပေမယ့် နောက်ကွယ်ကလုပ်သွား

တာသည် C++ code တွေကလုပ်သွားတာ။ အဲ တေ


့ ာ့Python သည် တိတ
ု ယ်၊ ရေးရတာ

expressive ဖြစ် တယ်၊ delegant ဖြစ် တယ် အဲ တ


့ ာကြောင့် Developer မဟုတ်သော
တခြားbackground ကနေလာတဲ ့ ဆရာဝန်တွေ၊ သိပံ္ပပညာရှ င်တွေ python ကိုလေလ
့ ာရတာသည်

ပိုပီးတော့လယ
ွ ်တယ်ပေါ။အဲ
့ တ ့ ာကြောင့်Python သည် အဲ ဘ
့ က်မှာတက်လာတယ်ပေါ ့။

နောက်Typescript၊ Typescript သည် Javascript ရဲ ့superset ပေါ ့၊ Javascript ကို

type ထည့်ထားတာပေါ ့။ Javascript ရဲ ့ History ကိုတစ် ချက် ပြန်ပြောရရင် Google ရဲ ့

Gmail ပေါ်ခါစမှာ Google ကကောင်တွေသည် ဖင်ယားကြတယ်( :3 အဟက်) နည်းနည်းရှုပ်

တယ်၊ ဖင်ယားပြီ းတော့ ဘာလုပ်သလဲဆိုတော့၊ ခဏထားအုံး အဲ တ


့ ာကို၊ ဒီနေရာမှာ web

programming လို့ ပြောရင် Java ရဲ ့applet ဆိုတာကိုချန်ထားခဲ့ လမရဘူ


ို့ း၊ applet ဆို

တာJava ပေါ်ခါစမှာ Browser တွေမှာrun တဲJ့ ava program တွေပေါ ့၊ Applet ပေါ်ခါစကဆိုရင်

ဘယ်လောက်ထိသုံးသလဲဆိုရင် ဒါသည် web computing အတွက်platform independent

ဖြစ် မယ်လို့မျှော် လင့်ကြတယ်၊ ဒါပေမယ့်Applet ကြီးသည် လစ် သွားတယ်၊ အဲ လ


့ လ
ို စ် သွားတာ

ဘယ်သူ့ကြောင့်ပါသလဲဆိုရင် Google ကြောင့်ပါတယ် Google က gmail ပေါ်ခါစမှာ

Javascript ကိုသုံးပြီ းတော့ developer တွေခေါ်တယ်၊ javascript အကြောင်းတမုနး် ပြောပြ

တယ်၊ tool chain တွေထုတ်တယ် အဲ မ


့ ှာတင်Javascript ကထောင်ပြီး တက်လာတယ်၊ အဲ မ
့ ှာ

Programmer တွေက Javascript ကိုပိုပြီးတော့ကြိုက်လာကြတယ်၊ အဲ တေ


့ ာ့ Javascript သည် မ

မျှော် ဘဲ စော် ကဲမင်းဖြစ် ဆိုတဲအ


့ တိင
ု ်းပဲ ပေါ ့ဗျာ၊ အဲ တေ
့ ာ့ပိုင်းမှာ Javascript သည် Browser မှာ

တင် မဟုတ်ဘဲ mobile အတွက် React Native၊ Desktop အတွက် Electron၊

Serverside အတွက် Nodejs လိကေ


ု ာင်မျ ိုးတွေပါထွက်လာတာပေါ ့။ အဲ တေ
့ ာ့Javascript တက်

ပြီ ဆိုရင် အားလုံးရေးလို့ ရပြီ လို့တောင်ပြောလို့ ရတယ်၊အဲ တေ


့ ာ့Javascript က large scale

ဖြစ် လာတော့ ဘာပြဿနာတက်သလဲဆိုတော့Dynamic programming language တွေရဲ ့

ပြဿနာတက်တယ်၊ Type checking မရတဲလ


့ ဖြစ်
ို့ တဲ့ပြဿနာတွေရှိ တယ်ပေါ ့။ အဲ ့

တော့Javascript ကိုtype တွေထပ် ထည့်ဖို့အတွက် optional typing ဆိုပြီးထုတ်လက


ို ်တယ်

ဥပမာTypescript လိကေ
ု ာင်မျ ိုးပေါ၊့ Type safety ပိုကောင်းသွားတာပေါ ့။ programming

language လေ့ လာချင်တဲ့ လူတွေဆိုရင် Typescript ကိုလေလ


့ ာသင့်တယ်၊ Typescript မှာ

Enhanced type system တွေပါတယ်၊ ဥပမာ tuple တို့ union type တို့ပါတယ်၊ complex
ဖြစ် တဲ့ type တွေအကြောင်းကို လေ့လာနိင
ု ်တာပေါ ့။ အခု နောက်ပိုင်းဆိုရင် dynamic

language တွေမှာoptional typing တွေ ရအောင်လပ


ု ် လာကြတယ် ဥပမာ Python ဆိုရင် Type

hint ဆိုတာပါလာတယ်၊ နောက်ပိုင်းမှာ dynamic language တွေသည်လည်း dynamic ကြည့်မ

နေတော့ဘူး static language တွေလည်းသူ့ ကြည့်မနေတော့ဘူး၊ static language မှာ type

inferencing လုပ်တာလိမ
ု ျ ိုး၊ dynamic language တွေကလည်း static ရဲ ့type တွေကိုယူပြီး

တော့optional type တွေထည့်ပြီး အလုပ်လပ


ု ် လာတယ်၊ အဲ လ
့ န
ို ည်းနဲ ့ evolve လုပ်လာတယ်လို့

ပြောလို့ ရတယ်။နောက် Google ကထုတ်တဲD


့ art ဆိုတာလည်း ရှိ တယ်၊ Javascript ကို

inspire ယူထားတာပေါ ့။ history ကလည်း ကုနသ


် လောက်ဖြစ် နေပြီ ။

Functional programming ဘက်သွားရင် Lisp ရှိ တယ် နောက်နာမည်ကြီးတာ Haskell ရှိ

တယ် Haskell ဆိုရင် သူ့ ရဲ့ type system ကအရမ်းမိုက်တယ်၊ functional programming ကို

လေ့လာချင်တဲသ
့ ူတွေHaskell ကိုလေလ
့ ာသင့်တယ်။ နောက် JVM ပေါ်မှာ run လို့ ရတဲ ့ Scala

programming ထွက်တယ်၊Scala ဆိုရင် functional programming တင်မဟုတ်ဘဲ object

oriented programming ပါရတယ်။ Haskell ကတော့ pure functional programming ကို

ပဲ ရတယ်။ နောက်ပိုင်းမှာ Imperative programming language တွေမှာ functional

programming ကိုထည့်ပြီးတော့ support လုပ်လာကြတယ်။ နောက် language တွေမှာ

specification နဲ ့ community နဲဆောက်


့ တဲl့ anguage တွေရှိ တယ်၊တစ် ဦးချင်းဆောက်တဲ့

language တွေရှိ တယ်၊ ဥပမာ Ruby တို့Python တို့ PHP တို့သည် တစ် ဦးချင်းရေးခဲ့ တဲ့

language တွေပေါ ့။ C++ဆိုရင်လည်း တစ် ယောက်တည်းရေးခဲ့ ပေမယ့် နောက်ပိုင်းမှာ Design

commity တွေနဲလု
့ ပ်လာရတယ်။

နောက် Apple ဘက်ကကျန်ခဲ့သေးတယ် Apple ဘက်မှာဆို objective C ကိုထုတ်ခဲ့

တယ်၊ နောက်ပိုင်းမှာ Swift လိကေ


ု ာင်းမျ ိုးကို LLVM သုံးပြီ းတော့ရေးတယ်၊ နောက်ပိုင်း Swift နဲပဲ့

သွားတယ်ပေါ။့ ဟိးု အရင်တန


ု း် က language တွေသည် target တစ် ခုတည်းအတွက်ထုတ်တယ်၊

ဥပမာ C++ ဆိုရင် system programming တစ် ခုတည်းအတွက်ထုတ်တယ်၊


နောက်ပိုင်းlanguage တွေဆိုရင် more than one target ဆိုပြီးထုတ်တယ် ဥပမာ Kotlin သည်

JVM ပေါ်မှာ run လို့ ရအောင်Java bytecode ထုတ်တယ်၊ အဲ တေ


့ ာ့Kotlin သည် java နေရာမှာ

အစားထိုးပြီ းသုံးလို့ ရတယ်၊ နောက် Kotlin ကနေပဲ Javascript code ထုတ်လရတယ်


ို့ ၊ ဒါကြောင့်

နောက်ပိုင်းlanguage တွေသည် more than one target run လို့ ရအောင်ထုတ်လာကြတယ်။

You might also like