تحياتي للجميع في العام الجديد 2020.
منذ نشر أول
خلال هذا العام ، تم تحسين اللغة بشكل كبير ، وتم التفكير في العديد من جوانبها وتم تحديد ناقل التطوير.
كل هذا يسعدني مشاركته مع المجتمع.
إخلاء المسئولية
يتم تطوير هذا المشروع فقط على الحماس ولا يتظاهر بالهيمنة العالمية في مجال لغات البرمجة الديناميكية!
لا ينبغي أن تعتبر هذا التطوير معيارًا تحتاج إلى السعي لتحقيقه ، فالمشروع ليس مثاليًا ، ولكنه مع ذلك يتطور.
مترجم جديد
في فرع / 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
PL مضمن
من المحتمل - يمكن أن تجد Mash مكانها المناسب كلغة برمجة قابلة للتضمين ، مثل Lua.
لبدء استخدام Mash لهذه الأغراض ، لا تحتاج حتى إلى إنشاء المشروع بنفسك.
لدى Mash بيئة Runtime Environment - مكدس VM مبني كمكتبة ديناميكية مع واجهة برمجة تطبيقات كاملة.
تحتاج فقط إلى إضافته إلى تبعيات المشروع وإجراء مكالمتين.
توفر اللغة نفسها وظائف للعمل كلغة مضمنة.
في الوقت نفسه ، لا يتم انتهاك الأداء المقترن باللغة ومكتبات الجهات الخارجية.
نحصل على لغة قابلة للتضمين يمكنها استخدام القوة الكاملة لمختلف الأطر المكتوبة فيها.
الهريس + JVM
بدأت في تطوير نسخة من المترجم لـ JVM.
ربما بعد مرور الوقت ، سيظهر منشور حول هذا الموضوع على حبري.
نتائج
لا توجد نتائج محددة. هذا تمثيل وسيط للنتائج.
حظًا سعيدًا للجميع في عام 2020.
المصدر: www.habr.com