Insellem lil kulħadd fis-sena l-ġdida 2020.
Mill-pubblikazzjoni tal-ewwel
Matul din is-sena, il-lingwa tjiebet ħafna, ħafna mill-aspetti tagħha ġew maħsuba u ġie determinat il-vettur tal-iżvilupp.
Jien kuntent li naqsam dan kollu mal-komunità.
Ċaħda ta 'responsabbiltà
Dan il-proġett qed jiġi żviluppat biss fuq l-entużjażmu u ma jippretendix dominazzjoni dinjija fil-qasam tal-lingwi ta’ programmar dinamiċi!
Dan l-iżvilupp m'għandux jitqies bħala standard li għandu jsir sforz għalih; il-proġett mhuwiex ideali, iżda għadu qed jiżviluppa.
Kompilatur ġdid
Fil-fergħa /mashc tar-repożitorju tal-proġett, tista 'tara verżjoni ġdida tal-kompilatur, li hija miktuba f'Mash (l-ewwel verżjoni tal-lingwa).
Il-kompilatur għandu ġeneratur tal-kodiċi fil-lista asm (għall-assemblatur għal VM ibbażat fuq stack).
Bħalissa qed niżviluppa verżjoni tal-ġeneratur għal Java (JDK 1.8).
Il-verżjoni l-ġdida tal-kompilatur tappoġġja bis-sħiħ il-funzjonalità tal-ewwel verżjoni tal-lingwa u tikkumplimentaha.
OOP ġdid
Fil-verżjoni l-ġdida tal-lingwa, ix-xogħol bil-klassijiet ġie ddisinjat mill-ġdid parzjalment.
Il-metodi tal-klassi jistgħu jiġu ddikjarati kemm fil-korp tal-klassi kif ukoll barra minnu.
Il-klassi issa għandha kostruttur espliċitu: init.
Eżempju ta' kodiċi:
...
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
...
Jekk isseħħ il-wirt, allura għandna l-opportunità li faċilment nagħmlu sejħiet li jintirtu (super).
Eżempju ta' kodiċi:
...
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
Sostituzzjoni dinamika tal-metodi fuq istanzi tal-klassi:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Pakketti/ismijiet tal-ismijiet
L-ispazju tal-isem irid jibqa' nadif!
Għaldaqstant, il-lingwa għandha tipprovdi din l-opportunità.
F'Mash, jekk metodu ta 'klassi huwa statiku, jista' jissejjaħ mingħajr periklu minn kwalunkwe parti tal-kodiċi.
Eżempju:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Mill-mod, is-super-operatur se jaħdem b'mod korrett meta jissejjaħ b'dan il-mod.
Eċċezzjonijiet
Fil-verżjoni l-ġdida tal-lingwa huma trattati bħal klassijiet:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Enum ġdid
Issa l-elementi tal-enumerazzjoni jistgħu jiġu assenjati valuri kostanti:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Lingwa inkorporata
Potenzjalment, Mash jista 'jsib in-niċċa tiegħu bħala lingwa ta' programmar inkorporata, simili għal Lua.
Biex tibda tuża Mash għal dawn l-iskopijiet, lanqas biss għandek bżonn tiġbor il-proġett lilek innifsek.
Mash għandu Ambjent Runtime - VM ibbażat fuq munzell miġbur bħala librerija dinamika b'API sħiħa.
Kull ma trid tagħmel hu li żżidha mad-dipendenza tal-proġett u tagħmel ftit sejħiet.
Il-lingwa nnifisha tipprovdi funzjonalità biex taħdem bħala lingwa inkorporata.
Fl-istess ħin, il-prestazzjoni flimkien ma 'libreriji tal-lingwa u ta' partijiet terzi mhix affettwata.
Ikollna lingwa inkorporata li tista 'tuża s-saħħa sħiħa ta' diversi oqfsa miktuba fiha.
Maxx + JVM
Bdejt niżviluppa verżjoni tat-traduttur għall-JVM.
Forsi, wara N ammont ta' żmien, se tidher post dwar dan is-suġġett fuq Habré.
Riżultati ta '
M'hemmx riżultati partikolari. Din hija rappreżentazzjoni intermedja tar-riżultati.
Xorti tajba lil kulħadd fl-2020.
Sors: www.habr.com