Gréiss un jiddereen am neie Joer 2020.
Zënter der Verëffentlechung vun der éischter
Wärend dësem Joer gouf d'Sprooch staark verbessert, vill vun hiren Aspekter goufe geduecht an de Vektor vun der Entwécklung gouf festgeluecht.
Ech si frou dëst alles mat der Gemeinschaft ze deelen.
Verzichterklärung
Dëse Projet gëtt eleng op Begeeschterung entwéckelt a mécht net wéi eng Weltherrschaft am Beräich vun dynamesche Programméierungssproochen!
Dës Entwécklung sollt net als Standard ugesi ginn fir no ze streiden; de Projet ass net ideal, awer et entwéckelt sech trotzdem.
Neie Compiler
An der /mashc Branche vum Projet Repository kënnt Dir eng nei Versioun vum Compiler gesinn, deen am Mash geschriwwe gëtt (déi éischt Versioun vun der Sprooch).
De Compiler huet e Code Generator an asm Oplëschtung (fir Assembler fir e Stack-baséiert VM).
Momentan entwéckelen ech eng Versioun vum Generator fir Java (JDK 1.8).
Déi nei Versioun vum Compiler ënnerstëtzt voll d'Funktionalitéit vun der éischter Versioun vun der Sprooch an ergänzt se.
Nei OOP
An der neier Versioun vun der Sprooch ass d'Aarbecht mat de Klassen deelweis nei entworf ginn.
Klassemethoden kënne souwuel am Klassekierper an ausserhalb deklaréiert ginn.
D'Klass huet elo en explizit Konstruktor: init.
Beispill Code:
...
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
...
Wann d'Ierfschaft geschitt, da hu mir d'Méiglechkeet einfach ierflech Uriff ze maachen (super).
Beispill Code:
...
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
Dynamesch Iwwerschreiden vu Methoden op Klassinstanzen:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Packagen / Nummraim
Den Nummraum muss propper bleiwen!
Deementspriechend muss d'Sprooch dës Méiglechkeet bidden.
Am Mash, wann eng Klassmethod statesch ass, kann se sécher aus all Deel vum Code genannt ginn.
Beispill:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Iwwregens, wäert de Super Bedreiwer richteg schaffen wann op dës Manéier genannt.
Ausnahmen
An der neier Versioun vun der Sprooch gi se wéi Klassen behandelt:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Nei Enum
Elo kënnen Opzielungselementer konstant Wäerter zougewisen ginn:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Embedded Sprooch
Potenziell kann Mash seng Nisch als embedded Programméiersprooch fannen, ähnlech wéi Lua.
Fir Mash fir dës Zwecker ze benotzen, musst Dir net emol de Projet selwer zesummestellen.
Mash huet e Runtime Environment - e Stack-baséiert VM kompiléiert als dynamesch Bibliothéik mat enger voller API.
Alles wat Dir maache musst ass et an d'Projetofhängegkeet ze addéieren an e puer Uruff ze maachen.
D'Sprooch selwer bitt Funktionalitéit fir als embedded Sprooch ze schaffen.
Zur selwechter Zäit ass d'Leeschtung a Verbindung mat Sprooch- an Drëttbibliothéiken net beaflosst.
Mir kréien eng embedded Sprooch déi déi voll Kraaft vu verschiddene Kaderen benotze kann, déi dra geschriwwe sinn.
Mash + JVM
Ech hunn ugefaang eng Versioun vum Iwwersetzer fir de JVM z'entwéckelen.
Vläicht, no N Zäit, e Post zu dësem Thema erschéngt op Habré.
Resultater
Et gi keng speziell Resultater. Dëst ass eng Zwëschenvertriedung vun de Resultater.
Vill Gléck fir jiddereen am Joer 2020.
Source: will.com