Groetnis oan allegearre yn it nije jier 2020.
Sûnt de publikaasje fan 'e earste
Yn dit jier is de taal flink ferbettere, in protte aspekten derfan úttocht en is in ûntwikkelingsvektor bepaald.
Dit alles bin ik bliid om te dielen mei de mienskip.
Disclaimer
Dit projekt wurdt allinnich ûntwikkele op entûsjasme en docht net foar as wrâldoerhearsking op it mêd fan dynamyske programmeartalen!
Jo moatte dizze ûntwikkeling net beskôgje as in standert wêrop jo moatte stribje, it projekt is net ideaal, mar it ûntwikkelt lykwols.
Nije gearstaller
Yn 'e /mashc-tûke fan it projektrepository kinne jo de nije ferzje fan' e kompilator sjen, dy't skreaun is yn Mash (de earste ferzje fan 'e taal).
De gearstaller hat in koadegenerator yn 'e asm-listing (foar assembler ûnder de stapel VM).
Op it stuit bin ik it ûntwikkeljen fan in ferzje fan de generator foar Java (JDK 1.8).
De nije ferzje fan 'e gearstaller stipet de funksjonaliteit fan' e earste ferzje fan 'e taal folslein en komplementearret it.
Nije OOP
Yn de nije ferzje fan de taal is it wurk mei klassen wat op 'e nij ynrjochte.
Klassemetoaden kinne wurde ferklearre sawol yn it klasselichem as bûten it.
De klasse hat no in eksplisite konstruktor: init.
Foarbyld fan koade:
...
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
...
As erfenis foarkomt, dan hawwe wy de mooglikheid om maklik erflike oproppen te meitsjen (super).
Foarbyld fan koade:
...
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
Dynamyske oerskriuwen fan metoaden foar klasse-eksimplaren:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Pakketten / nammeromten
De nammeromte moat skjin bliuwe!
Dêrom moat de taal dizze kâns biede.
Yn Mash, as in klassemetoade statysk is, kin it feilich neamd wurde fan elk diel fan 'e koade.
Foarbyld:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Troch de wei, de super operator sil wurkje goed mei sa'n oprop.
Utsûnderingen
Yn 'e nije ferzje fan' e taal wurde se behannele as klassen:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Nije enum
No kinne de eleminten fan 'e enumeraasje konstante wearden wurde tawiisd:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Ynsletten PL
Potinsjeel - Mash kin syn niche fine as in ynbêde programmeartaal, lykas Lua.
Om Mash foar dizze doelen te brûken, hoege jo it projekt net iens sels te bouwen.
Mash hat in Runtime Environment - in stack VM boud as in dynamyske bibleteek mei in folsleine API.
Jo moatte it gewoan tafoegje oan 'e projektôfhinklikens en in pear oproppen meitsje.
De taal sels jout funksjonaliteit om te wurkjen as in ynbêde taal.
Tagelyk wurdt prestaasjes yn gearhing mei taal- en bibleteken fan tredden net skeind.
Wy krije in ynbêde taal dy't de folsleine krêft brûke kin fan ferskate kaders dy't dêryn skreaun binne.
Mash + JVM
Begûn mei it ûntwikkeljen fan in ferzje fan 'e oersetter foar de JVM.
Miskien sil nei de N-de tiid in post oer dit ûnderwerp ferskine op Habré.
Resultaten
D'r binne gjin spesifike resultaten. Dit is in tuskenlizzende foarstelling fan de resultaten.
Sterkte foar elkenien yn 2020.
Boarne: www.habr.com