Hammani kirib kelayotgan yangi 2020-yil bilan tabriklayman.
Birinchisi nashr etilganidan beri
Bu yil davomida til ancha takomillashtirildi, uning ko‘p jihatlari o‘ylab topildi va rivojlanish vektori aniqlandi.
Bularning barchasini jamiyat bilan baham ko'rishdan xursandman.
Masʼuliyatdan voz kechish
Ushbu loyiha faqat ishtiyoq bilan ishlab chiqilmoqda va dinamik dasturlash tillari sohasida dunyo hukmronligiga da'vo qilmaydi!
Ushbu rivojlanishni intilish kerak bo'lgan standart deb hisoblamaslik kerak; loyiha ideal emas, lekin shunga qaramay rivojlanmoqda.
Yangi kompilyator
Loyiha omborining /mashc bo'limida siz kompilyatorning Mash tilida yozilgan yangi versiyasini ko'rishingiz mumkin (tilning birinchi versiyasi).
Kompilyatorda asm listingda kod generatori mavjud (stekga asoslangan VM uchun assembler uchun).
Hozir men Java (JDK 1.8) uchun generator versiyasini ishlab chiqyapman.
Kompilyatorning yangi versiyasi tilning birinchi versiyasining funksionalligini to'liq qo'llab-quvvatlaydi va uni to'ldiradi.
Yangi OOP
Tilning yangi versiyasida sinflar bilan ishlash qisman qayta ishlandi.
Sinf usullari sinf tanasida ham, undan tashqarida ham e'lon qilinishi mumkin.
Endi sinfda aniq konstruktor mavjud: init.
Kod namunasi:
...
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
...
Agar meros sodir bo'lsa, unda biz osongina meros qo'ng'iroqlarini amalga oshirish imkoniyatiga egamiz (super).
Kod namunasi:
...
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
Sinf misollarida usullarni dinamik ravishda bekor qilish:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Paketlar/nom bo'shliqlari
Nomlar maydoni toza bo'lishi kerak!
Shunga ko'ra, til bu imkoniyatni ta'minlashi kerak.
Mash-da, agar sinf usuli statik bo'lsa, uni kodning istalgan qismidan xavfsiz chaqirish mumkin.
Misol:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Aytgancha, super operator shu tarzda chaqirilganda to'g'ri ishlaydi.
Istisnolar
Tilning yangi versiyasida ular sinflar kabi ko'rib chiqiladi:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Yangi raqam
Endi ro'yxatga olish elementlariga doimiy qiymatlar berilishi mumkin:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
O'rnatilgan til
Ehtimol, Mash Lua tiliga o'xshash o'rnatilgan dasturlash tili sifatida o'z joyini topishi mumkin.
Ushbu maqsadlar uchun Mash-dan foydalanishni boshlash uchun siz hatto loyihani o'zingiz yig'ishingiz shart emas.
Mashda Runtime Environment mavjud - to'liq API bilan dinamik kutubxona sifatida tuzilgan stekga asoslangan VM.
Sizga kerak bo'lgan yagona narsa uni loyihaga bog'liqlikka qo'shish va bir nechta qo'ng'iroq qilishdir.
Tilning o'zi o'rnatilgan til sifatida ishlash uchun funksionallikni ta'minlaydi.
Shu bilan birga, til va uchinchi tomon kutubxonalari bilan birgalikda ishlashga ta'sir qilmaydi.
Biz unda yozilgan turli ramkalarning to'liq quvvatidan foydalana oladigan o'rnatilgan tilni olamiz.
Mash + JVM
Men JVM uchun tarjimon versiyasini ishlab chiqishni boshladim.
Ehtimol, N vaqt o'tgach, Habré-da ushbu mavzu bo'yicha post paydo bo'ladi.
natijalar
Hech qanday maxsus natijalar yo'q. Bu natijalarning oraliq ifodasidir.
2020-yilda hammaga omad.
Manba: www.habr.com