Üdvözlök mindenkit a 2020-as új évben.
Az első megjelenése óta
Az idei év során a nyelvet nagymértékben fejlesztették, számos szempontját átgondolták és meghatározták a fejlődés vektorát.
Örömmel osztom meg mindezt a közösséggel.
A felelősség megtagadása
Ezt a projektet kizárólag lelkesedésből fejlesztjük, és nem akar világuralomra hivatkozni a dinamikus programozási nyelvek területén!
Ezt a fejlesztést nem kell követendő mércének tekinteni, a projekt nem ideális, de azért fejlődik.
Új fordító
A projekttár /mashc ágában a fordító új verziója látható, amely Mash-ban (a nyelv első változata) van írva.
A fordító rendelkezik egy kódgenerátorral az asm listában (a verem alapú virtuális gépek összeállítójához).
Jelenleg a generátor Java (JDK 1.8) verzióját fejlesztem.
A fordító új verziója teljes mértékben támogatja a nyelv első verziójának funkcionalitását és kiegészíti azt.
Új OOP
A nyelv új verziójában az osztályokkal végzett munka részben át lett alakítva.
Az osztálymetódusok deklarálhatók az osztálytörzsben és azon kívül is.
Az osztálynak most van egy explicit konstruktora: init.
Minta kód:
...
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
...
Ha öröklődés következik be, akkor lehetőségünk van az örökölt hívások egyszerű lebonyolítására (szuper).
Minta kód:
...
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
Metódusok dinamikus felülbírálása osztálypéldányokon:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Csomagok/névterek
A névtérnek tisztának kell maradnia!
Ennek megfelelően a nyelvnek biztosítania kell ezt a lehetőséget.
A Mash-ban, ha egy osztálymetódus statikus, biztonságosan meghívható a kód bármely részéből.
Példa:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Egyébként a szuper operátor megfelelően fog működni, ha így hívják.
kivételek
A nyelv új verziójában ezeket osztályokként kezelik:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Új enum
Mostantól a felsorolási elemekhez állandó értékek rendelhetők:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Beágyazott nyelv
Lehetséges, hogy a Mash a Luához hasonlóan beágyazott programozási nyelvként is megtalálhatja a rést.
Ahhoz, hogy elkezdje használni a Mash-t ezekre a célokra, még saját maga sem kell összeállítania a projektet.
A Mash futásidejű környezettel rendelkezik – egy veremalapú virtuális gép, amely dinamikus könyvtárként van lefordítva teljes API-val.
Mindössze annyit kell tennie, hogy hozzáadja a projektfüggőséghez, és néhány hívást kezdeményez.
A nyelv maga biztosítja a beágyazott nyelvként való működést.
Ugyanakkor a nyelvi és harmadik féltől származó könyvtárak teljesítménye nincs hatással.
Kapunk egy beágyazott nyelvet, amely képes kihasználni a benne írt különféle keretrendszerek teljes erejét.
Mash + JVM
Elkezdtem fejleszteni a fordító verzióját a JVM-hez.
Talán N idő múlva megjelenik egy bejegyzés ebben a témában a Habrén.
Eredményei
Nincsenek különösebb eredmények. Ez az eredmények köztes ábrázolása.
Sok sikert mindenkinek 2020-ban.
Forrás: will.com