UMash lulwimi lwenkqubo oluzihlanganisela ngokwalo

UMash lulwimi lwenkqubo oluzihlanganisela ngokwalo

Ndibulise kuye wonke umntu kunyaka omtsha ka-2020.

Ukususela ekupapashweni kokuqala iposti Phantse unyaka om-1 uphelile malunga noMash.

Kulo nyaka, ulwimi luye lwaphuculwa kakhulu, uninzi lwemiba yalo yacingisiswa kwaye kwamiselwa nevector yophuhliso.

Ndiyavuya ukwabelana ngako konke oku noluntu.

isikhanyeli

Le projekthi iphuhliswa ngomdla kuphela kwaye ayizenzi ngathi ilawula ihlabathi kwicandelo leelwimi eziguqukayo zokucwangcisa!

Olu phuhliso akufuneki luthathelwe ingqalelo njengomgangatho omele ukwenziwa; iprojekthi ayilunganga, kodwa iyaphuhla nangona kunjalo.

GitHub
website
Iforum

Umqokeleli omtsha

Kwisebe / i-mashc yendawo yokugcina iprojekthi, unokubona inguqu entsha yomqambi, ebhalwe kwi-Mash (uguqulelo lokuqala lolwimi).

Umqokeleli unomvelisi wekhowudi kuluhlu lwe-asm (kwi-assembler ye-VM esekelwe kwi-stack).
Okwangoku ndiphuhlisa inguqulelo yejenereyitha yeJava (JDK 1.8).

Inguqulelo entsha ye-compiler isekela ngokupheleleyo ukusebenza kwenguqulelo yokuqala yolwimi kwaye iyayincedisa.

I-OOP entsha

Kuhlelo olutsha lolwimi, umsebenzi weeklasi uhlengahlengiswe ngokuyinxenye.
Iindlela zeklasi zinokubhengezwa zombini kumzimba weklasi nangaphandle kwawo.
Iklasi ngoku inomakhi ocacileyo: init.

Ikhowudi yesampuli:

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

Ukuba ilifa lenzeka, ke sinethuba lokwenza iifowuni ezizuzwe ngokulula (super).

Ikhowudi yesampuli:

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

Ukugqithisa okuguquguqukayo kweendlela kwiimeko zeklasi:

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

Iipakethi/izithuba zamagama

Isithuba samagama kufuneka sihlale sicocekile!
Ngokufanelekileyo, ulwimi kufuneka lunike eli thuba.
Kwi-Mash, ukuba indlela yeklasi i-static, inokubizwa ngokukhuselekileyo kuyo nayiphi na inxalenye yekhowudi.

Umzekelo:

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

Ngendlela, umqhubi ophezulu uya kusebenza ngokuchanekileyo xa ebizwa ngale ndlela.

Ngaphandle

Kwinguqulelo entsha yolwimi baphathwa njengeeklasi:

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

Iqela elitsha

Ngoku izinto zobalo zinokubelwa amaxabiso angatshintshiyo:

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

Ulwimi olulungisiweyo

Ngokunokwenzeka, i-Mash inokufumana i-niche yayo njengolwimi olufakelweyo lwenkqubo, efana neLua.

Ukuqala ukusebenzisa iMash ngezi njongo, awudingi nokuba udibanise iprojekthi ngokwakho.

I-Mash ine-Runtime Environment - i-VM esekwe kwi-stack ehlanganiswe njengethala leencwadi eliguqukayo eline-API epheleleyo.

Konke okufuneka ukwenze kukuyongeza kuxhomekeke kwiprojekthi kwaye wenze iifowuni ezimbalwa.

Ulwimi ngokwalo lubonelela ngokusebenza njengolwimi oluzinzisiweyo.
Kwangaxeshanye, ukusebenza ngokubambisana nolwimi kunye namathala eencwadi angaphandle akuchaphazeleki.
Sifumana ulwimi olufakelweyo olungasebenzisa amandla apheleleyo eendlela ezahlukeneyo zesakhelo esibhaliweyo kuyo.

IMash + JVM

Ndaqalisa ukuphuhlisa inguqulelo yomguquli weJVM.
Mhlawumbi, emva kwexesha le-N, isithuba malunga nesi sihloko siya kubonakala kuHabrΓ©.

Iziphumo

Akukho ziphumo zithile. Olu luphawu oluphakathi lweziphumo.
Ithamsanqa kuye wonke umntu ngo-2020.

umthombo: www.habr.com

Yongeza izimvo