Muddo dhowr sano ah, waxaan isku dayayay gacantayda si aan u horumariyo luuqadeyda barnaamijka. Waxaan rabay in aan abuuro waxa aan rumaysnaa in ay tahay tan ugu fudud, ugu shaqaynaysa, iyo luqadda ugu habboon ee suurtogalka ah.
Maqaalkan, waxaan rabaa inaan iftiimiyo marxaladaha ugu muhiimsan ee shaqadayda, si aan u bilaabo, sharaxo fikradda luqadda ee aan abuuray iyo hirgelinteedii ugu horreysay, oo aan hadda ka shaqeynayo.
Waxaan horay u sheegi doonaa inaan mashruuca oo dhan ku qoray Free Pascal, maadaama barnaamijyada lagu soo ururin karo tiro aad u badan oo aalado ah, isku-duwaha laftiisana wuxuu soo saaraa ikhtiyaari aad u wanagsan (waxaan ku ururiyaa dhammaan qaybaha mashruuca oo leh calanka O2).
Deegaanka runtime luqadda
Marka hore, waa inaan ka hadlaa mashiinka farsamada gacanta ee aan ku qasbanahay inaan qoro si aan ugu socodsiiyo codsiyada mustaqbalka ee luqaddayda. Waxaan go'aansaday in aan hirgeliyo qaab-dhismeedka ku-saleysan, malaha sababtoo ah waxay ahayd midda ugu fudud. Maan helin hal maqaal oo wanaagsan oo ku saabsan sida tan loogu sameeyo Ruushka, markaa ka dib markaan akhriyay qaar ka mid ah qalabka Ingiriisiga, waxaan bilaabay inaan shaqeeyo naqshadaynta iyo qorista mishiinka. Hoosta, waxaan wadaagi doonaa fikradahayga go'an iyo horumarka aaggan.
Hirgelinta raasamaal
Sida cad, xidhmadu waxay ku taal xagga sare ee VM-ga. Hirgelintayda, waxay ka shaqeysaa blocks. Asal ahaan, waa tilmaame fudud oo kala duwan iyo doorsoome lagu kaydinayo tusmada sare ee xidhmada.
Marka la bilaabo, 256 curiye ayaa la abuurayaa. Haddii tilmaame badan lagu riixo xidhmada, xajmigeedu waxa uu kordhiyaa 256 walxood oo kale. Sidaas awgeed, marka canaasiirta laga saaro xirmada, cabbirkeeda ayaa la hagaajiyaa.
VM waxay isticmaashaa dhowr xidhmo:
- Xidhmada ugu weyn
- Isku duub si aad u kaydiso dhibcaha soo laabashada.
- Xirmada qashinka.
- Isku-dayga isku-day/qabsashada/ugu dambayntii waxay xannibaysaa maamulaha.
Joogtada iyo doorsoomayaasha
Tani waa sahlan tahay. Joogtada waxaa lagu maamulaa kood gaar ah, qayb yar waxaana laga heli karaa codsiyada mustaqbalka ee ciwaannada taagan. Kala duwanaanshuhu waa habab tilmaameyaal cabbir gaar ah leh, unugyahoodana waxaa lagu helaa tusmooyin - tusaale ahaan, ciwaanka taagan. Kala duwanaanshiyaha waxaa lagu riixi karaa meesha ugu sareysa ee xirmada ama waxaa laga akhrisan karaa halkaas. Dhab ahaantii, maadaama doorsoomayaalkeennu ay aasaas ahaan u kaydiyaan tilmaamayaasha qiyamka xusuusta VM, luqadda inta badan waxay isticmaashaa tilmaameyaal qarsoon.
Qashin ururiyaha
Gudaha VM-kayga, waa semi-otomaatig ah. Taasi waa, horumariyaha ayaa go'aaminaya goorta la wacayo aruuriyaha qashinka. Kuma tiirsana miiska tilmaame dhaqameed, sida Python, Perl, Ruby, Lua, iyo wixii la mid ah. Waxaa lagu hirgeliyay hab calaamadeysan. Taasi waa, marka doorsoome loo qoondeeyo qiime ku meel gaadh ah, tilmaame qiimihiisu yahay ayaa lagu daraa kaydiyaha qashinka. Ururiyaha ayaa markaa si degdeg ah u dhex mara liiska tilmaamayaasha ee jira.
Wax ka qabashada isku dayga/qabsashada/ugu dambayntii way xannibaysaa
Sida luqad kasta oo casriga ah, wax ka qabashada ka reeban waa qayb muhiim ah. Kernel-ka VM wuxuu ku duudduubay isku-day...qabso, kaas oo ku soo laaban kara fulinta code ka dib marka laga reebo, ku riixaya xoogaa macluumaad ah oo ku saabsan xirmada. Koodhka codsigu waxa uu qeexi karaa isku day/qabasho/ugu dambayntii blocks kood, isaga oo tilmaamaya meelaha laga soo galo qabashada (hagaha ka reeban) iyo ugu dambayn/dhammaadka (dhammaadka block).
Multithreading
Waxa lagu taageeraa heerka VM Way fududahay oo fududahay in la isticmaalo. Waxay u shaqaysaa iyada oo aan kala goyn, markaa koodku waa inuu ku socdaa dhawr jeer si dhakhso ah iyada oo loo marayo taxane badan.
Maktabadaha dibadda ee VM-yada
Ma jirto waddo hareeraheeda ah. VM waxay taageertaa soo dejinta, sida luqadaha kale. Waxaad ku qori kartaa xoogaa kood ah Mash, qaarna luqadaha hooyo, ka dibna isku xidh.
Turjumaan ka yimid luqadda Mash-ga heerka sare ah una beddelaya bytecode ee VM-yada
Luuqad dhexe
Si aad dhaqso ugu qorto turjumaan luqad adag oo loo diro VM code, waxaan markii hore sameeyay luqad dhexdhexaad ah. Natiijadu waxay ahayd muuqaal argagax leh, oo u eg shirka oo aan runtii macno samaynayn halkan. Aan idhaahdo heerkan oo kale, tarjumuhu wuxuu ka shaqeeyaa inta badan joogtaynta iyo doorsoomayaasha, isagoo xisaabinaya ciwaanadooda taagan iyo ciwaanadooda barta laga soo galo.
Dhismaha turjubaanka
Maan dooran dhismaha ugu fiican ee hirgelinta. Turjubaanka ma dhiso geed kood ah, sida turjumaanada kale sameeyaan. Waxay eegaysaa bilawga dhismaha. Markaa, haddii koodka la kala saarayaa uu u eg yahay "inta <xaalad>:," markaas waxa iska cad in muddo ah in la dhisayo loop-ka waana in la farsameeyaa inta la dhisayo muddo wareeg ah. Wax la mid ah kiis beddelka kakan.
Waad ku mahadsan tahay xalkan qaab dhismeedka, iskudubariduhu si gaar ah uma degdegin. Si kastaba ha ahaatee, fududaynteeda wax ka beddelka ayaa si aad ah u kordhay. Waxaan ku daray dhismooyinka lagama maarmaanka ah si ka dhakhso badan inta kafeegaygu qaboojin karo. Taageerada OOP oo buuxda ayaa lagu hirgeliyay in ka yar hal toddobaad.
Hagaajinta koodka
Dabcan, tan si ka sii wanaagsan ayaa loo hirgelin karay (oo waxay ahaan doontaa, laakiin hadhow, markaan u dhawaado). Hadda, wanaajiyahu waxa kaliya oo uu jari karaa koodka aan la isticmaalin, joogtada, iyo soo dejinta dhismaha. Sidoo kale, joogtooyin badan oo isku qiimo ah ayaa lagu beddelaa mid keliya. Waa intaas.
luqadda Mash
Fikradda aasaasiga ah ee luqadda
Hadafka ugu weyn wuxuu ahaa in la horumariyo luqad u shaqeyneysa oo fudud intii suurtagal ah. Waxaan aaminsanahay in mashruucu ku gaadhay hadafkiisa midabyo duulaya.
Xirmooyinka koodka, nidaamyada, iyo shaqooyinka
Dhammaan dhismayaasha luqadda waxay ku furan yihiin xiidan : waxaana xidhay hawlwadeenku dhamaadka.
Nidaamyada iyo shaqooyinka waxaa lagu dhawaaqaa inay yihiin proc iyo func, siday u kala horreeyaan. Dooduhu waxay ku taxan yihiin khaanadaha. Tani waxay la mid tahay inta badan luqadaha kale.
Hawl-wadeen soo laabtay Waxaad ka soo celin kartaa qiimaha shaqo, hawlwadeen nasashada waxay kuu ogolaanaysaa inaad ka baxdo habraac/shaqo (haddii ay ka baxsan tahay wareegyada).
Koodhka Tusaalaha:
...
func summ(a, b):
return a + b
end
proc main():
println(summ(inputln(), inputln()))
end
Dhismayaasha la taageeray
- Loops: for..dhammaadka, halka..dhamaadka, ilaa..dhamaadka
- Shuruudaha: haddii..[kale..]dhammaadka, beddelo
- Hababka: proc <name>():… dhamaadka, func <name>():… dhamaadka
- Sumad & goto: <name>:, boodi <name>
- Tiro-koobyada tirooyinka iyo habab joogto ah.
Kala duwanaansho
Turjubaanka ayaa si toos ah u go'aamin kara, ama haddii horumariyuhu uu qoro var ka hor qeexitaankooda.
Tusaalooyinka koodka:
a ?= 10
b ?= a + 20
var a = 10, b = a + 20
Doorsoomayaasha caalamiga ah iyo kuwa maxalliga ah waa la taageeray.
OOP
Hagaag, waxaan gaadhnay mawduucii ugu xiisaha badnaa. Luqadda Mash waxay taageertaa dhammaan barnaamij-samaynta shayga ku jihaysan. Taas macnaheedu waa fasallo, dhaxal, polymorphism (oo ay ku jiraan firfircooni), milicsi toos ah oo firfircoon, iyo is-dhexgal (buuxa).
Anigoon hadal dheeraad ah lahayn, waxaan kaliya ku siin doonaa tusaalooyin kood ah.
Fasalka fudud iyo sida loola shaqeeyo:
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
Waxa soo baxay: 30.
Dhaxalka iyo 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
Waxa soo baxay: 60.
Ka warran polymorphism firfircoon? Taasi waa milicsiga!
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
Waxa soo baxay: 60.
Hadda aan qaadanno daqiiqad si aan u eegno qiyamka fudud iyo fasallada:
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
Natiijooyinka: run, run.
Ku saabsan hawl-wadeenada shaqada iyo tilmaamayaasha cad
Hawl-wadeenka ?= waxa loo adeegsadaa in tilmaame qiimihiisa xusuusta lagu meeleeyo doorsoomayaal.
Hawlwadeenku = waxa uu beddelaa qiimaha xusuusta uu tilmaamay doorsoome.
Oo hadda wax yar oo ku saabsan tilmaamayaasha cad. Waxaan ku daray luqadda si ay u jiraan.
@<variable> - u qaado tilmaame cad doorsoomayaal.
?<la beddeli karo> - doorsoomayaal ku hel tilmaame.
@= - U qoondee qiime doorsoome adigoo isticmaalaya tilmaame cad.
Koodhka Tusaalaha:
uses <bf>
uses <crt>
proc main():
var a = 10, b
b ?= @a
PrintLn(b)
b ?= ?b
PrintLn(b)
b++
PrintLn(a)
InputLn()
end
Soo saari doona: tiro ka mid ah, 10, 11.
Isku day
Koodhka Tusaalaha:
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
Qorshayaasha mustaqbalka
Weli waxaan isha ku hayaa GraalVM iyo Truffle. Deegaanka runtimeygu ma laha isku-ururiyaha JIT, marka marka la eego waxqabadka, hadda waxa kaliya ee la tartamaya Python. Waxaan rajeynayaa inaan hirgelin karo isku-darka JIT anigoo isticmaalaya GraalVM ama LLVM.
kayd
Waxaad la ciyaari kartaa horumarka oo aad laftigaaga la socon kartaa mashruuca.
Waad ku mahadsan tahay akhrinta ilaa dhamaadka, haddii aad samaysay.
Source: www.habr.com
