He ʻōlelo papahana ʻo Mash e hōʻuluʻulu iā ia iho

He ʻōlelo papahana ʻo Mash e hōʻuluʻulu iā ia iho

Aloha mai kākou i ka makahiki hou 2020.

Mai ka hoolaha ana o ka mua pou Kokoke pololei 1 makahiki i hala e pili ana iā Mash.

I loko o kēia makahiki, ua hoʻomaikaʻi maikaʻi ʻia ka ʻōlelo, ua noʻonoʻo ʻia nā ʻano he nui a ua hoʻoholo ʻia ke ʻano o ka hoʻomohala ʻana.

Hauʻoli wau e kaʻana like i kēia mau mea me ke kaiāulu.

Akahana

Ke kūkulu ʻia nei kēia papahana ma ka hoihoi wale nō a ʻaʻole hoʻohālike i ka noho aliʻi ʻana o ka honua ma ke kahua o nā ʻōlelo hoʻolālā hoʻoikaika!

ʻAʻole pono e noʻonoʻo ʻia kēia hoʻomohala ʻana ma ke ʻano he maʻamau e hoʻoikaika ʻia; ʻaʻole kūpono ka papahana, akā ke ulu nei naʻe.

GitHub
paena
nā hālāwai

Mea hōʻuluʻulu hou

Ma ka lālā /mashc o ka waihona papahana, hiki iā ʻoe ke ʻike i kahi mana hou o ka mea hoʻopili, i kākau ʻia ma Mash (ka mana mua o ka ʻōlelo).

Loaʻa i ka mea hōʻuluʻulu kahi code generator ma ka papa inoa asm (no ka mea hoʻohui no kahi VM i hoʻokumu ʻia).
I kēia manawa ke kūkulu nei au i kahi mana o ka generator no Java (JDK 1.8).

Kākoʻo piha ka mana hou o ka mea hōʻuluʻulu i ka hana o ka mana mua o ka ʻōlelo a hoʻopiha iā ia.

OOP hou

Ma ka mana hou o ka ʻōlelo, ua hoʻolālā ʻia ka hana me nā papa.
Hiki ke haʻi ʻia nā ʻano papa ma ke kino papa a ma waho.
I kēia manawa, loaʻa i ka papa kahi mea kūkulu kikoʻī: init.

Laʻana code:

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

Inā loaʻa ka hoʻoilina, a laila loaʻa iā mākou ka manawa e hana maʻalahi i nā kelepona hoʻoilina (super).

Laʻana code:

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

Ka hoʻopololei ʻana i nā ʻano hana ma nā hiʻohiʻona papa:

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

Nā pūʻolo / inoa inoa

Pono e hoʻomaʻemaʻe ka inoa inoa!
No laila, pono ka ʻōlelo e hāʻawi i kēia manawa.
Ma Mash, inā paʻa ke ʻano papa, hiki ke kāhea ʻia mai kahi ʻāpana o ke code.

Pākuhi:

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

Ma ke ala, e hana pololei ka super operator ke kāhea ʻia ma kēia ʻano.

Nā kumu'ē aʻe

Ma ka mana hou o ka ʻōlelo, mālama ʻia lākou e like me nā papa:

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

Enum hou

I kēia manawa hiki ke hāʻawi ʻia nā mea helu helu i nā waiwai mau:

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

ʻŌlelo i hoʻokomo ʻia

Loaʻa paha, hiki iā Mash ke loaʻa i kāna niche ma ke ʻano he ʻōlelo papahana i hoʻopili ʻia, e like me Lua.

No ka hoʻomaka ʻana e hoʻohana iā Mash no kēia mau kumu, ʻaʻole pono ʻoe e hōʻuluʻulu i ka papahana iā ʻoe iho.

Loaʻa iā Mash kahi Runtime Environment - kahi VM i hoʻokumu ʻia i ka stack i hōʻuluʻulu ʻia ma ke ʻano he waihona dynamic me kahi API piha.

ʻO nā mea a pau e pono ai ʻoe e hoʻohui iā ia i ka hilinaʻi o ka papahana a hana i ʻelua mau kelepona.

Hāʻawi ka ʻōlelo ponoʻī i ka hana e hana ma ke ʻano he ʻōlelo i hoʻopili ʻia.
I ka manawa like, ʻaʻole pili ka hana i hui pū me ka ʻōlelo a me nā hale waihona puke ʻaoʻao ʻekolu.
Loaʻa iā mākou kahi ʻōlelo i hoʻopili ʻia e hiki ke hoʻohana i ka mana piha o nā ʻano hana like ʻole i kākau ʻia i loko.

Mash + JVM

Ua hoʻomaka wau e hoʻomohala i kahi ʻano unuhi no ka JVM.
Malia paha, ma hope o N ka manawa, e ʻike ʻia kahi pou ma kēia kumuhana ma Habré.

Nā hopena

ʻAʻohe hopena kūikawā. He hōʻike waena kēia o nā hopena.
Laki maikaʻi i nā kānaka a pau i 2020.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka