Sugeng warsa enggal 2020 kagem sedaya.
Wiwit publikasi pisanan
Sajrone taun iki, basa kasebut saya apik banget, akeh aspek sing dipikirake lan vektor pangembangan ditemtokake.
Aku seneng nuduhake kabeh iki karo masyarakat.
Nolak tanggung jawab
Proyek iki dikembangake mung kanthi semangat lan ora ndalang dominasi donya ing bidang basa pemrograman dinamis!
Pangembangan iki ora kudu dianggep minangka standar sing kudu diupayakake; proyek kasebut ora becik, nanging isih berkembang.
Compiler anyar
Ing /mashc cabang saka repositori project, sampeyan bisa ndeleng versi anyar saka compiler, kang ditulis ing Mash (versi pisanan saka basa).
Compiler wis generator kode ing listing asm (kanggo assembler kanggo VM basis tumpukan).
Saiki aku ngembangake versi generator kanggo Jawa (JDK 1.8).
Versi anyar kompiler ndhukung kanthi lengkap fungsi versi pisanan saka basa lan nglengkapi.
OOP anyar
Ing versi anyar saka basa, karya karo kelas wis sebagian redesigned.
Cara kelas bisa diumumake ing awak kelas lan ing njaba.
Kelas saiki duwe 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
...
Yen ana warisan, mula kita duwe kesempatan kanthi gampang nelpon 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
Dinamis overriding metode ing instance kelas:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Paket / namespaces
Ruang jeneng kudu tetep resik!
Mulane, basa kudu menehi kesempatan iki.
Ing Mash, yen metode kelas statis, bisa diarani kanthi aman saka bagean kode kasebut.
Conto:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Miturut cara, operator super bakal bisa digunakake kanthi bener nalika diarani kanthi cara iki.
Pangecualian
Ing versi anyar basa kasebut dianggep kaya 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
Saiki unsur enumerasi bisa diwenehi nilai konstan:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Basa semat
Potensial, Mash bisa nemokake ceruk minangka basa pamrograman sing dipasang, padha karo Lua.
Kanggo miwiti nggunakake Mash kanggo tujuan kasebut, sampeyan ora perlu ngumpulake proyek kasebut dhewe.
Mash duwe Lingkungan Runtime - VM adhedhasar tumpukan sing disusun minangka perpustakaan dinamis kanthi API lengkap.
Sampeyan mung kudu nambahake menyang ketergantungan proyek lan nggawe sawetara telpon.
Basa kasebut nyedhiyakake fungsi kanggo bisa digunakake minangka basa sing disematake.
Ing wektu sing padha, kinerja bebarengan karo basa lan perpustakaan pihak katelu ora kena pengaruh.
Kita entuk basa sing dipasang sing bisa nggunakake kekuwatan saka macem-macem kerangka kerja sing ditulis ing njero.
Mash + JVM
Aku miwiti ngembangaken versi penerjemah kanggo JVM.
Mbok menawa, sawise wektu N, kiriman babagan topik iki bakal katon ing HabrΓ©.
Hasil
Ora ana asil tartamtu. Iki minangka perwakilan penengah saka asil.
Good luck kanggo kabeh ing 2020.
Source: www.habr.com