Groete aan almal in die nuwe jaar 2020.
Sedert die publikasie van die eerste
Gedurende hierdie jaar is die taal baie verbeter, baie van sy aspekte is deurdink en 'n ontwikkelingsvektor is bepaal.
Dit alles wat ek graag met die gemeenskap deel.
Vrywaring
Hierdie projek word uitsluitlik op entoesiasme ontwikkel en gee nie voor om wêreldoorheersing op die gebied van dinamiese programmeertale nie!
Jy moet nie hierdie ontwikkeling beskou as 'n standaard waarna jy moet streef nie, die projek is nie ideaal nie, maar dit ontwikkel nietemin.
Nuwe samesteller
In die /mashc-tak van die projekbewaarplek kan u die nuwe weergawe van die samesteller sien, wat in Mash geskryf is (die eerste weergawe van die taal).
Die samesteller het 'n kodegenerator in die asm-lys (vir samesteller onder die stapel VM).
Op die oomblik ontwikkel ek 'n weergawe van die generator vir Java (JDK 1.8).
Die nuwe weergawe van die samesteller ondersteun ten volle die funksionaliteit van die eerste weergawe van die taal en vul dit aan.
Nuwe OOP
In die nuwe weergawe van die taal is werk met klasse ietwat herontwerp.
Klasmetodes kan beide in die klasliggaam en daarbuite verklaar word.
Die klas het nou 'n eksplisiete konstruktor: init.
Kode voorbeeld:
...
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 oorerwing plaasvind, dan het ons die vermoë om maklik geërfde oproepe te maak (super).
Kode voorbeeld:
...
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
Dinamiese oorheersing van metodes vir klasgevalle:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Pakkette / Naamruimtes
Die naamruimte moet skoon bly!
Gevolglik moet die taal hierdie geleentheid bied.
In Mash, as 'n klasmetode staties is, kan dit veilig vanaf enige deel van die kode geroep word.
Voorbeeld:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Terloops, die superoperateur sal reg werk met so 'n oproep.
uitsonderings
In die nuwe weergawe van die taal word hulle soos klasse behandel:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Nuwe enum
Nou kan konstante waardes aan die elemente van die opsomming toegeken word:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Ingebedde PL
Potensieel - Mash kan sy nis vind as 'n inbedbare programmeertaal, soos Lua.
Om Mash vir hierdie doeleindes te begin gebruik, hoef jy nie eers die projek self te bou nie.
Mash het 'n Runtime Environment - 'n stapel VM gebou as 'n dinamiese biblioteek met 'n volledige API.
U hoef dit net by die projekafhanklikhede te voeg en 'n paar oproepe te maak.
Die taal self bied funksionaliteit om as 'n ingebedde taal te werk.
Terselfdertyd word prestasie in samewerking met taal- en derdepartybiblioteke nie geskend nie.
Ons kry 'n inbedbare taal wat die volle krag van verskeie raamwerke wat daarin geskryf is, kan gebruik.
Mash + JVM
Het begin om 'n weergawe van die vertaler vir die JVM te ontwikkel.
Miskien sal na die N-de tyd 'n plasing oor hierdie onderwerp op Habré verskyn.
Resultate van
Daar is geen spesifieke resultate nie. Dit is 'n intermediêre voorstelling van die resultate.
Sterkte aan almal in 2020.
Bron: will.com