2020 နှစ်သစ်မှာ အားလုံးပဲ မင်္ဂလာပါ။
ပထမအကြိမ်ထုတ်ဝေကတည်းက
ယခုနှစ်အတွင်း ဘာသာစကားသည် အလွန်တိုးတက်ခဲ့ပြီး ၎င်း၏ ကဏ္ဍများစွာကို ထည့်သွင်းစဉ်းစားပြီး ဖွံ့ဖြိုးတိုးတက်မှုဆိုင်ရာ အားနည်းချက်ကို ဆုံးဖြတ်ခဲ့သည်။
ဒါကို အသိုင်းအဝိုင်းနဲ့ မျှဝေရတာ ဝမ်းသာပါတယ်။
ခွင
ဤပရောဂျက်ကို စိတ်အားထက်သန်မှုတစ်ခုတည်းဖြင့် တီထွင်ထားခြင်းဖြစ်ပြီး သွက်လက်သောပရိုဂရမ်းမင်းဘာသာစကားများနယ်ပယ်တွင် ကမ္ဘာ့လွှမ်းမိုးမှုကို ဟန်ဆောင်ခြင်းမရှိပါ။
ဤဖွံ့ဖြိုးတိုးတက်မှုအား ကြိုးပမ်းဆောင်ရွက်ရမည့် စံနှုန်းတစ်ခုအဖြစ် မယူဆသင့်ပါ၊ ပရောဂျက်သည် စံမမီသော်လည်း ဖွံ့ဖြိုးဆဲဖြစ်သည်။
compiler အသစ်
ပရောဂျက်သိုလှောင်မှု၏ /mashc ဌာနခွဲတွင်၊ Mash (ဘာသာစကား၏ပထမဗားရှင်း) ဖြင့်ရေးသားထားသည့် compiler ၏ဗားရှင်းအသစ်ကို သင်တွေ့နိုင်သည်။
စုစည်းမှုတွင် asm စာရင်းတွင် ( stack-based VM အတွက် assembler အတွက်) တွင် code generator တစ်ခုရှိသည်။
လောလောဆယ် ကျွန်ုပ်သည် Java (JDK 1.8) အတွက် ဂျင်နရေတာ ဗားရှင်းကို ဖန်တီးနေပါသည်။
compiler ၏ ဗားရှင်းအသစ်သည် ဘာသာစကား၏ ပထမဗားရှင်း၏ လုပ်ဆောင်နိုင်စွမ်းကို အပြည့်အဝ ထောက်ခံပြီး ၎င်းကို ဖြည့်စွက်သည်။
OOP အသစ်
ဘာသာစကား၏ ဗားရှင်းအသစ်တွင်၊ အတန်းများနှင့် အလုပ်များကို တစ်စိတ်တစ်ပိုင်း ပြန်လည်ဒီဇိုင်းထုတ်ထားပါသည်။
အတန်းနည်းလမ်းများကို အတန်းကိုယ်ထည်တွင်ရော ပြင်ပတွင်ပါ ကြေငြာနိုင်ပါသည်။
ယခု class တွင် တိကျသေချာသော constructor ရှိသည်- init ။
နမူနာကုဒ်-
...
class MyClass:
private:
var a, b
public:
init(a, b):
$a ?= a
$b ?= b
end
func Foo():
return $a + $b
end
end
func MyClass::Bar(c):
return $a + $b + c
end
...
အမွေဆက်ခံမှု ဖြစ်ပေါ်လာပါက၊ ကျွန်ုပ်တို့သည် အမွေဆက်ခံသောခေါ်ဆိုမှုများ (စူပါ) ကို အလွယ်တကူ ပြုလုပ်နိုင်ခွင့်ရှိသည်။
နမူနာကုဒ်-
...
class MySecondClass(MyClass):
public:
var c
init(a, b, c):
super(a, b)
$c ?= c
end
func Bar():
super($c)
end
end
...
x ?= new MySecondClass(10, 20, 30)
println( x -> Bar() ) // 60
အတန်းအစား စံနမူနာများပေါ်ရှိ နည်းလမ်းများ၏ ဒိုင်းနမစ်ကို လွှမ်းမိုးခြင်း-
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
အထုပ်များ/အမည်နေရာများ
namespace သည် သန့်ရှင်းနေရပါမည်။
ထို့ကြောင့် ဘာသာစကားသည် ဤအခွင့်အရေးကို ပေးရမည်။
Mash တွင်၊ class method တစ်ခုသည် static ဖြစ်ပါက၊ ၎င်းကို code ၏ မည်သည့်အစိတ်အပိုင်းမှ ဘေးကင်းစွာ ခေါ်နိုင်သည်။
ဥပမာ:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
စကားမစပ်၊ စူပါအော်ပရေတာသည် ဤနည်းဖြင့် ခေါ်သောအခါ မှန်ကန်စွာ အလုပ်လုပ်ပါမည်။
ခြွင်းချက်
ဘာသာစကား၏ ဗားရှင်းအသစ်တွင် ၎င်းတို့ကို အတန်းများကဲ့သို့ သဘောထားသည်-
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
enum အသစ်
ယခု စာရင်းကောက်သည့် အစိတ်အပိုင်းများကို ကိန်းသေတန်ဖိုးများ သတ်မှတ်နိုင်သည်-
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
ထည့်သွင်းထားသော ဘာသာစကား
ဖြစ်နိုင်ချေအားဖြင့်၊ Mash သည် Lua နှင့်ဆင်တူသော မြှုပ်သွင်းထားသော ပရိုဂရမ်ဘာသာစကားတစ်ခုအဖြစ် ၎င်း၏ နယ်ပယ်ကို ရှာဖွေနိုင်သည်။
ဤရည်ရွယ်ချက်များအတွက် Mash ကိုစသုံးရန်၊ ပရောဂျက်ကို သင်ကိုယ်တိုင် စုစည်းရန်ပင်မလိုအပ်ပါ။
Mash တွင် API အပြည့်အစုံပါရှိသော ဒိုင်းနမစ်စာကြည့်တိုက်အဖြစ် စုစည်းထားသော stack-based VM တစ်ခု Runtime Environment တစ်ခုရှိသည်။
သင်လုပ်ရန်လိုအပ်သည်မှာ ၎င်းကို ပရောဂျက်မှီခိုမှုသို့ ပေါင်းထည့်ကာ ဖုန်းခေါ်ဆိုမှု နှစ်ကြိမ်ပြုလုပ်ပါ။
ဘာသာစကားကိုယ်တိုင်က မြှုပ်သွင်းထားသော ဘာသာစကားအဖြစ် အလုပ်လုပ်ရန် လုပ်ဆောင်နိုင်စွမ်းကို ထောက်ပံ့ပေးသည်။
တစ်ချိန်တည်းမှာပင်၊ ဘာသာစကားနှင့် ပြင်ပအဖွဲ့အစည်းစာကြည့်တိုက်များနှင့် တွဲဖက်လုပ်ဆောင်မှုအပေါ် ထိခိုက်မှုမရှိပါ။
ကျွန်ုပ်တို့သည် ၎င်းတွင်ရေးထားသော ဘောင်အမျိုးမျိုး၏ စွမ်းအားအပြည့်ဖြင့် အသုံးပြုနိုင်သော မြှုပ်သွင်းဘာသာစကားတစ်ခုကို ရရှိပါသည်။
Mash + JVM
JVM အတွက် ဘာသာပြန်ဆိုသူ ဗားရှင်းတစ်ခုကို စတင်တီထွင်ခဲ့တယ်။
အချိန်အတိုင်းအတာတစ်ခုကြာပြီးနောက်၊ ဤအကြောင်းအရာနှင့်ပတ်သက်သည့် ပို့စ်တစ်ခု Habre တွင် ပေါ်လာမည်ဖြစ်သည်။
ရလဒ်များကို
သီးခြားရလဒ်များမရှိပါ။ ၎င်းသည် ရလဒ်များ၏ အလယ်အလတ်ကိုယ်စားပြုမှုဖြစ်သည်။
2020 မှာ အားလုံးကံကောင်းကြပါစေ။
source: www.habr.com