Mash هڪ پروگرامنگ ٻولي آهي جيڪا پاڻ کي گڏ ڪري ٿي

Mash هڪ پروگرامنگ ٻولي آهي جيڪا پاڻ کي گڏ ڪري ٿي

سڀني کي نئين سال 2020 جون واڌايون.

پهرين جي اشاعت کان وٺي پوسٽ ماش کي لڳ ڀڳ 1 سال گذري چڪو آهي.

هن سال ۾، ٻوليءَ کي تمام گهڻو سڌاريو ويو، ان جي ڪيترن ئي پهلوئن تي غور ويچار ڪيو ويو ۽ ترقيءَ جا ویکٹر طئي ڪيا ويا.

مان خوش آهيان ته هي سڀ ڪجهه ڪميونٽي سان شيئر ڪريان.

اعلان

هي پروجيڪٽ مڪمل طور تي جوش ۽ جذبي تي ترقي ڪري رهيو آهي ۽ متحرڪ پروگرامنگ ٻولين جي ميدان ۾ دنيا جي تسلط کي ظاهر نٿو ڪري!

هن ترقي کي هڪ معيار نه سمجهيو وڃي جنهن لاءِ ڪوشش ڪئي وڃي؛ پروجيڪٽ مثالي نه آهي، پر ان جي باوجود ترقي ڪري رهيو آهي.

GitHub
ويب سائيٽ
فورم

نئون مرتب ڪندڙ

پروجيڪٽ جي مخزن جي /mashc برانچ ۾، توهان ڪمپيلر جو هڪ نئون نسخو ڏسي سگهو ٿا، جيڪو Mash (ٻولي جو پهريون نسخو) ۾ لکيل آهي.

ڪمپلر وٽ asm لسٽنگ ۾ ڪوڊ جنريٽر آھي (اسٽيڪ بيسڊ وي ايم لاءِ اسمبلر لاءِ).
في الحال مان جاوا لاءِ جنريٽر جو نسخو ٺاهي رهيو آهيان (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

پيڪيجز/نام اسپيس

نالي جي جاء صاف هجڻ گهرجي!
ان جي مطابق، ٻولي کي اهو موقعو فراهم ڪرڻ گهرجي.
ميش ۾، جيڪڏهن هڪ طبقي جو طريقو جامد آهي، اهو محفوظ طور تي ڪوڊ جي ڪنهن به حصي مان سڏي سگهجي ٿو.

مثال طور

...
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 وٽ هڪ رن ٽائيم ماحول آهي - هڪ اسٽيڪ تي ٻڌل VM هڪ مڪمل API سان گڏ متحرڪ لائبريري طور مرتب ڪيو ويو آهي.

توھان سڀني کي ڪرڻ جي ضرورت آھي ان کي شامل ڪريو پروجيڪٽ جي انحصار ۾ ۽ ڪجھ ڪالون ٺاھيو.

ٻولي پاڻ کي هڪ سرايت ٿيل ٻولي طور ڪم ڪرڻ لاءِ ڪارڪردگي مهيا ڪري ٿي.
ساڳئي وقت، ٻولي ۽ ٽئين پارٽي جي لائبريرين سان گڏ ڪارڪردگي متاثر نه ٿيندي.
اسان کي هڪ ايمبيڊڊ ٻولي ملي ٿي جيڪا ان ۾ لکيل مختلف فريم ورڪ جي مڪمل طاقت استعمال ڪري سگهي ٿي.

ماش + JVM

مون JVM لاءِ مترجم جو نسخو تيار ڪرڻ شروع ڪيو.
شايد، وقت جي N رقم کان پوء، هن موضوع تي هڪ پوسٽ Habré تي ظاهر ٿيندو.

نتيجو

ڪي خاص نتيجا نه آهن. هي نتيجن جي وچولي نمائندگي آهي.
2020 ۾ سڀني کي خوش قسمت.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو