Saluti à tutti in u novu annu 2020.
Dapoi a publicazione di u primu
In questu annu, a lingua hè stata assai migliurata, parechji di i so aspetti sò stati pensati è u vettore di u sviluppu hè statu determinatu.
Sò felice di sparte tuttu questu cù a cumunità.
Légales
Stu prughjettu hè sviluppatu solu nantu à l'entusiasmu è ùn pretende micca a duminazione mundiale in u campu di i linguaggi di prugrammazione dinamichi !
Stu sviluppu ùn deve esse cunsideratu cum'è un standard per sforzà; u prugettu ùn hè micca ideale, ma si sviluppa sempre.
Novu compilatore
In u ramu /mashc di u repositoriu di u prughjettu, pudete vede una nova versione di u compilatore, chì hè scrittu in Mash (a prima versione di a lingua).
U compilatore hà un generatore di codice in a lista asm (per assembler per una VM basata in stack).
Attualmente sò sviluppatu una versione di u generatore per Java (JDK 1.8).
A nova versione di u compilatore sustene cumplettamente a funziunalità di a prima versione di a lingua è cumplementa.
Novu OOP
In a nova versione di a lingua, u travagliu cù e classi hè statu parzialmente riprogettatu.
I metudi di classi ponu esse dichjarati in u corpu di classi è fora di questu.
A classe hà avà un custruttore esplicitu: init.
Codice di mostra:
...
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
...
Se l'eredi si trova, allora avemu l'uppurtunità di fà facilmente chjamate ereditate (super).
Codice di mostra:
...
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
Overriding dinamicu di metudi nantu à istanze di classi:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Pacchetti/spazi di nomi
U namespace deve esse pulitu!
Per quessa, a lingua deve furnisce questa opportunità.
In Mash, se un metudu di classi hè staticu, pò esse chjamatu sicuru da ogni parte di u codice.
Esempiu:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
In modu, u super operatore hà da travaglià currettamente quandu chjamatu in questu modu.
Eccezziune
In a nova versione di a lingua sò trattati cum'è classi:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Enum novu
Avà l'elementi di enumerazione ponu esse attribuiti valori custanti:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Lingua incrustata
Potenzialmente, Mash pò truvà u so nichulu cum'è una lingua di prugrammazione integrata, simili à Lua.
Per cumincià à aduprà Mash per questi scopi, ùn avete mancu bisognu di assemblà u prugettu stessu.
Mash hà un Ambiente Runtime - una VM basata in stack compilata cum'è una biblioteca dinamica cù una API completa.
Tuttu ciò chì duvete fà hè aghjunghje à a dependenza di u prughjettu è fà un paru di chjama.
A lingua stessa furnisce funziunalità per travaglià cum'è una lingua integrata.
À u listessu tempu, u funziunamentu in cunghjunzione cù e biblioteche di lingua è di terzu ùn hè micca affettatu.
Avemu una lingua incrustata chì pò aduprà u pienu putere di diversi frameworks scritti in questu.
Mash + JVM
Aghju cuminciatu à sviluppà una versione di u traduttore per a JVM.
Forsi, dopu à N quantità di tempu, un postu nantu à questu tema appariscerà in Habré.
Risultati
Ùn ci sò micca risultati particulari. Questa hè una rappresentazione intermedia di i risultati.
Bona furtuna à tutti in 2020.
Source: www.habr.com