Moni kwa nonse m'chaka chatsopano cha 2020.
Kuyambira kusindikizidwa koyamba
M'chaka chino, chinenerocho chinasinthidwa kwambiri, mbali zake zambiri zinaganiziridwa ndipo vector ya chitukuko inatsimikiziridwa.
Ndine wokondwa kugawana zonsezi ndi anthu ammudzi.
chandalama
Pulojekitiyi ikupangidwa mwachidwi chabe ndipo simadzinamizira kuti ikulamulira dziko lonse pazilankhulo zamphamvu zamapulogalamu!
Kutukuka kumeneku sikuyenera kuganiziridwa ngati mulingo womwe uyenera kulimbikira; pulojekitiyi si yabwino, koma ikukulabe.
Wopanga watsopano
Munthambi ya / mashc ya malo osungira polojekiti, mukhoza kuona mtundu watsopano wa compiler, womwe unalembedwa mu Mash (chiyankhulo choyamba).
Wopangayo ali ndi jenereta yama code pamndandanda wa asm (ophatikiza pa VM yochokera pa stack).
Panopa ndikupanga mtundu wa jenereta wa Java (JDK 1.8).
Mtundu watsopano wa compiler umathandizira kwathunthu magwiridwe antchito amtundu woyamba wa chilankhulo ndikukwaniritsa.
OOP yatsopano
M'chinenero chatsopanochi, ntchito yokhudzana ndi makalasi yasinthidwa pang'ono.
Njira zamakalasi zitha kulengezedwa mu gulu la kalasi komanso kunja kwake.
Kalasiyi tsopano ili ndi womanga momveka bwino: init.
Chitsanzo kodi:
...
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
...
Ngati cholowa chimachitika, ndiye kuti tili ndi mwayi woti tiyimbe mafoni otengera (wapamwamba).
Chitsanzo kodi:
...
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
Kuchulukitsa kwamphamvu kwa njira zamakalasi:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Phukusi/malo a mayina
Malo a mayina ayenera kukhala oyera!
Choncho, chinenero chiyenera kupereka mwayi umenewu.
Ku Mash, ngati njira ya kalasi ili yokhazikika, imatha kuyitanidwa kuchokera kugawo lililonse la code.
Chitsanzo:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Mwa njira, woyang'anira wapamwamba adzagwira ntchito moyenera akaitanidwa motere.
Kupatulapo
Mu mtundu watsopano wa chilankhulo amatengedwa ngati makalasi:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Enum yatsopano
Tsopano zinthu zowerengera zitha kuperekedwa nthawi zonse:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Chilankhulo chophatikizidwa
Mwachidziwikire, Mash atha kupeza niche yake ngati chilankhulo chophatikizidwa, chofanana ndi Lua.
Kuti muyambe kugwiritsa ntchito Mash pazifukwa izi, simuyenera kusonkhanitsa polojekitiyo nokha.
Mash ali ndi Runtime Environment - VM yokhala ndi stack yopangidwa ngati laibulale yamphamvu yokhala ndi API yathunthu.
Zomwe muyenera kuchita ndikuwonjezera kudalira kwa polojekiti ndikuyimba mafoni angapo.
Chilankhulo chokha chimapereka magwiridwe antchito kuti agwire ntchito ngati chilankhulo chophatikizidwa.
Nthawi yomweyo, magwiridwe antchito molumikizana ndi malaibulale achilankhulo komanso ena sakhudzidwa.
Timapeza chinenero chophatikizidwa chomwe chingagwiritse ntchito mphamvu zonse zamagulu osiyanasiyana olembedwa mmenemo.
Mash + JVM
Ndinayamba kupanga mtundu wa womasulira wa JVM.
Mwina, pambuyo pa N kuchuluka kwa nthawi, cholemba pamutuwu chidzawonekera pa HabrΓ©.
Zotsatira
Palibe zotsatira zapadera. Ichi ndi choyimira chapakati cha zotsatira.
Zabwino zonse kwa aliyense mu 2020.
Source: www.habr.com