Mash ni lugha ya programu ambayo inajikusanya yenyewe

Mash ni lugha ya programu ambayo inajikusanya yenyewe

Salamu kwa wote katika mwaka mpya wa 2020.

Tangu kuchapishwa kwa kwanza chapisho Karibu mwaka 1 umepita kuhusu Mash.

Katika mwaka huu, lugha iliboreshwa sana, vipengele vyake vingi vilifikiriwa na vekta ya maendeleo iliamuliwa.

Nina furaha kushiriki haya yote na jamii.

Onyo

Mradi huu unaendelezwa kwa shauku pekee na haujifanyii kutawaliwa na ulimwengu katika nyanja ya lugha za programu zinazobadilika!

Maendeleo haya hayapaswi kuzingatiwa kama kiwango cha kujitahidi; mradi sio bora, lakini unaendelea.

GitHub
Site
Forum

Mkusanyaji mpya

Katika tawi la /mashc la hazina ya mradi, unaweza kuona toleo jipya la mkusanyaji, ambalo limeandikwa kwa Mash (toleo la kwanza la lugha).

Mkusanyaji ana jenereta ya msimbo katika uorodheshaji wa asm (kwa mkusanyaji wa VM iliyo na safu).
Hivi sasa ninatengeneza toleo la jenereta la Java (JDK 1.8).

Toleo jipya la mkusanyaji linaunga mkono kikamilifu utendakazi wa toleo la kwanza la lugha na linaikamilisha.

OOP mpya

Katika toleo jipya la lugha, kazi na madarasa imeundwa upya kwa kiasi.
Njia za darasa zinaweza kutangazwa katika mwili wa darasa na nje yake.
Darasa sasa lina mjenzi wazi: init.

Msimbo wa sampuli:

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

Ikiwa urithi hutokea, basi tuna fursa ya kupiga simu za urithi kwa urahisi (super).

Msimbo wa sampuli:

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

Kupindua kwa nguvu kwa njia kwenye hali za darasa:

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

Vifurushi/nafasi za majina

Nafasi ya majina lazima ibaki safi!
Ipasavyo, lugha lazima itoe fursa hii.
Katika Mash, ikiwa njia ya darasa ni tuli, inaweza kuitwa kwa usalama kutoka mahali popote kwenye msimbo.

Mfano:

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

Kwa njia, operator mkuu atafanya kazi kwa usahihi wakati anaitwa kwa njia hii.

Tofauti

Katika toleo jipya la lugha wanachukuliwa kama madarasa:

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

Enum mpya

Sasa vipengee vya kuhesabu vinaweza kupewa maadili ya kila mara:

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

Lugha iliyopachikwa

Inawezekana, Mash inaweza kupata niche yake kama lugha ya programu iliyopachikwa, sawa na Lua.

Ili kuanza kutumia Mash kwa madhumuni haya, hauitaji hata kukusanyika mradi mwenyewe.

Mash ina Mazingira ya Runtime - VM ya msingi wa rafu iliyokusanywa kama maktaba inayobadilika iliyo na API kamili.

Unachohitaji kufanya ni kuiongeza kwenye utegemezi wa mradi na kupiga simu kadhaa.

Lugha yenyewe hutoa utendaji wa kufanya kazi kama lugha iliyopachikwa.
Wakati huo huo, utendaji kwa kushirikiana na lugha na maktaba za watu wengine hauathiriwi.
Tunapata lugha iliyopachikwa ambayo inaweza kutumia nguvu kamili ya mifumo mbalimbali iliyoandikwa ndani yake.

Mash + JVM

Nilianza kutengeneza toleo la mfasiri kwa JVM.
Labda, baada ya muda wa N, chapisho kwenye mada hii litaonekana kwenye Habre.

Matokeo ya

Hakuna matokeo maalum. Huu ni uwakilishi wa kati wa matokeo.
Bahati nzuri kwa kila mtu katika 2020.

Chanzo: mapenzi.com

Kuongeza maoni