Mash ndi chilankhulo cha pulogalamu chomwe chimadzipanga chokha

Mash ndi chilankhulo cha pulogalamu chomwe chimadzipanga chokha

Moni kwa nonse m'chaka chatsopano cha 2020.

Kuyambira kusindikizidwa koyamba positi Pafupifupi chaka cha 1 chadutsa pafupi ndi Mash.

M'chaka chino, chinenerocho chinasinthidwa kwambiri, mbali zake zambiri zinaganiziridwa ndipo vector ya chitukuko inatsimikiziridwa.

Ndine wokondwa kugawana zonsezi ndi anthu ammudzi.

chandalama

Pulojekitiyi ikupangidwa mwachidwi chabe ndipo simadzinamizira kuti ikulamulira dziko lonse pazilankhulo zamphamvu zamapulogalamu!

Kutukuka kumeneku sikuyenera kuganiziridwa ngati mulingo womwe uyenera kulimbikira; pulojekitiyi si yabwino, koma ikukulabe.

GitHub
webusaiti
Forum

Wopanga watsopano

Munthambi ya / mashc ya malo osungira polojekiti, mukhoza kuona mtundu watsopano wa compiler, womwe unalembedwa mu Mash (chiyankhulo choyamba).

Wopangayo ali ndi jenereta yama code pamndandanda wa asm (ophatikiza pa VM yochokera pa stack).
Panopa ndikupanga mtundu wa jenereta wa Java (JDK 1.8).

Mtundu watsopano wa compiler umathandizira kwathunthu magwiridwe antchito amtundu woyamba wa chilankhulo ndikukwaniritsa.

OOP yatsopano

M'chinenero chatsopanochi, ntchito yokhudzana ndi makalasi yasinthidwa pang'ono.
Njira zamakalasi zitha kulengezedwa mu gulu la kalasi komanso kunja kwake.
Kalasiyi tsopano ili ndi womanga momveka bwino: init.

Chitsanzo kodi:

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

Ngati cholowa chimachitika, ndiye kuti tili ndi mwayi woti tiyimbe mafoni otengera (wapamwamba).

Chitsanzo kodi:

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

Kuchulukitsa kwamphamvu kwa njira zamakalasi:

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

Phukusi/malo a mayina

Malo a mayina ayenera kukhala oyera!
Choncho, chinenero chiyenera kupereka mwayi umenewu.
Ku Mash, ngati njira ya kalasi ili yokhazikika, imatha kuyitanidwa kuchokera kugawo lililonse la code.

Chitsanzo:

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

Mwa njira, woyang'anira wapamwamba adzagwira ntchito moyenera akaitanidwa motere.

Kupatulapo

Mu mtundu watsopano wa chilankhulo amatengedwa ngati makalasi:

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

Enum yatsopano

Tsopano zinthu zowerengera zitha kuperekedwa nthawi zonse:

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

Chilankhulo chophatikizidwa

Mwachidziwikire, Mash atha kupeza niche yake ngati chilankhulo chophatikizidwa, chofanana ndi Lua.

Kuti muyambe kugwiritsa ntchito Mash pazifukwa izi, simuyenera kusonkhanitsa polojekitiyo nokha.

Mash ali ndi Runtime Environment - VM yokhala ndi stack yopangidwa ngati laibulale yamphamvu yokhala ndi API yathunthu.

Zomwe muyenera kuchita ndikuwonjezera kudalira kwa polojekiti ndikuyimba mafoni angapo.

Chilankhulo chokha chimapereka magwiridwe antchito kuti agwire ntchito ngati chilankhulo chophatikizidwa.
Nthawi yomweyo, magwiridwe antchito molumikizana ndi malaibulale achilankhulo komanso ena sakhudzidwa.
Timapeza chinenero chophatikizidwa chomwe chingagwiritse ntchito mphamvu zonse zamagulu osiyanasiyana olembedwa mmenemo.

Mash + JVM

Ndinayamba kupanga mtundu wa womasulira wa JVM.
Mwina, pambuyo pa N kuchuluka kwa nthawi, cholemba pamutuwu chidzawonekera pa HabrΓ©.

Zotsatira

Palibe zotsatira zapadera. Ichi ndi choyimira chapakati cha zotsatira.
Zabwino zonse kwa aliyense mu 2020.

Source: www.habr.com

Kuwonjezera ndemanga