Zorionak guztioi 2020 urte berrian.
Lehenengoa argitaratu zenetik
Urte honetan zehar, hizkuntza asko hobetu zen, bere alderdi asko pentsatu eta garapenaren bektorea zehaztu zen.
Pozik nago hori guztia komunitatearekin partekatzeaz.
Lege-oharra
Proiektu hau ilusioz bakarrik garatzen ari da eta ez du programazio-lengoaia dinamikoen alorrean munduko dominaziorik nahi!
Garapen hori ez da hartu behar ahalegintzeko estandar gisa; proiektua ez da ideala, baina garatzen ari da, hala ere.
Konpilatzaile berria
Proiektuaren biltegiko /mashc adarrean, konpilatzailearen bertsio berri bat ikus dezakezu, Mash-en idatzita dagoena (hizkuntzaren lehen bertsioa).
Konpilatzaileak kode-sorgailu bat du asm zerrendan (pilean oinarritutako VM baterako mihiztatzailearentzat).
Une honetan Javarako sorgailuaren bertsio bat garatzen ari naiz (JDK 1.8).
Konpilatzailearen bertsio berriak hizkuntzaren lehen bertsioaren funtzionaltasuna guztiz onartzen du eta hura osatzen du.
OOP berria
Hizkuntzaren bertsio berrian, klaseekin egindako lana partzialki birmoldatu da.
Klase-metodoak klasearen gorputzean zein kanpoan deklara daitezke.
Klaseak eraikitzaile esplizitu bat du orain: init.
Adibidea kodea:
...
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
...
Herentzia gertatzen bada, herentziazko deiak erraz egiteko aukera dugu (super).
Adibidea kodea:
...
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
Metodoen gainidazketa dinamikoa klase-instantzietan:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Paketeak/izen-espazioak
Izen-guneak garbi egon behar du!
Horren arabera, hizkuntzak eman behar du aukera hori.
Mash-en, klase-metodo bat estatikoa bada, segurtasunez dei daiteke kodearen edozein zatitatik.
Adibidea:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Bide batez, super-operadoreak behar bezala funtzionatuko du horrela deitzen denean.
salbuespenak
Hizkuntzaren bertsio berrian klaseak bezala tratatzen dira:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Enumerazio berria
Orain enumerazio-elementuei balio konstanteak esleitu dakizkieke:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Hizkuntza txertatua
Potentzialki, Mash-ek bere nitxoa aurki dezake txertatutako programazio-lengoaia gisa, Lua-ren antzera.
Helburu horietarako Mash erabiltzen hasteko, ez duzu proiektua zuk zeuk muntatu beharrik ere.
Mash-ek Runtime Environment bat du: pila batean oinarritutako VM liburutegi dinamiko gisa konpilatuta API osoarekin.
Proiektuaren menpekotasunari gehitu eta dei pare bat egitea besterik ez duzu behar.
Hizkuntzak berak funtzionalitateak eskaintzen ditu hizkuntza txertatu gisa lan egiteko.
Aldi berean, hizkuntzaren eta hirugarrenen liburutegiekin batera errendimendua ez da eragiten.
Bertan idatzitako hainbat esparruren botere osoa erabil dezakeen txertatutako hizkuntza bat lortzen dugu.
Mash + JVM
JVMrako itzultzailearen bertsio bat garatzen hasi nintzen.
Agian, N denboraren buruan, gai honi buruzko argitalpen bat agertuko da HabrΓ©-n.
Emaitzak
Ez dago emaitza berezirik. Hau emaitzen tarteko irudikapena da.
Zorte on guztioi 2020an.
Iturria: www.habr.com