Бүгдэд нь ирж буй 2020 оны шинэ оны мэнд хүргэе.
Эхнийх нь хэвлэгдсэнээс хойш
Энэ жилийн хугацаанд хэлийг ихээхэн сайжруулж, олон талаас нь бодож, хөгжлийн векторыг тодорхойлсон.
Энэ бүхнийг олон нийттэй хуваалцаж байгаадаа баяртай байна.
Disclaimer
Энэхүү төслийг зөвхөн урам зоригоор боловсруулж байгаа бөгөөд динамик програмчлалын хэлээр дэлхийд ноёрхлоо харуулахгүй!
Энэ бүтээн байгуулалтыг хичээх ёстой жишиг гэж үзэж болохгүй, төсөл нь тийм ч тохиромжтой биш, гэхдээ хөгжиж байна.
Шинэ хөрвүүлэгч
Төслийн агуулахын /mashc салбараас та Mash (хэлний анхны хувилбар) дээр бичигдсэн хөрвүүлэгчийн шинэ хувилбарыг харж болно.
Хөрвүүлэгч нь asm жагсаалтад код үүсгэгчтэй (стек дээр суурилсан VM-ийн ассемблерт зориулагдсан).
Одоогоор би Java-д зориулсан генераторын хувилбарыг боловсруулж байна (JDK 1.8).
Хөрвүүлэгчийн шинэ хувилбар нь хэлний эхний хувилбарын функцийг бүрэн дэмжиж, түүнийг нөхөж өгдөг.
Шинэ OOP
Хэлний шинэ хувилбарт ангиудтай ажиллах ажлыг хэсэгчлэн шинэчилсэн.
Ангийн аргуудыг ангийн үндсэн болон түүний гадна аль алинд нь зарлаж болно.
Анги нь одоо тодорхой байгуулагчтай болсон: init.
Жишээ код:
...
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
...
Хэрэв өв залгамжлал тохиолдвол бидэнд удамшлын дуудлага хийх боломжтой (супер).
Жишээ код:
...
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
Ангийн тохиолдлууд дээрх аргуудыг динамик дарангуйлах:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
Багц/нэрийн орон зай
Нэрийн орон зай цэвэр байх ёстой!
Үүний дагуу хэл нь энэ боломжийг хангах ёстой.
Mash-д хэрэв классын арга статик байвал кодын аль ч хэсгээс аюулгүйгээр дуудаж болно.
Жишээ нь:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
Дашрамд хэлэхэд супер оператор ийм байдлаар дуудагдах үед зөв ажиллах болно.
Үл хамаарал
Хэлний шинэ хувилбарт тэдгээрийг анги гэж үздэг.
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
Шинэ тоо
Одоо тооллын элементүүдэд тогтмол утгыг оноож болно:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
Суулгасан хэл
Mash нь Lua-тай адил суулгагдсан програмчлалын хэлээр өөрийн байр сууриа олох боломжтой.
Эдгээр зорилгоор Mash-г ашиглаж эхлэхийн тулд та төслийг өөрөө угсрах шаардлагагүй болно.
Mash нь Runtime Environment-тэй - бүрэн API бүхий динамик номын сан болгон эмхэтгэсэн стек дээр суурилсан VM.
Таны хийх ёстой зүйл бол үүнийг төслийн хамааралд нэмж, хэд хэдэн дуудлага хийх явдал юм.
Хэл нь өөрөө суулгагдсан хэлээр ажиллах функцээр хангадаг.
Үүний зэрэгцээ хэлний болон гуравдагч талын номын сантай хамтран ажиллахад нөлөөлөхгүй.
Бид дотор нь бичигдсэн янз бүрийн фреймворкуудын бүрэн хүчийг ашиглах боломжтой суулгагдсан хэлийг олж авдаг.
Mash + JVM
Би JVM-д зориулсан орчуулагчийн хувилбарыг боловсруулж эхэлсэн.
Магадгүй, N хугацааны дараа энэ сэдвээр нийтлэл Хабре дээр гарч ирэх болно.
Үр дүн
Тодорхой үр дүн байхгүй. Энэ бол үр дүнгийн завсрын төлөөлөл юм.
2020 онд бүгдэд нь амжилт хүсье.
Эх сурвалж: www.habr.com