Ang Mash usa ka programming language nga nag-compile sa kaugalingon

Ang Mash usa ka programming language nga nag-compile sa kaugalingon

Greetings sa tanan sa bag-ong tuig 2020.

Sukad sa pagmantala sa una pagpuasa Hapit eksaktong 1 ka tuig ang milabay mahitungod sa Mash.

Niining tuiga, ang pinulongan miuswag pag-ayo, daghan sa mga aspeto niini ang gihuna-huna ug ang vector sa kalamboan nadeterminar.

Nalipay ko nga ipaambit kining tanan sa komunidad.

Disclaimer

Kini nga proyekto gipalambo lamang sa kadasig ug wala magpakaaron-ingnon nga dominasyon sa kalibutan sa natad sa dinamikong mga programming language!

Kini nga pag-uswag dili angay isipon nga usa ka sumbanan nga paningkamutan; ang proyekto dili maayo, apan kini nag-uswag bisan pa.

GitHub
Π‘Π°ΠΉΡ‚
Forum

Bag-ong compiler

Sa /mashc nga sanga sa proyekto repository, imong makita ang usa ka bag-ong bersyon sa compiler, nga gisulat sa Mash (ang unang bersyon sa pinulongan).

Ang compiler adunay code generator sa asm listing (alang sa assembler para sa stack-based VM).
Sa pagkakaron nag-develop ko og bersyon sa generator para sa Java (JDK 1.8).

Ang bag-ong bersyon sa compiler hingpit nga nagsuporta sa pagpaandar sa unang bersyon sa pinulongan ug nagsuporta niini.

Bag-ong OOP

Sa bag-ong bersyon sa pinulongan, ang trabaho sa mga klase kay partially redesigned.
Ang mga pamaagi sa klase mahimong ipahayag sa lawas sa klase ug sa gawas niini.
Ang klase karon adunay usa ka tin-aw nga tigtukod: init.

Sample code:

...
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
...

Kung mahitabo ang kabilin, nan kita adunay higayon nga dali nga makahimo og napanunod nga mga tawag (super).

Sample code:

...
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

Dinamikong pag-override sa mga pamaagi sa mga higayon sa klase:

...
func Polymorph::NewFoo(c):
  return $a + $b + c  
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30)    // 60

Mga package/namespaces

Ang namespace kinahanglang magpabiling limpyo!
Busa, ang pinulongan kinahanglan maghatag niini nga oportunidad.
Sa Mash, kung ang usa ka pamaagi sa klase static, kini luwas nga tawagan gikan sa bisan unsang bahin sa code.

Pananglitan:

...
class MyPackage:
  func MyFunc(a, b):
    return a + b  
  end
end
...
println( MyPackage -> MyFunc(10, 20) )    // 30

Pinaagi sa dalan, ang super operator molihok sa husto kung gitawag sa kini nga paagi.

Mga pagbati

Sa bag-ong bersyon sa pinulongan sila gitratar sama sa mga klase:

...
try:
  raise new Exception(
    "My raised exception!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Unknown exception class!")
  end
end
...

Bag-ong enum

Karon ang mga elemento sa enumeration mahimong ma-assign sa kanunay nga mga kantidad:

enum MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

Gi-embed nga pinulongan

Posible, makit-an ni Mash ang niche niini ingon usa ka naka-embed nga programming language, parehas sa Lua.

Aron masugdan ang paggamit sa Mash alang niini nga mga katuyoan, dili nimo kinahanglan nga i-assemble ang proyekto sa imong kaugalingon.

Ang Mash adunay Runtime Environment - usa ka stack-based VM nga gihugpong isip usa ka dinamikong librarya nga adunay bug-os nga API.

Ang kinahanglan nimong buhaton mao ang pagdugang niini sa dependency sa proyekto ug paghimo og pipila ka mga tawag.

Ang lengguwahe mismo naghatag ug gamit aron molihok isip usa ka embedded nga lengguwahe.
Sa samang higayon, ang pasundayag inubanan sa pinulongan ug mga librarya sa ikatulo nga partido dili maapektuhan.
Nakakuha mi og embedded nga lengguwahe nga makagamit sa bug-os nga gahum sa lain-laing mga framework nga nasulat niini.

Mash + JVM

Nagsugod ko sa paghimo og bersyon sa tighubad para sa JVM.
Tingali, pagkahuman sa N nga oras, usa ka post bahin sa kini nga hilisgutan ang makita sa HabrΓ©.

Mga resulta

Walay partikular nga resulta. Kini usa ka intermediate nga representasyon sa mga resulta.
Good luck sa tanan sa 2020.

Source: www.habr.com

Idugang sa usa ka comment