Sveiciens visiem jaunajā 2020. gadā.
Kopš pirmās publicēšanas
Šī gada laikā valoda tika krietni pilnveidota, pārdomāti daudzi tās aspekti un noteikts attīstības vektors.
Es priecājos dalīties tajā visā ar sabiedrību.
Atbildības noraidīšana
Šis projekts tiek izstrādāts tikai aiz entuziasma un nepretendē uz pasaules kundzību dinamisko programmēšanas valodu jomā!
Šo attīstību nevajadzētu uzskatīt par standartu, uz kuru jātiecas, projekts nav ideāls, taču tas attīstās.
Jauns kompilators
Projekta repozitorija filiālē /mashc var redzēt jaunu kompilatora versiju, kas ir rakstīta Mash (pirmā valodas versija).
Kompilatoram ir koda ģenerators asm sarakstā (uz steku balstītas virtuālās mašīnas montētājam).
Pašlaik es izstrādāju ģeneratora versiju Java (JDK 1.8).
Jaunā kompilatora versija pilnībā atbalsta pirmās valodas versijas funkcionalitāti un papildina to.
Jauns OOP
Jaunajā valodas versijā darbs ar klasēm ir daļēji pārveidots.
Klases metodes var deklarēt gan klases pamattekstā, gan ārpus tā.
Klasei tagad ir skaidrs konstruktors: init.
Koda piemērs:
...
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
...
Ja notiek mantojums, tad mums ir iespēja ērti veikt mantotos zvanus (super).
Koda piemērs:
...
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
Dinamiskā metožu ignorēšana klases gadījumos:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Paketes/nosaukumvietas
Nosaukumvietai jāpaliek tīrai!
Attiecīgi valodai ir jānodrošina šī iespēja.
Mash, ja klases metode ir statiska, to var droši izsaukt no jebkuras koda daļas.
Piemērs:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Starp citu, superoperators strādās pareizi, kad šādi izsauc.
Izņēmumi
Jaunajā valodas versijā tās tiek uzskatītas par klasēm:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Jauns enum
Tagad uzskaites elementiem var piešķirt nemainīgas vērtības:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Iegultā valoda
Potenciāli Mash var atrast savu nišu kā iegultā programmēšanas valoda, līdzīga Lua.
Lai sāktu izmantot Mash šiem mērķiem, jums pat nav nepieciešams pats salikt projektu.
Mash ir izpildlaika vide — uz steku balstīta VM, kas apkopota kā dinamiska bibliotēka ar pilnu API.
Viss, kas jums jādara, ir pievienot to projekta atkarībai un veikt pāris zvanu.
Pati valoda nodrošina funkcionalitāti darbam kā iegultai valodai.
Tajā pašā laikā netiek ietekmēta veiktspēja saistībā ar valodu un trešo pušu bibliotēkām.
Mēs iegūstam iegultu valodu, kas var izmantot visu tajā ierakstīto dažādu ietvaru jaudu.
Mash + JVM
Es sāku izstrādāt tulka versiju JVM.
Iespējams, pēc N laika Habré parādīsies ziņa par šo tēmu.
Rezultāti
Nav īpašu rezultātu. Šis ir rezultātu starpposms.
Veiksmi visiem 2020. gadā.
Avots: www.habr.com