Mash یوه پروګرامینګ ژبه ده چې پخپله تالیف کوي

Mash یوه پروګرامینګ ژبه ده چې پخپله تالیف کوي

ټولو ته د نوي ۲۰۲۰ کال مبارکي وایم.

د لومړي خپریدو راهیسې روژه د ماش په اړه تقریبا یو کال تیر شوی دی.

د دې کال په اوږدو کې، ژبه خورا ښه شوه، ډیری اړخونه یې په پام کې ونیول او د پراختیا ویکتور وټاکل شو.

زه خوشحاله یم چې دا ټول د ټولنې سره شریک کړم.

دادعا

دا پروژه یوازې په لیوالتیا رامینځته کیږي او د متحرک برنامې ژبو په ډګر کې د نړۍ تسلط ته غاړه نه ږدي!

دا پرمختګ باید د یو معیار په توګه ونه ګڼل شي چې هڅه یې وشي؛ پروژه مثالي نه ده، مګر بیا هم وده کوي.

GitHub
ویب پاڼه
فورم

نوی کمپیلر

د پروژې د ذخیره /mashc څانګې کې، تاسو کولی شئ د کمپیلر نوې نسخه وګورئ، کوم چې په Mash (د ژبې لومړۍ نسخه) کې لیکل شوي.

کمپیلر د asm لیست کولو کې د کوډ جنریټر لري (د سټیک میشته VM لپاره د راټولونکي لپاره).
اوس مهال زه د جاوا (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

سرایت شوی ژبه

په احتمالي توګه، ماش کولی شي خپل ځای د یو ځای شوي پروګرامینګ ژبې په توګه ومومي، لکه لوا ته ورته.

د دې اهدافو لپاره د میش کارولو پیل کولو لپاره ، تاسو حتی اړتیا نلرئ پخپله پروژه راټول کړئ.

میش د چلولو چاپیریال لري - د سټیک پراساس VM د بشپړ API سره د متحرک کتابتون په توګه ترتیب شوی.

ټول هغه څه چې تاسو یې کولو ته اړتیا لرئ دا د پروژې انحصار کې اضافه کړئ او یو څو تلیفونونه وکړئ.

ژبه پخپله د یو ځای شوي ژبې په توګه کار کولو لپاره فعالیت چمتو کوي.
په ورته وخت کې، د ژبې او دریمې ډلې کتابتونونو سره په ګډه فعالیت اغیزه نلري.
موږ یوه سرایت شوې ژبه ترلاسه کوو چې کولی شي د لیکل شوي مختلف چوکاټونو بشپړ ځواک وکاروي.

ماش + JVM

ما د JVM لپاره د ژباړونکي نسخه رامینځته کول پیل کړل.
شاید، د N مقدار وخت وروسته، د دې موضوع په اړه یو پوسټ به په Habré کې ښکاره شي.

پایلې

کومې ځانګړې پایلې شتون نلري. دا د پایلو منځګړیتوب استازیتوب کوي.
ټولو ته د ۲۰۲۰ کال مبارک وي.

سرچینه: www.habr.com

Add a comment