Mash hija lingwa ta 'programmar li tikkompila ruħha

Mash hija lingwa ta 'programmar li tikkompila ruħha

Insellem lil kulħadd fis-sena l-ġdida 2020.

Mill-pubblikazzjoni tal-ewwel post Għaddiet kważi eżattament sena dwar Mash.

Matul din is-sena, il-lingwa tjiebet ħafna, ħafna mill-aspetti tagħha ġew maħsuba u ġie determinat il-vettur tal-iżvilupp.

Jien kuntent li naqsam dan kollu mal-komunità.

Ċaħda ta 'responsabbiltà

Dan il-proġett qed jiġi żviluppat biss fuq l-entużjażmu u ma jippretendix dominazzjoni dinjija fil-qasam tal-lingwi ta’ programmar dinamiċi!

Dan l-iżvilupp m'għandux jitqies bħala standard li għandu jsir sforz għalih; il-proġett mhuwiex ideali, iżda għadu qed jiżviluppa.

GitHub
Sit
Forum

Kompilatur ġdid

Fil-fergħa /mashc tar-repożitorju tal-proġett, tista 'tara verżjoni ġdida tal-kompilatur, li hija miktuba f'Mash (l-ewwel verżjoni tal-lingwa).

Il-kompilatur għandu ġeneratur tal-kodiċi fil-lista asm (għall-assemblatur għal VM ibbażat fuq stack).
Bħalissa qed niżviluppa verżjoni tal-ġeneratur għal Java (JDK 1.8).

Il-verżjoni l-ġdida tal-kompilatur tappoġġja bis-sħiħ il-funzjonalità tal-ewwel verżjoni tal-lingwa u tikkumplimentaha.

OOP ġdid

Fil-verżjoni l-ġdida tal-lingwa, ix-xogħol bil-klassijiet ġie ddisinjat mill-ġdid parzjalment.
Il-metodi tal-klassi jistgħu jiġu ddikjarati kemm fil-korp tal-klassi kif ukoll barra minnu.
Il-klassi issa għandha kostruttur espliċitu: init.

Eżempju ta' kodiċi:

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

Jekk isseħħ il-wirt, allura għandna l-opportunità li faċilment nagħmlu sejħiet li jintirtu (super).

Eżempju ta' kodiċi:

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

Sostituzzjoni dinamika tal-metodi fuq istanzi tal-klassi:

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

Pakketti/ismijiet tal-ismijiet

L-ispazju tal-isem irid jibqa' nadif!
Għaldaqstant, il-lingwa għandha tipprovdi din l-opportunità.
F'Mash, jekk metodu ta 'klassi huwa statiku, jista' jissejjaħ mingħajr periklu minn kwalunkwe parti tal-kodiċi.

Eżempju:

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

Mill-mod, is-super-operatur se jaħdem b'mod korrett meta jissejjaħ b'dan il-mod.

Eċċezzjonijiet

Fil-verżjoni l-ġdida tal-lingwa huma trattati bħal klassijiet:

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

Enum ġdid

Issa l-elementi tal-enumerazzjoni jistgħu jiġu assenjati valuri kostanti:

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

Lingwa inkorporata

Potenzjalment, Mash jista 'jsib in-niċċa tiegħu bħala lingwa ta' programmar inkorporata, simili għal Lua.

Biex tibda tuża Mash għal dawn l-iskopijiet, lanqas biss għandek bżonn tiġbor il-proġett lilek innifsek.

Mash għandu Ambjent Runtime - VM ibbażat fuq munzell miġbur bħala librerija dinamika b'API sħiħa.

Kull ma trid tagħmel hu li żżidha mad-dipendenza tal-proġett u tagħmel ftit sejħiet.

Il-lingwa nnifisha tipprovdi funzjonalità biex taħdem bħala lingwa inkorporata.
Fl-istess ħin, il-prestazzjoni flimkien ma 'libreriji tal-lingwa u ta' partijiet terzi mhix affettwata.
Ikollna lingwa inkorporata li tista 'tuża s-saħħa sħiħa ta' diversi oqfsa miktuba fiha.

Maxx + JVM

Bdejt niżviluppa verżjoni tat-traduttur għall-JVM.
Forsi, wara N ammont ta' żmien, se tidher post dwar dan is-suġġett fuq Habré.

Riżultati ta '

M'hemmx riżultati partikolari. Din hija rappreżentazzjoni intermedja tar-riżultati.
Xorti tajba lil kulħadd fl-2020.

Sors: www.habr.com

Żid kumment