Kwemakore akawanda ndakaedza ruoko rwangu pakugadzira mutauro wangu wepurogiramu. Ini ndaida kugadzira, mumaonero angu, iyo yakanyanya kupfava, inoshanda zvizere uye yakanakira mutauro inogoneka.
Muchikamu chino ndinoda kuratidza matanho makuru ebasa rangu uye, kutanga, tsanangura pfungwa yakasikwa yemutauro uye kushandiswa kwayo kwekutanga, iyo yandiri kushanda iye zvino.
Rega nditaure pachine nguva kuti ndakanyora chirongwa chose muFree Pascal, nekuti... zvirongwa pairi zvinogona kuunganidzwa kwenhamba huru yemapuratifomu, uye iyo compiler pachayo inogadzira yakagadziridzwa mabhinari (ini ndinounganidza zvese zvikamu zvepurojekiti nemureza weO2).
Mutauro nguva yekumhanya
Chekutanga pane zvese, zvakafanira kutaura nezve muchina chaiwo wandaifanira kunyora kuti ndishandise ramangwana mumutauro wangu. Ndakafunga kuita stack architecture, pamwe, nekuti yaive nzira iri nyore. Handina kuwana chinyorwa chimwe chete chakajairika pamusoro pekuita izvi muchiRussia, saka mushure mekujairana nemashoko emutauro weChirungu, ndakagara pasi kuti ndigadzire uye kunyora bhasikoro rangu. Tevere ini ndicharatidza yangu "yepamusoro" mazano uye budiriro munyaya iyi.
Stack kushandiswa
Zviripachena, pamusoro peVM pane stack. Mukuita kwangu kunoshanda mumabhuroko. Chaizvoizvo iyi iri nyore rondedzero yeanongedza uye shanduko yekuchengetedza indekisi yekumusoro kwestack.
Painotangwa, mutsara we 256 element unogadzirwa. Kana mamwe mapoinzi akasundirwa pachitunha, saizi yaro inowedzera neanotevera 256 zvinhu. Saizvozvo, kana uchibvisa zvinhu kubva mudura, saizi yayo inogadziriswa.
Iyo VM inoshandisa akati wandei akaturikidzana:
- Main stack.
- Murwi wekuchengetedza mapoinzi ekudzoka.
- Garbage collector stack.
- Edza/kubata/pedzisire vhara mutakuri wemutambi.
Constants uye Variables
Iyi iri nyore. Constants inobatwa mune yakaparadzana chidimbu chidiki chekodhi uye inowanikwa mune ramangwana maapplication kuburikidza neakamira kero. Variables imhando yeanongedzo yehumwe saizi, kupinda kumaseru ayo kunoitwa ne index - i.e. static address. Zvinosiyana zvinogona kusundidzirwa kumusoro kwechitubu kana kuverenga kubva ipapo. Chaizvoizvo, nokuti Nepo machinjiro edu achichengeta mapoinzi kune zvakakosha mundangariro yeVM, mutauro unotongwa nekushanda nemanongedzo.
Muunganidzi wemarara
MuVM yangu ndeye semi-otomatiki. Avo. mugadziri pachake anosarudza nguva yekudaidza muunganidzi wemarara. Izvo hazvishande uchishandisa yakajairwa pointer counter, semuPython, Perl, Ruby, Lua, nezvimwe. Inoitwa kuburikidza nemaki system. Avo. kana shanduko yakaitirwa kupihwa kukosha kwechinguvana, chinongedzo kune iyi kukosha chinowedzerwa kune muunganidzwa wemarara. Mune ramangwana, muunganidzi anokurumidza kumhanya kuburikidza neakatogadzirirwa rondedzero yeanongedza.
Kubata edza/kubata/pekupedzisira kunovhara
Sezvakaita mumutauro wemazuva ano, kubata kwakasiyana chinhu chakakosha. VM musimboti wakaputirwa netry..catch block, inogona kudzoka ku code execution mushure mekubata kusarudzika nekusundidzira rumwe ruzivo nezvayo pamurwi. Mune kodhi yekushandisa, unogona kutsanangura edza / kubata / pakupedzisira mabhuroki ekodhi, uchitsanangura mapoinzi ekupinda pakubata (kunze kwemubati) uye pakupedzisira / kupera (kupera kwebhuroka).
Multithreading
Inotsigirwa padanho reVM. Zviri nyore uye zviri nyore kushandisa. Inoshanda isina inovhiringidza sisitimu, saka iyo kodhi inofanirwa kuitwa mune akati wandei shinda kakawanda nekukurumidza, zvichiteerana.
Maraibhurari ekunze eVMs
Hapana nzira yekuita pasina izvi. VM inotsigira zvinotengeswa kunze kwenyika, zvakafanana nemashandisirwo azvinoitwa mune mimwe mitauro. Iwe unogona kunyora chikamu chekodhi muMash uye chikamu chekodhi mumitauro yeko, wozobatanidza mune imwe.
Muturikiri kubva pamutauro weMash wepamusoro-soro kuenda kubhaitikodhi yeVM
Mutauro wepakati
Kukurumidza kunyora muturikiri kubva mumutauro wakaoma kupinda muVM kodhi, ndakatanga kugadzira mutauro wepakati. Mhedzisiro yacho yaive yekuunganidza-senge inotyisa yekuona iyo isina imwe pfungwa yekufunga apa. Ini ndinongotaura kuti padanho rino mushanduri anogadzirisa akawanda anochinja uye akasiyana, anoverengera avo static kero uye kero dzenzvimbo dzekupinda.
Zvivakwa zvevashanduri
Ini handina kusarudza yakanakisa dhizaini yekushandisa. Mushanduri haagadziri muti wekodhi, sezvinoita vamwe vashanduri. Anotarisa pakutanga kwechimiro. Avo. kana chidimbu chekodhi chiri kuchekwa chichiita senge "nepo :", zvino zviri pachena kuti iyi inguva yekuvaka loop uye inoda kugadziriswa sechinguva chidiki chekuvaka. Chimwe chinhu chakaoma chinja-kesi.
Nekuda kwemhinduro yekuvaka iyi, muturikiri akazoita kunge asiri kukurumidza. Zvisinei, kusununguka kwekushandurwa kwayo kwakawedzera zvakanyanya. Ndakawedzera zvivako zvinodiwa nokukurumidza kupfuura kofi yangu inogona kutonhora pasi. Rutsigiro rwakazara rweOOP rwakaitwa mukati meisingasviki svondo.
Code optimization
Pano, hongu, inogona kunge yakaitwa zvirinani (uye ichaitwa, asi gare gare, kana munhu angosvika kwairi). Kusvika pari zvino, iyo optimizer inongoziva nzira yekucheka isina kushandiswa kodhi, maconstants uye kunze kwenyika kubva kugungano. Zvakare, dzinoverengeka dzisingaperi dzine kukosha kwakafanana dzinotsiviwa neimwe. Ndizvo zvose.
Mash mutauro
Pfungwa huru yemutauro
Pfungwa huru yakanga iri yekugadzira mutauro unoshanda zvikuru uye wakapfava unobvira. Ini ndinofunga kuti budiriro inosangana nebasa rayo ne bang.
Code blocks, maitiro uye mabasa
Zvose zvivakwa mumutauro zvinovhurwa nekoloni. : uye anovharwa nemushandisi magumo.
Maitiro uye mabasa anoziviswa se proc uye func, zvichiteerana. Nharo dzacho dzakarongwa mumaparenthesi. Zvose zvakafanana nemimwe mitauro yakawanda.
Operator dzokera unogona kudzorera kukosha kubva kune basa, opareta zororo inokubvumira kubuda maitiro / basa (kana riri kunze kwezvishwe).
Sample code:
...
func summ(a, b):
return a + b
end
proc main():
println(summ(inputln(), inputln()))
end
Anotsigirwa Magadzirirwo
- Loops: ye..kuguma, apo..kuguma, kusvika..kuguma
- Conditions: kana..[zvimwe..]guma, chinja..[case..end..][zvimwe..]guma.
- Nzira: proc ():... kupera, func ():... kupera
- Label & goto: :, svetuka
- Enum enumerations uye arrays anogara aripo.
Misiyano
Mushanduri anogona kuzvisarudzira otomatiki, kana mugadziri akanyora var asati azvitsanangura.
Mienzaniso yekodhi:
a ?= 10
b ?= a + 20
var a = 10, b = a + 20
Zvisikwa zvepasi rese uye zvemuno zvinotsigirwa.
OOP
Zvakanaka, tauya kune yakanyanya kunaka nyaya. Mash inotsigira ese anotungamirwa nechinhu-anomisikidza zvirongwa paradigms. Avo. makirasi, nhaka, polymorphism (kusanganisira simba), dynamic otomatiki kufungisisa uye introspection (yakazara).
Pasina imwezve ado, zviri nani kungopa kodhi mienzaniso.
Kirasi iri nyore uye kushanda nayo:
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
Kubuda: 30.
Nhaka uye 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
Kubuda: 60.
Zvakadini nezve dynamic polymorphism? Hongu, uku ndiko kufungidzira!:
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
Kubuda: 60.
Iye zvino ngatitorei chinguva kuti titarise kune akareruka maitiro uye makirasi:
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
Will output: chokwadi, chokwadi.
Nezve assignment operators uye anonongedzera akajeka
Iyo ?= mushandisi inoshandiswa kugovera chinongedzo chekunongedza kune kukosha mundangariro.
Iyo = opareta inoshandura kukosha mundangariro uchishandisa chinongedzo kubva pane chinoshanduka.
Uye zvino zvishoma nezve zvinongedzo zvakajeka. Ndakadziwedzera pamutauro kuti dzivepo.
@ - tora chinongedzo chakajeka kune chinosiyana.
? β tora shanduko neinongedzo.
@= - govera kukosha kune shanduko neinongedza yakajeka kwairi.
Sample code:
uses <bf>
uses <crt>
proc main():
var a = 10, b
b ?= @a
PrintLn(b)
b ?= ?b
PrintLn(b)
b++
PrintLn(a)
InputLn()
end
Kuchabuda: imwe nhamba, 10, 11.
Edzai..[bata..][pekupedzisira..]pedzisiro
Sample 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
Zvirongwa zvemangwana
Ndinoramba ndakatarisa uye ndakatarisa GraalVM & Truffle. Yangu yekumhanya nharaunda haina JIT compiler, saka maererano nekuita iko zvino inongokwikwidza nePython. Ndinovimba kuti ndichakwanisa kuita JIT kuunganidzwa kwakavakirwa paGraalVM kana LLVM.
repository
Iwe unogona kutamba nebudiriro uye wotevera chirongwa iwe pachako.
Ndinokutendai nekuverenga kusvika kumagumo kana makadaro.
Source: www.habr.com