Mash ایک پروگرامنگ زبان ہے جو خود کو مرتب کرتی ہے۔

Mash ایک پروگرامنگ زبان ہے جو خود کو مرتب کرتی ہے۔

سب کو نئے سال 2020 کی مبارکباد۔

پہلی اشاعت کے بعد سے روزہ رکھنا ماش کو تقریباً 1 سال گزر چکا ہے۔

اس سال کے دوران، زبان کو بہت بہتر بنایا گیا، اس کے بہت سے پہلوؤں پر غور کیا گیا اور ترقی کے ویکٹر کا تعین کیا گیا۔

مجھے یہ سب کمیونٹی کے ساتھ بانٹ کر خوشی ہو رہی ہے۔

اعلانِ لاتعلقی

یہ پروجیکٹ مکمل طور پر جوش و خروش پر تیار کیا جا رہا ہے اور یہ متحرک پروگرامنگ زبانوں کے میدان میں عالمی تسلط کا بہانہ نہیں کرتا!

اس ترقی کو ایک معیار کے طور پر نہیں سمجھا جانا چاہئے جس کے لئے کوشش کی جائے؛ یہ منصوبہ مثالی نہیں ہے، لیکن اس کے باوجود یہ ترقی کر رہا ہے۔

GitHub کے
سائٹ
فورم

نیا کمپائلر

پروجیکٹ ریپوزٹری کی /mashc برانچ میں، آپ کمپائلر کا ایک نیا ورژن دیکھ سکتے ہیں، جو Mash (زبان کا پہلا ورژن) میں لکھا ہوا ہے۔

کمپائلر کے پاس asm لسٹنگ میں ایک کوڈ جنریٹر ہے (اسٹیک پر مبنی VM کے لیے جمع کرنے والے کے لیے)۔
فی الحال میں جاوا (JDK 1.8) کے لیے جنریٹر کا ایک ورژن تیار کر رہا ہوں۔

کمپائلر کا نیا ورژن زبان کے پہلے ورژن کی فعالیت کی مکمل حمایت کرتا ہے اور اس کی تکمیل کرتا ہے۔

نیا او او پی

زبان کے نئے ورژن میں، کلاسز کے ساتھ کام کو جزوی طور پر دوبارہ ڈیزائن کیا گیا ہے۔
کلاس کے طریقوں کا اعلان کلاس باڈی میں اور اس کے باہر دونوں طرح کیا جا سکتا ہے۔
کلاس میں اب ایک واضح کنسٹرکٹر ہے: 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 میں ایک رن ٹائم ماحول ہے - ایک اسٹیک پر مبنی VM ایک مکمل API کے ساتھ ایک متحرک لائبریری کے طور پر مرتب کیا گیا ہے۔

آپ کو بس اسے پراجیکٹ کے انحصار میں شامل کرنے اور ایک دو کال کرنے کی ضرورت ہے۔

زبان خود ایک ایمبیڈڈ زبان کے طور پر کام کرنے کے لیے فعالیت فراہم کرتی ہے۔
ایک ہی وقت میں، زبان اور تیسری پارٹی کی لائبریریوں کے ساتھ مل کر کارکردگی متاثر نہیں ہوتی ہے۔
ہمیں ایک ایمبیڈڈ لینگویج ملتی ہے جو اس میں لکھے گئے مختلف فریم ورک کی پوری طاقت استعمال کر سکتی ہے۔

میش + جے وی ایم

میں نے JVM کے لیے مترجم کا ایک ورژن تیار کرنا شروع کیا۔
شاید، N وقت کے بعد، Habré پر اس موضوع پر ایک پوسٹ نظر آئے گی۔

کے نتائج

کوئی خاص نتائج نہیں ہیں۔ یہ نتائج کی درمیانی نمائندگی ہے۔
2020 میں سب کو گڈ لک۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں