
Tere kÔigile uuel 2020. aastal.
Esimese avaldamise hetkest möödus praktiliselt tÀpselt aasta.
Selle aasta jooksul on keel olnud oluliselt tÀiustatud, paljusid selle aspekte on lÀbi mÔeldud ja arengusuund on mÀÀratletud.
Olen sellest kÔigest rÔÔmus, et saan jagada kogukonnaga.
MĂ€rkus
See projekt areneb puhtalt entusiasmist ega pĂŒrgi maailmavalitsemisele dĂŒnaamiliste programmeerimiskeelte valdkonnas!
Ărge kĂ€sitlege seda arendust ideaalina, mille poole peaks pĂŒĂŒdlema, projekt ei ole ideaalne, kuid siiski areneb.
Uus kompilaator
Projektikaustas /mashc saate nÀha uut kompilaatori versiooni, mis on kirjutatud Mash'is (keele esimeses versioonis).
Kompilaatoril on koodigeneraator asm-listing (stak VM jaoks mÔeldud assembleri jaoks).
Praegu töötan Java (JDK 1.8) generaatorkomplekti versiooni kallal.
Uus kompilaatori versioon toetab tÀielikult esimeses versioonis oleva keele funktsionaalsust ja tÀiendab seda.
Uus OOP
Keele uues versioonis on osaliselt ĂŒmber töötatud klasside kĂ€sitlemine.
Klassi meetodeid saab deklareerida nii klassi kehas kui ka vÀljaspool seda.
Klassil on nĂŒĂŒd selgelt mÀÀratletud konstruktor: init.
KoodinÀide:
...
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
...
Kui toimub pÀrimine, saame hÔlpsasti teha lause inherited (super).
KoodinÀide:
...
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
DĂŒnaamiline meetodite ĂŒledefineerimine klasside eksemplaridel:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Paketid / nimeserverid
Nimeserver peab jÀÀma puhtaks!
Seega peab keel seda vÔimalust pakkuma.
Mashâs, kui klassi meetod on staatiline â seda saab ohutult kutsuda igast koodijuhist.
NĂ€ide:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println(MyPackage -> MyFunc(10, 20)) // 30
Muide, operaator super sellise vÀljakutse korral töötab Ôigesti.
Erandid
Keela uues versioonis töödeldakse nagu klasse:
...
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 saavad loendielemendid omada konstantseid vÀÀrtuseid:
enum MyEnum [
meFirst = "Esimene",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Sisse embeditav programmeerimiskeel
Potentsiaalselt vÔib Mash vÔtta oma koha sisse embeditava programmeerimiskeelena, samasuguse nagu Lua.
Mashâi kasutamiseks nende eesmĂ€rkide saavutamiseks ei ole isegi vajalik projekti ise kokku panna.
Mash'il on Runtime Environment â virna VM, mis on koostatud dĂŒnaamilise raamatukoguna tĂ€ieĂ”igusliku API-iga.
On vajalik lisada see ainult projekti sÔltuvustesse ja teha paar vÀljakutset.
Keeles on ette nÀhtud funktsionaalsus, et toimida embeditava keele kujul.
Samas ei riku see koostalitlust keele- ja kolmandate osapoolte raamatukogudega.
Saame embeditava keele, mis suudab kasutada erinevate raamistikute kogu jÔudu, mis on sellel kirjutatud.
Mash + JVM
Alustasin JVM-i jaoks tÔlgi versiooni arendamist.
VÔib-olla ilmub N aja jooksul Habr's selle teema kohta postitus.
KokkuvÔte
Erilised tulemused puuduvad. See on vahekokkuvÔte tulemustest.
Kaua Ônne 2020. aastal.
Allikas: habr.com
