Tervitused kõigile uuel aastal 2020.
Alates esimese avaldamisest
Selle aasta jooksul sai keelt kõvasti täiustatud, paljud selle aspektid läbi mõeldud ja arenguvektor määratud.
Mul on hea meel seda kõike kogukonnaga jagada.
Kaebused
Seda projekti arendatakse ainult entusiastlikult ja see ei pretendeeri maailma domineerimisele dünaamiliste programmeerimiskeelte valdkonnas!
Seda arengut ei tohiks pidada standardiks, mille poole püüelda, projekt pole ideaalne, kuid areneb sellegipoolest.
Uus kompilaator
Projekti hoidla harus /mashc näete kompilaatori uut versiooni, mis on kirjutatud Mashis (keele esimene versioon).
Kompilaatoril on asm-loendis koodigeneraator (pinupõhise VM-i monteerija jaoks).
Praegu töötan välja Java generaatori versiooni (JDK 1.8).
Kompilaatori uus versioon toetab täielikult keele esimese versiooni funktsionaalsust ja täiendab seda.
Uus OOP
Keele uues versioonis on töö klassidega osaliselt ümber kujundatud.
Klassimeetodeid saab deklareerida nii klassi kehas kui ka väljaspool seda.
Klassil on nüüd selge konstruktor: init.
Näidiskood:
...
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
...
Pärimise korral on meil võimalus pärandatud kõnesid lihtsalt teha (super).
Näidiskood:
...
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
Meetodite dünaamiline alistamine klassi eksemplaridel:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Paketid/nimeruumid
Nimeruum peab jääma puhtaks!
Sellest lähtuvalt peab keel selle võimaluse pakkuma.
Kui Mashis on klassimeetod staatiline, saab seda turvaliselt välja kutsuda mis tahes koodiosast.
Näide:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Muide, superoperaator töötab sel viisil kutsudes õigesti.
Erandid
Keele uues versioonis käsitletakse neid klassidena:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Uus enum
Nüüd saab loenduselementidele määrata konstantsed väärtused:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Manustatud keel
Võimalik, et Mash võib sarnaselt Luaga leida oma niši manustatud programmeerimiskeelena.
Mashi nendel eesmärkidel kasutamise alustamiseks ei pea te isegi projekti ise kokku panema.
Mashil on Runtime Environment – pinupõhine VM, mis on kompileeritud täieliku API-ga dünaamilise raamatukoguna.
Kõik, mida pead tegema, on lisada see projekti sõltuvusse ja teha paar kõnet.
Keel ise pakub manustatud keelena töötamiseks funktsioone.
Samal ajal ei mõjuta see keele ja kolmandate osapoolte raamatukogude toimivust.
Saame sisseehitatud keele, mis suudab kasutada kõigi sellesse kirjutatud raamistike võimsust.
Mash + JVM
Hakkasin JVM-i jaoks tõlkija versiooni välja töötama.
Võib-olla ilmub N aja pärast Habres selleteemaline postitus.
Tulemused
Erilisi tulemusi pole. See on tulemuste vahepealne esitus.
Edu kõigile 2020. aastal.
Allikas: www.habr.com