Mash هي لغة برمجة تجمع نفسها

صورة

تحية للجميع في عام 2020 الجديد.

منذ نشر أول مشاركة حول Mash ، مر عام تقريبًا تقريبًا.

خلال هذا العام ، تم تحسين اللغة بشكل كبير ، وتم التفكير في العديد من جوانبها وتم تحديد متجه التنمية.

أنا سعيد بمشاركة هذا مع المجتمع.
تنصل

تم تطوير هذا المشروع حصريًا بحماس ولا يطالب بالسيطرة العالمية في مجال لغات البرمجة الديناميكية!

يجب ألا تعتبر هذا التطوير معيارًا يجب أن تسعى إليه ، فالمشروع ليس مثاليًا ، لكنه مع ذلك قيد التطوير.

جيثب
الموقع
منتدى

مترجم جديد


في فرع / 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 على بيئة وقت التشغيل - جهاز VM مكدس تم إنشاؤه كمكتبة ديناميكية مع واجهة برمجة تطبيقات كاملة.

مطلوب فقط إضافته اعتمادًا على المشروع وإجراء عدة مكالمات.

توفر اللغة نفسها وظائف للعمل كلغة مضمّنة.
في الوقت نفسه ، لا يتم انتهاك قابلية التشغيل بالتزامن مع مكتبات اللغات والجهات الخارجية.
نحصل على لغة مضمّنة يمكنها استخدام القوة الكاملة لمختلف الأطر المكتوبة فيها.

الهريس + JVM


بدأ في تطوير إصدار مترجم لـ JVM.
ربما ، بعد مقدار الوقت Nth ، ستظهر مشاركة حول هذا الموضوع على المحور.

النتائج


لا توجد نتائج محددة. هذا هو عرض مؤقت للنتائج.
حظا سعيدا للجميع في عام 2020.

Source: https://habr.com/ru/post/ar482842/


All Articles