Salam kanggo sadayana dina taun anyar 2020.
Kusabab publikasi munggaran
Sapanjang taun ieu, basa parantos ningkat pisan, seueur aspekna anu dipikiran sareng vektor pangwangunan ditangtukeun.
Abdi bagja ngabagi sadayana ieu sareng komunitas.
Bantahan
Proyék ieu dikembangkeun ngan ukur pikeun sumanget sareng henteu pura-pura dominasi dunya dina widang basa program dinamis!
Pangwangunan ieu henteu kedah dianggap salaku standar anu kedah diusahakeun; proyék éta henteu idéal, tapi éta berkembang.
kompiler anyar
Dina /mashc cabang Repository proyék, anjeun tiasa ningali versi anyar tina kompiler, nu ditulis dina Mash (versi mimiti basa).
Compiler ngabogaan generator kode dina asm Listing (pikeun assembler pikeun VM basis tumpukan).
Ayeuna kuring ngembangkeun versi generator pikeun Java (JDK 1.8).
Versi anyar kompiler pinuh ngarojong fungsionalitas versi munggaran basa jeung ngalengkepan eta.
OOP anyar
Dina versi anyar basa, karya kalawan kelas geus sawaréh redesigned.
Métode kelas tiasa dinyatakeun boh dina awak kelas sareng di luar éta.
Kelas ayeuna gaduh konstruktor eksplisit: init.
Kode sampel:
...
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
...
Lamun warisan lumangsung, mangka urang boga kasempetan pikeun gampang nelepon warisan (super).
Kode sampel:
...
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 dinamis tina métode dina instansi kelas:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Bungkusan / spasi ngaran
Ruang ngaran kudu tetep beresih!
Sasuai, basa kudu nyadiakeun kasempetan ieu.
Dina Mash, upami metode kelas statik, éta tiasa aman disebat tina bagian mana waé kodeu.
contona:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Ku jalan kitu, operator super bakal tiasa dianggo leres nalika disebut ku cara ieu.
Ntitas
Dina versi anyar basa aranjeunna diperlakukeun sapertos kelas:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Enum anyar
Ayeuna elemen enumerasi tiasa dipasihan nilai konstan:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Basa napel
Berpotensi, Mash tiasa mendakan niche na salaku basa pamrograman anu dipasang, sami sareng Lua.
Pikeun ngamimitian nganggo Mash pikeun tujuan ieu, anjeun henteu kedah ngumpul proyék nyalira.
Mash gaduh Lingkungan Runtime - VM dumasar tumpukan disusun salaku perpustakaan dinamis sareng API pinuh.
Sadaya anu anjeun kedah laksanakeun nyaéta nambihanana kana kagumantungan proyék sareng ngadamel sababaraha telepon.
Basa sorangan nyadiakeun fungsionalitas pikeun dianggo salaku basa embedded.
Dina waktu nu sarua, kinerja ditéang jeung basa jeung perpustakaan pihak katilu teu kapangaruhan.
Urang meunang basa embedded nu bisa ngagunakeun kakuatan pinuh rupa frameworks ditulis dina eta.
Mash + JVM
Kuring mimiti ngamekarkeun versi penerjemah pikeun JVM.
Panginten, saatos waktos N, tulisan ngeunaan topik ieu bakal muncul dina Habré.
hasil
Henteu aya hasil khusus. Ieu ngagambarkeun panengah hasil.
Wilujeng sumping ka sadayana di 2020.
sumber: www.habr.com