I-Mash iwulimi lokuhlela oluzihlanganisayo

I-Mash iwulimi lokuhlela oluzihlanganisayo

Ngibingelele wonke umuntu onyakeni omusha ka-2020.

Kusukela kushicilelwe owokuqala okuthunyelwe Cishe unyaka ongu-1 usuphelile mayelana noMash.

Ngalo nyaka, ulimi lwenziwe ngcono kakhulu, izici zalo eziningi zacatshangelwa futhi kwanqunywa nevector yentuthuko.

Ngiyajabula ukwabelana ngakho konke lokhu nomphakathi.

Disclaimer

Le phrojekthi ithuthukiswa ngentshiseko kuphela futhi ayizenzi iqola umhlaba wonke emkhakheni wezilimi zokuhlela eziguqukayo!

Le ntuthuko akufanele ithathwe njengendinganiso okufanele iphokophele; iphrojekthi ayilungile, kodwa iyathuthuka noma kunjalo.

GitHub
iwebhusayithi
Iforamu

Umhlanganisi omusha

Egatsheni le-/mashc lenqolobane yephrojekthi, ungabona inguqulo entsha ye-comiler, ebhalwe nge-Mash (inguqulo yokuqala yolimi).

Umhlanganisi unejeneretha yekhodi ohlwini lwe-asm (yesihlanganisi se-VM esekelwe kusitaki).
Njengamanje ngithuthukisa inguqulo yejeneretha ye-Java (JDK 1.8).

Inguqulo entsha ye-comiler isekela ngokugcwele ukusebenza kwenguqulo yokuqala yolimi futhi iyahambisana nayo.

I-OOP entsha

Enguqulweni entsha yolimi, umsebenzi wamakilasi uklanywe kabusha ngokwengxenye.
Izindlela zekilasi zingamenyezelwa kokubili emzimbeni wekilasi nangaphandle kwawo.
Ikilasi manje selinomakhi ocacile: init.

Ikhodi yesampula:

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

Uma ifa livela, khona-ke sinethuba lokushaya kalula izingcingo ezizuzwe njengefa (super).

Ikhodi yesampula:

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

Ukweqa okunamandla kwezindlela ezimweni zekilasi:

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

Amaphakheji/izikhala zamagama

Indawo yamagama kufanele ihlale ihlanzekile!
Ngokunjalo, ulimi kumele lunikeze leli thuba.
Ku-Mash, uma indlela yekilasi imile, ingabizwa ngokuphephile kunoma iyiphi ingxenye yekhodi.

Isibonelo:

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

Ngendlela, i-super operator izosebenza kahle uma ibizwa ngale ndlela.

Ukungafani

Enguqulweni entsha yolimi baphathwa njengamakilasi:

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

Inombolo entsha

Manje izici zokubala zingabelwa amanani angashintshi:

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

Ulimi olushumekiwe

Ngokunokwenzeka, i-Mash ingathola i-niche yayo njengolimi lokuhlela olushumekiwe, olufana nesiLua.

Ukuze uqale ukusebenzisa i-Mash ngalezi zinhloso, awudingi ngisho nokuhlanganisa iphrojekthi ngokwakho.

I-Mash ine-Runtime Environment - i-VM esekelwe kusitaki ehlanganiswe njengomtapo wezincwadi onamandla one-API egcwele.

Odinga ukukwenza nje ukuyengeza ekuncikeni kwephrojekthi futhi ushaye izingcingo ezimbalwa.

Ulimi ngokwalo luhlinzeka ngokusebenza ukuze lusebenze njengolimi olushumekiwe.
Ngesikhathi esifanayo, ukusebenza ngokuhlanganyela nemitapo yolwazi yolimi kanye nezinkampani zangaphandle akuthintwa.
Sithola ulimi olushumekiwe olungasebenzisa amandla aphelele ezinhlaka ezahlukene ezibhalwe kulo.

I-Mash + JVM

Ngaqala ukwakha inguqulo yomhumushi we-JVM.
Mhlawumbe, ngemva kwenani lesikhathi esingu-N, okuthunyelwe kulesi sihloko kuzovela ku-HabrΓ©.

Imiphumela

Ayikho imiphumela ethile. Lokhu ukumelwa okuphakathi kwemiphumela.
Nginifisela inhlanhla nonke ngo-2020.

Source: www.habr.com

Engeza amazwana