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

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

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

منذ نشر أول صيام لقد مر ما يقرب من عام واحد حول الهريس بالضبط.

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

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

إخلاء المسئولية

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

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

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

مترجم جديد

في فرع / 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

إضافة تعليق