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:
- Puʻu nui.
- He ahu no ka mālama ʻana i nā helu hoʻihoʻi.
- Puʻu ʻōpala.
- 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.
Mahalo iā ʻoe no ka heluhelu ʻana a hiki i ka hopena inā ʻoe i hana.
Source: www.habr.com