ʻŌlelo polokalamu hou Mash

No kekahi mau makahiki ua ho'āʻo au i koʻu lima i ka hoʻomohala ʻana i kaʻu ʻōlelo polokalamu ponoʻī. Ua makemake au e hana, i koʻu manaʻo, i ka ʻōlelo maʻalahi, hana piha a maʻalahi.

Ma kēia 'atikala makemake au e ho'okākala i nā pae nui o ka'u hana, a e ho'omaka me ka wehewehe 'ana i ka mana'o i haku 'ia o ka 'ōlelo a me kona ho'okō mua 'ana, a'u e hana nei i kēia manawa.

E ʻōlelo mua wau ua kākau wau i ka papahana holoʻokoʻa ma Free Pascal, no ka mea... Hiki ke hōʻuluʻulu ʻia nā papahana ma luna o ia no ka nui o nā paepae, a ʻo ka mea hoʻopili ponoʻī e hana i nā binaries maikaʻi loa (ʻohi wau i nā ʻāpana āpau o ka papahana me ka hae O2).

Ka manawa holo ʻōlelo

ʻO ka mea mua, pono ke kamaʻilio e pili ana i ka mīkini virtual aʻu i kākau ai e holo i nā noi e hiki mai ana ma kaʻu ʻōlelo. Ua hoʻoholo wau e hoʻokō i kahi hoʻolālā stack, malia paha, no ka mea ʻo ia ke ala maʻalahi. ʻAʻole i loaʻa iaʻu kahi ʻatikala maʻamau e pili ana i ka hana ʻana i kēia ma ka ʻōlelo Lūkini, no laila, ma hope o ka hoʻomaʻamaʻa ʻana iaʻu iho me ka ʻōlelo Pelekane, noho wau i ka hoʻolālā ʻana a me ke kākau ʻana i kaʻu paikikala ponoʻī. Ma hope aʻe, e hōʻike wau i kaʻu mau manaʻo "hou" a me nā hoʻomohala i kēia mea.

Hoʻokō ahu

ʻIke loa, aia ma ka piko o ka VM ka waihona. I koʻu hoʻokō ʻana, hana ia i nā poloka. ʻO ka mea nui, he ʻano maʻalahi kēia o nā kuhikuhi a me kahi hoʻololi e mālama ai i ka index o ka piko o ka waihona.
Ke hoʻomaka ʻia, hana ʻia kahi ʻano o 256 mau mea. Inā ʻoi aku ka nui o nā kuhikuhi ma luna o ka waihona, e hoʻonui ʻia kona nui e nā mea 256 e hiki mai ana. No laila, i ka wehe ʻana i nā mea mai ka waihona, hoʻoponopono ʻia kona nui.

Hoʻohana ka VM i kekahi mau pūʻulu:

  1. Puʻu nui.
  2. He ahu no ka mālama ʻana i nā helu hoʻihoʻi.
  3. Puʻu ʻōpala.
  4. E ho'āʻo/hopu/ hoʻopaʻa hope i ka hoʻopaʻa lima.

Nā mea mau a me nā mea hoʻololi

He mea maʻalahi kēia. Hoʻohana ʻia nā mea paʻa ma kahi ʻāpana liʻiliʻi liʻiliʻi o ke code a loaʻa i nā noi e hiki mai ana ma o nā helu static. ʻO nā mea hoʻololi he ʻano o nā kuhikuhi o kahi nui, ke komo ʻana i kāna mau cell e lawe ʻia e ka index - i.e. helu kuhi henua. Hiki ke hoʻokuʻu ʻia nā ʻano like ʻole i luna o ka waihona a heluhelu ʻia mai laila. ʻOiaʻiʻo, no ka mea ʻOiai ʻo kā mākou mau mea hoʻololi e mālama pono i nā kuhikuhi i nā waiwai i ka hoʻomanaʻo VM, ua hoʻomalu ʻia ka ʻōlelo e ka hana ʻana me nā kuhikuhi kikoʻī.

ʻOhi ʻōpala

Ma kaʻu VM he semi-aunoa. ʻO kēlā mau. ʻo ka mea hoʻomohala ponoʻī e hoʻoholo i ka wā e kāhea ai i ka ʻohi ʻōpala. ʻAʻole ia e hana me ka hoʻohana ʻana i kahi papa kuhikuhi maʻamau, e like me Python, Perl, Ruby, Lua, etc. Hoʻokō ʻia ma o kahi ʻōnaehana marker. ʻO kēlā mau. i ka wā i manaʻo ʻia e hāʻawi ʻia i kahi waiwai no ka manawa pōkole, hoʻohui ʻia kahi kuhikuhi i kēia waiwai i ka waihona o ka ʻōpala. I ka wā e hiki mai ana, holo wikiwiki ka mea ʻohi i ka papa kuhikuhi i hoʻomākaukau mua ʻia.

Ka hoʻāʻo/hopu/hopena poloka

E like me nā ʻōlelo o kēia wā, ʻo ka lawelawe ʻokoʻa kekahi mea nui. Hoʻopili ʻia ka VM core i kahi hoʻāʻo..catch block, hiki ke hoʻi i ka hoʻokō code ma hope o ka hopu ʻana i kahi ʻokoʻa ma ke kaomi ʻana i kekahi ʻike e pili ana iā ia ma luna o ka waihona. Ma ka palapala noi, hiki iā ʻoe ke wehewehe i ka hoʻāʻo/hopu/hopena o nā poloka o ke code, e kuhikuhi ana i nā helu komo ma ka hopu (hoʻokoe ka mea lawelawe) a me ka hope/hope (hopena o ka poloka).

Heluhelu nui

Kākoʻo ʻia ia ma ka pae VM. He maʻalahi a maʻalahi hoʻi e hoʻohana. Ke hana nei ia me ka ʻole o kahi ʻōnaehana hoʻopau, no laila pono e hoʻokō ʻia ke code i kekahi mau kaula i mau manawa wikiwiki.

Nā hale waihona puke waho no nā VM

ʻAʻohe ala e hana ai me ka ʻole o kēia. Kākoʻo ʻo VM i ka lawe ʻana mai, e like me ka hoʻokō ʻia ʻana ma nā ʻōlelo ʻē aʻe. Hiki iā ʻoe ke kākau i ʻāpana o ke code ma Mash a me kahi hapa o ke code ma nā ʻōlelo ʻōiwi, a laila e hoʻopili iā lākou i hoʻokahi.

Unuhi mai ka ʻōlelo Mash pae kiʻekiʻe i ka bytecode no nā VM

ʻŌlelo waena

No ke kākau wikiwiki ʻana i ka unuhi ʻōlelo mai kahi ʻōlelo paʻakikī i ka code VM, ua kūkulu mua wau i kahi ʻōlelo waena. ʻO ka hopena he hiʻohiʻona weliweli e like me ka hui pū ʻana a ʻaʻohe kumu kikoʻī e noʻonoʻo ai ma aneʻi. E ʻōlelo wale wau ma kēia pae ka mea unuhi e hana i ka hapa nui o nā mea mau a me nā ʻano hoʻololi, e helu i kā lākou mau helu static a me nā helu o nā helu komo.

Hoʻolālā unuhi

ʻAʻole wau i koho i ka hoʻolālā maikaʻi loa no ka hoʻokō. ʻAʻole hana ka unuhi ʻōlelo i kumu lāʻau code, e like me nā mea unuhi ʻē aʻe. Nānā ʻo ia i ka hoʻomaka ʻana o ka hale. ʻO kēlā mau mea. inā ʻike ʻia ka ʻāpana o ke code e like me "while <condition>:", a laila maopopo ka hana ʻana o ka loop loop a pono e hana ʻia ma ke ʻano he hana loop loop. ʻO kekahi mea e like me kahi pahu hoʻololi paʻakikī.

Mahalo i kēia hoʻoponopono hoʻolālā, ua lilo ka unuhi ʻōlelo ʻaʻole wikiwiki loa. Eia naʻe, ua piʻi nui ka maʻalahi o kāna hoʻololi. Ua hoʻohui au i nā hale pono ʻoi aku ka wikiwiki ma mua o ka hiki ʻana o kaʻu kofe. Ua hoʻokō ʻia ke kākoʻo piha OOP ma lalo o hoʻokahi pule.

Hoʻopololei code

Eia, ʻoiaʻiʻo, ua hiki ke hoʻokō ʻoi aku ka maikaʻi (a e hoʻokō ʻia, akā ma hope, i ka wā e hele ai kekahi i laila). I kēia manawa, ʻike wale ka optimizer pehea e ʻoki ai i nā code i hoʻohana ʻole ʻia, nā mea hoʻomau a me nā lawe ʻia mai ka hui. Eia kekahi, ua pani ʻia kekahi mau mea mau me ka waiwai like e hoʻokahi. ʻo ia wale nō.

ʻŌlelo mash

Manaʻo kumu o ka ʻōlelo

ʻO ka manaʻo nui, ʻo ia ka hoʻomohala ʻana i ka ʻōlelo maʻalahi loa. Manaʻo wau ua hoʻokō ka hoʻomohala ʻana i kāna hana me kahi bang.

Nā poloka code, nā kaʻina hana a me nā hana

Wehe ʻia nā hana a pau ma ka ʻōlelo me kahi kolonā. : a ua pani ʻia e ka mea hana hopena.

Hōʻike ʻia nā kaʻina hana a me nā hana ma ke ʻano he proc a me func, kēlā me kēia. Hoʻopaʻa ʻia nā manaʻo i loko o nā pale. Ua like nā mea a pau me nā ʻōlelo ʻē aʻe.

Mea hoʻohana hoi mai hiki iā ʻoe ke hoʻihoʻi i kahi waiwai mai kahi hana, operator wanaao ae hiki iā ʻoe ke haʻalele i ke kaʻina hana/hana (inā aia ma waho o nā puka lou).

Laʻana code:

...

func summ(a, b):
  return a + b
end

proc main():
  println(summ(inputln(), inputln()))
end

Nā Manaʻo i kākoʻo ʻia

  • Loops: for..end, while..end, until..end
  • Nā Kūlana: inā..[else..]end, switch..[case..end..][else..]end
  • Nā hana: proc <name>():... end, func <name>():... end
  • Lepili & hele: <inoa>:, lele <ino>
  • Enum enumerations a me ka hoʻonohonoho mau.

Nā Loli

Hiki i ka mea unuhi ʻōlelo ke hoʻoholo maʻalahi iā lākou, a i ʻole e kākau ka mea hoʻomohala i ka var ma mua o ka wehewehe ʻana iā lākou.

Nā laʻana code:

a ?= 10
b ?= a + 20

var a = 10, b = a + 20

Kākoʻo ʻia nā ʻano like ʻole o ka honua a me ka kūloko.

OOP

ʻAe, ua hiki mai mākou i ke kumuhana ʻono loa. Kākoʻo ʻo Mash i nā paradigms hoʻolālā ʻokoʻa. ʻO kēlā mau. nā papa, ka hoʻoilina, ka polymorphism (me ka dynamic), ka noʻonoʻo a me ka nānā ʻana (piha).

Me ka ʻole ado hou aku, ʻoi aku ka maikaʻi o ka hāʻawi ʻana i nā hiʻohiʻona code.

He papa maʻalahi a hana pū me ia:

uses <bf>
uses <crt>

class MyClass:
  var a, b
  proc Create, Free
  func Summ
end

proc MyClass::Create(a, b):
  $a = new(a)
  $b = new(b)
end

proc MyClass::Free():
  Free($a, $b)
  $rem()
end

func MyClass::Summ():
  return $a + $b
end

proc main():
  x ?= new MyClass(10, 20)
  println(x->Summ())
  x->Free()
end

Ka hoʻopuka ʻana: 30.

Hoʻoilina a me ka polymorphism:

uses <bf>
uses <crt>

class MyClass:
  var a, b
  proc Create, Free
  func Summ
end

proc MyClass::Create(a, b):
  $a = new(a)
  $b = new(b)
end

proc MyClass::Free():
  Free($a, $b)
  $rem()
end

func MyClass::Summ():
  return $a + $b
end

class MyNewClass(MyClass):
  func Summ
end

func MyNewClass::Summ():
  return ($a + $b) * 2
end

proc main():
  x ?= new MyNewClass(10, 20)
  println(x->Summ())
  x->Free()
end

Ka hoʻopuka ʻana: 60.

Pehea e pili ana i ka polymorphism dynamic? ʻAe, noʻonoʻo kēia!:

uses <bf>
uses <crt>

class MyClass:
  var a, b
  proc Create, Free
  func Summ
end

proc MyClass::Create(a, b):
  $a = new(a)
  $b = new(b)
end

proc MyClass::Free():
  Free($a, $b)
  $rem()
end

func MyClass::Summ():
  return $a + $b
end

class MyNewClass(MyClass):
  func Summ
end

func MyNewClass::Summ():
  return ($a + $b) * 2
end

proc main():
  x ?= new MyClass(10, 20)
  x->Summ ?= MyNewClass::Summ
  println(x->Summ())
  x->Free()
end

Ka hoʻopuka ʻana: 60.

I kēia manawa e hoʻokaʻawale i kahi manawa e nānā i nā waiwai maʻalahi a me nā papa:

uses <bf>
uses <crt>

class MyClass:
  var a, b
end

proc main():
  x ?= new MyClass
  println(BoolToStr(x->type == MyClass))
  x->rem()
  println(BoolToStr(typeof(3.14) == typeReal))
end

E hoʻopuka: ʻoiaʻiʻo, ʻoiaʻiʻo.

E pili ana i nā mea hana a me nā kuhikuhi kikoʻī

Hoʻohana ʻia ka mea hoʻohana ?= no ka hāʻawi ʻana i kahi hoʻololi i kahi kuhikuhi i kahi waiwai i ka hoʻomanaʻo.
Hoʻololi ka mea hoʻohana i kahi waiwai i ka hoʻomanaʻo me ka hoʻohana ʻana i kahi kuhikuhi mai kahi loli.
A i kēia manawa e pili ana i nā kuhikuhi kikoʻī. Ua hoʻohui au iā lākou i ka ʻōlelo i ola lākou.
@<variable> — lawe i kahi kuhikuhi kiko'ī i kahi loli.
?<variable> — e kiʻi i kahi hoʻololi ma ke kuhikuhi.
@= — hāʻawi i kahi waiwai i kahi hoʻololi e kahi kuhikuhi kikoʻī iā ia.

Laʻana code:

uses <bf>
uses <crt>

proc main():
  var a = 10, b
  b ?= @a
  PrintLn(b)
  b ?= ?b
  PrintLn(b)
  b++
  PrintLn(a)
  InputLn()
end

E hoʻopuka: kekahi helu, 10, 11.

E ho'āʻo..[hopu..][hopena..]hope

Laʻana code:

uses <bf>
uses <crt>

proc main():
  println("Start")
  try:
    println("Trying to do something...")
    a ?= 10 / 0
  catch:
    println(getError())
  finally:
    println("Finally")
  end
  println("End")
  inputln()
end

Nā papa no ka wā e hiki mai ana

Ke nānā mau nei au a nānā iā GraalVM & Truffle. ʻAʻohe JIT compiler koʻu kaiapuni runtime, no laila ma ke ʻano o ka hana i kēia manawa ke hoʻokūkū wale nei me Python. Manaʻo wau e hiki iaʻu ke hoʻokō i ka compilation JIT e pili ana iā GraalVM a i ʻole LLVM.

waihona waihona

Hiki iā ʻoe ke pāʻani me nā hoʻomohala a hahai i ka papahana iā ʻoe iho.

paena
Ka waihona ma GitHub

Mahalo iā ʻoe no ka heluhelu ʻana a hiki i ka hopena inā ʻoe i hana.

Source: www.habr.com

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