Mash забони барномасозӣ аст, ки худаш тартиб медиҳад

Mash забони барномасозӣ аст, ки худаш тартиб медиҳад

Салом ба ҳама бо соли нави 2020.

Аз рузи нашри аввалин рӯза доштан Дар бораи Маш кариб расо 1 сол гузашт.

Дар давоми ин сол забон хеле такмил ёфт, бисьёр чихатхои он андешида, вектори тараккиёт муайян карда шуд.

Ман хурсандам, ки ҳамаи инро бо ҷомеа мубодила мекунам.

Радди

Лоиҳаи мазкур танҳо бо шавқу рағбат таҳия карда мешавад ва ба ҳукмронии ҷаҳонӣ дар соҳаи забонҳои динамикии барномасозӣ вонамуд намекунад!

Ин рушд набояд ҳамчун стандарте ҳисобида шавад, ки барои он кӯшиш кардан лозим аст; лоиҳа идеалӣ нест, аммо бо вуҷуди ин рушд мекунад.

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

Забони воридшуда

Эҳтимол, Mash метавонад ҷойи худро ҳамчун забони барномасозии дохилшуда, шабеҳи Луа пайдо кунад.

Барои оғози истифодаи Mash барои ин мақсадҳо, ба шумо ҳатто лозим нест, ки лоиҳаро худатон ҷамъ кунед.

Mash дорои муҳити Runtime - як VM дар асоси стек, ки ҳамчун китобхонаи динамикӣ бо API пурра тартиб дода шудааст.

Ба шумо танҳо лозим аст, ки онро ба вобастагии лоиҳа илова кунед ва якчанд занг занед.

Худи ин забон барои кор ҳамчун забони дарунсохташуда функсияҳо фароҳам меорад.
Ҳамзамон, ба кор дар якҷоягӣ бо китобхонаҳои забон ва сеюм таъсир намерасонад.
Мо забони дарунсохташуда мегирем, ки метавонад қудрати пурраи чаҳорчӯбаҳои гуногуни дар он навишташударо истифода барад.

Mash + JVM

Ман ба таҳияи версияи тарҷумон барои JVM шурӯъ кардам.
Эҳтимол, пас аз N миқдори вақт, паём дар ин мавзӯъ дар Habré пайдо шавад.

Натиҷаҳо

Натиҷаҳои мушаххас вуҷуд надоранд. Ин як намоиши фосилавии натиҷаҳост.
Соли 2020 ба ҳама барори кор.

Манбаъ: will.com

Илова Эзоҳ