Ngibingelele wonke umuntu onyakeni omusha ka-2020.
Kusukela kushicilelwe owokuqala
Ngalo nyaka, ulimi lwenziwe ngcono kakhulu, izici zalo eziningi zacatshangelwa futhi kwanqunywa nevector yentuthuko.
Ngiyajabula ukwabelana ngakho konke lokhu nomphakathi.
Disclaimer
Le phrojekthi ithuthukiswa ngentshiseko kuphela futhi ayizenzi iqola umhlaba wonke emkhakheni wezilimi zokuhlela eziguqukayo!
Le ntuthuko akufanele ithathwe njengendinganiso okufanele iphokophele; iphrojekthi ayilungile, kodwa iyathuthuka noma kunjalo.
Umhlanganisi omusha
Egatsheni le-/mashc lenqolobane yephrojekthi, ungabona inguqulo entsha ye-comiler, ebhalwe nge-Mash (inguqulo yokuqala yolimi).
Umhlanganisi unejeneretha yekhodi ohlwini lwe-asm (yesihlanganisi se-VM esekelwe kusitaki).
Njengamanje ngithuthukisa inguqulo yejeneretha ye-Java (JDK 1.8).
Inguqulo entsha ye-comiler isekela ngokugcwele ukusebenza kwenguqulo yokuqala yolimi futhi iyahambisana nayo.
I-OOP entsha
Enguqulweni entsha yolimi, umsebenzi wamakilasi uklanywe kabusha ngokwengxenye.
Izindlela zekilasi zingamenyezelwa kokubili emzimbeni wekilasi nangaphandle kwawo.
Ikilasi manje selinomakhi ocacile: init.
Ikhodi yesampula:
...
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
...
Uma ifa livela, khona-ke sinethuba lokushaya kalula izingcingo ezizuzwe njengefa (super).
Ikhodi yesampula:
...
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
Ukweqa okunamandla kwezindlela ezimweni zekilasi:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Amaphakheji/izikhala zamagama
Indawo yamagama kufanele ihlale ihlanzekile!
Ngokunjalo, ulimi kumele lunikeze leli thuba.
Ku-Mash, uma indlela yekilasi imile, ingabizwa ngokuphephile kunoma iyiphi ingxenye yekhodi.
Isibonelo:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Ngendlela, i-super operator izosebenza kahle uma ibizwa ngale ndlela.
Ukungafani
Enguqulweni entsha yolimi baphathwa njengamakilasi:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Inombolo entsha
Manje izici zokubala zingabelwa amanani angashintshi:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Ulimi olushumekiwe
Ngokunokwenzeka, i-Mash ingathola i-niche yayo njengolimi lokuhlela olushumekiwe, olufana nesiLua.
Ukuze uqale ukusebenzisa i-Mash ngalezi zinhloso, awudingi ngisho nokuhlanganisa iphrojekthi ngokwakho.
I-Mash ine-Runtime Environment - i-VM esekelwe kusitaki ehlanganiswe njengomtapo wezincwadi onamandla one-API egcwele.
Odinga ukukwenza nje ukuyengeza ekuncikeni kwephrojekthi futhi ushaye izingcingo ezimbalwa.
Ulimi ngokwalo luhlinzeka ngokusebenza ukuze lusebenze njengolimi olushumekiwe.
Ngesikhathi esifanayo, ukusebenza ngokuhlanganyela nemitapo yolwazi yolimi kanye nezinkampani zangaphandle akuthintwa.
Sithola ulimi olushumekiwe olungasebenzisa amandla aphelele ezinhlaka ezahlukene ezibhalwe kulo.
I-Mash + JVM
Ngaqala ukwakha inguqulo yomhumushi we-JVM.
Mhlawumbe, ngemva kwenani lesikhathi esingu-N, okuthunyelwe kulesi sihloko kuzovela ku-HabrΓ©.
Imiphumela
Ayikho imiphumela ethile. Lokhu ukumelwa okuphakathi kwemiphumela.
Nginifisela inhlanhla nonke ngo-2020.
Source: www.habr.com