Mash er forritunarmál sem setur sig saman

Mash er forritunarmál sem setur sig saman

Kær kveðja til allra á nýju ári 2020.

Frá útgáfu fyrsta færslu Næstum nákvæmlega 1 ár er liðið um Mash.

Á þessu ári var tungumálið stórbætt, margir þættir þess voru ígrundaðir og þróunarferillinn ákveðinn.

Ég er ánægður með að deila þessu öllu með samfélaginu.

Afneitun ábyrgðar

Þetta verkefni er eingöngu þróað af eldmóði og þykist ekki vera heimsyfirráð á sviði kraftmikilla forritunarmála!

Þessa þróun ætti ekki að líta á sem staðal til að stefna að, verkefnið er ekki tilvalið, en það er að þróast engu að síður.

GitHub
Site
Spjallborð

Nýr þýðandi

Í /mashc grein verkefnageymslunnar geturðu séð nýja útgáfu af þýðandanum, sem er skrifuð í Mash (fyrsta útgáfan af tungumálinu).

Þýðandinn er með kóðarafall í ASM skráningu (fyrir assembler fyrir stafla-undirstaða VM).
Eins og er er ég að þróa útgáfu af rafallnum fyrir Java (JDK 1.8).

Nýja útgáfan af þýðandanum styður að fullu virkni fyrstu útgáfu tungumálsins og bætir það við.

Nýtt OOP

Í nýju útgáfunni af tungumálinu hefur starfið með bekkjum verið endurhannað að hluta.
Hægt er að lýsa yfir bekkjaraðferðum bæði í bekkjarhlutanum og utan hans.
Bekkurinn hefur nú skýran smið: init.

Dæmi um kóða:

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

Ef erfðir eiga sér stað, þá höfum við tækifæri til að hringja auðveldlega í erfðasímtöl (ofur).

Dæmi um kóða:

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

Kvik hnekkja aðferða á bekkjartilvikum:

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

Pakkar/nafnarými

Nafnarýmið verður að vera hreint!
Í samræmi við það verður tungumálið að gefa þetta tækifæri.
Í Mash, ef bekkjaraðferð er kyrrstæð, er óhætt að kalla hana úr hvaða hluta kóðans sem er.

Dæmi:

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

Við the vegur, ofur rekstraraðili mun virka rétt þegar kallað er á þennan hátt.

Undantekningar

Í nýju útgáfunni af tungumálinu er farið með þá eins og flokka:

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

Ný upptalning

Nú er hægt að úthluta upptalningarþáttum föstum gildum:

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

Innbyggt tungumál

Mash getur mögulega fundið sinn sess sem innbyggt forritunarmál, svipað og Lua.

Til að byrja að nota Mash í þessum tilgangi þarftu ekki einu sinni að setja saman verkefnið sjálfur.

Mash er með Runtime Environment - VM sem byggir á stafla sem er sett saman sem kraftmikið bókasafn með fullt API.

Allt sem þú þarft að gera er að bæta því við verkefnisfíknina og hringja nokkur símtöl.

Tungumálið sjálft veitir virkni til að vinna sem innbyggt tungumál.
Á sama tíma hefur árangur í tengslum við tungumála- og þriðja aðila bókasöfn ekki áhrif.
Við fáum innfellt tungumál sem getur nýtt fullan kraft ýmissa ramma sem eru skrifuð í það.

Mash + JVM

Ég byrjaði að þróa útgáfu af þýðandanum fyrir JVM.
Kannski, eftir N tíma, mun færsla um þetta efni birtast á Habré.

Niðurstöður

Það eru engar sérstakar niðurstöður. Þetta er milliframsetning á niðurstöðunum.
Gangi ykkur öllum vel árið 2020.

Heimild: www.habr.com

Bæta við athugasemd