Mo le tele o tausaga sa ou taumafai i loʻu lima i le fausiaina o laʻu lava gagana polokalame. Na ou manaʻo e fatuina, i loʻu manatu, le gagana sili ona faigofie, atoatoa ma faigofie e mafai.
I totonu o lenei tusiga ou te manaʻo e faʻamaonia vaega autu o laʻu galuega ma, amata i, faʻamatala le manatu na fatuina o le gagana ma lona faʻatinoga muamua, lea o loʻo ou galue ai nei.
Sei ou fai atu muamua na ou tusia le galuega atoa i Free Pascal, aua... O polokalame i luga e mafai ona faʻapipiʻiina mo le tele o faʻavae, ma o le tagata faʻapipiʻi lava ia e maua ai binaries sili ona lelei (Ou te aoina uma vaega o le poloketi ma le fuʻa O2).
Taimi o le gagana
Muamua lava, e aoga le talanoa e uiga i le masini komepiuta na tatau ona ou tusia e faʻatautaia ai talosaga i le lumanaʻi i laʻu gagana. Na ou filifili e faʻatino se fausaga faʻapipiʻi, masalo, ona o le auala sili ona faigofie. Ou te leʻi mauaina se tala masani e tasi i le auala e fai ai lenei mea i le gagana Rusia, o lea ina ua uma ona ou masani i mea o le gagana Peretania, sa ou nofo i lalo e mamanuina ma tusia laʻu lava uila. O le isi o le a ou tuʻuina atu oʻu manatu "agaitia" ma atinaʻe i lenei mataupu.
Fa'atinoga fa'aputu
E manino lava, i le pito i luga o le VM o loʻo i ai le faaputuga. I laʻu faʻatinoga e galue i poloka. O le mea moni o se fa'asologa faigofie lea o fa'ailoga ma se fesuiaiga e teu ai le fa'ailoga o le pito i luga o le faaputuga.
A amata loa, o se vaega o elemene 256 e faia. Afai e tuleia nisi fa'ailoga i luga o le fa'aputuga, e fa'atupula'ia lona tele i le isi 256 elemene. E tusa ai, pe a aveese elemene mai le faaputuga, o lona tele e fetuunai.
E fa'aogaina e le VM ni fa'aputuga:
- Faaputuga autu.
- Se faaputuga mo le teuina o mea toe faafoi.
- Fa'aputu lapisi.
- Taumafai/pu'e/fa'ai'u poloka le fa'aputuga.
Tumau ma Fesuiaiga
E faigofie lenei. O Constants o lo'o fa'atautaia i se isi vaega itiiti o le code ma e avanoa i talosaga i le lumana'i e ala i tuatusi fa'amau. O fesuiaiga o se faʻasologa o faʻailoga o se tele, avanoa i ona sela o loʻo faʻatinoina e faʻasino - i.e. tuatusi tumau. E mafai ona tuleia suiga i le pito i luga o le faaputuga pe faitau mai iina. O le mea moni, ona E ui o a tatou fesuiaiga e teuina faʻailoga i mea taua i le VM manatua, o le gagana e pulea e ala i le galue faʻatasi ma faʻamatalaga manino.
Tu'u lapisi
I laʻu VM e semi-autometi. O na. o le tagata lava ia e filifili le taimi e valaau ai le ao lapisi. E le aoga le faʻaaogaina o se faʻailoga masani, pei o le Python, Perl, Ruby, Lua, ma isi. E fa'atinoina e ala i se faiga fa'ailoga. O na. pe a fuafua se fesuiaiga e tuʻuina atu i se tau le tumau, o se faʻailoga i lenei tau e faʻaopoopo i le faaputuga a le lapisi. I le lumanaʻi, e vave ona faʻatautaia e le tagata aoina le lisi ua uma ona saunia o faʻamatalaga.
Taulimaina taumafai/pu'e/fa'ai'u poloka
E pei lava o so'o se gagana fa'aonaponei, o le fa'aogaina o fa'alavelave o se vaega taua. O le VM autu o loʻo afifi i se try..catch block, lea e mafai ona toe foʻi i le faʻatinoina o le code pe a uma ona maua se tuusaunoaga e ala i le tuleia o nisi faʻamatalaga e uiga i luga o le faaputuga. I le numera o talosaga, e mafai ona e faʻamalamalamaina le taumafai / puʻe / mulimuli poloka o le code, faʻamaonia mea e ulufale ai i le puʻe (tagata faʻapitoa) ma mulimuli / faʻaiʻuga (iuga o le poloka).
Multithreading
E lagolagoina i le tulaga VM. E faigofie ma faigofie ona fa'aoga. E galue e aunoa ma se faʻalavelave faʻalavelave, o lea e tatau ai ona faʻatinoina le code i le tele o filo i le tele o taimi vave, i le faasologa.
Faletusi i fafo mo VM
E leai se auala e fai e aunoa ma lenei. E lagolagoina e le VM oloa faaulufale mai, e tutusa ma le auala e faatino ai i isi gagana. E mafai ona e tusia se vaega o le code i Mash ma se vaega o le code i gagana moni, ona sosoo ai lea ma le tasi.
Faaliliu mai le gagana Mash maualuga i le bytecode mo VM
Gagana vaeluagalemu
Ina ia vave tusia se faaliliu mai se gagana lavelave i le VM code, na ou faia muamua se gagana vavalalata. O le taunuuga o se assembler-pei o se vaaiga mataʻutia e leai se mea faapitoa e mafaufau i ai iinei. O le a na ona ou fai atu i lenei tulaga o le faaliliu o le faagasologa o le tele o mea faifai pea ma fesuiaiga, fuafua o latou tuatusi tulaga ma tuatusi o nofoaga ulufale.
Fa'aliliuga fausaga
Ou te lei filifilia le fausaga sili ona lelei mo le faatinoga. E lē fausia e le tagata faaliliu se laʻau code, e pei ona faia e isi tagata faaliliu. Na te tilotilo i le amataga o le fausaga. O na. pe afai o le fasi code o loʻo faʻasalalau e foliga mai o le "while <condition>:", e manino lava o le taimi lea o le faʻaogaina o le matasele ma e manaʻomia ona faʻagasolo e pei o se taimi faʻapipiʻi. O se mea e pei o se fa'alavelave lavelave.
Fa'afetai i lenei fa'ata'ita'iga fofo, o le fa'aliliu upu e le'o vave tele. Ae ui i lea, o le faigofie o lona suiga ua matua faateleina. Na ou faʻaopoopoina fausaga manaʻomia vave nai lo le mafai e laʻu kofe ona maalili. Ole lagolago atoa ole OOP na fa'atinoina ile itiiti ifo ile vaiaso.
Fa'atonuga tulafono
O iinei, ioe, e mafai ona sili atu le faʻatinoina (ma o le a faʻatinoina, ae mulimuli ane, i le taimi lava e oʻo ai se tasi i ai). E oʻo mai i le taimi nei, naʻo le tagata e sili ona iloa le auala e tipi ese ai le code le faʻaaogaina, faʻaauau ma faʻaulufale mai mai le faʻapotopotoga. E le gata i lea, o le tele o mea tumau e tutusa le tau e suia i le tasi. Pau lava lena.
Gagana Mash
Manatu autu o le gagana
O le manatu autu o le atiina ae o le gagana sili ona aoga ma faigofie e mafai. Ou te manatu o le atinaʻe e feagai ma lana galuega ma se pa.
Fa'ailoga poloka, faiga ma galuega
O faufale uma i le gagana e tatalaina i se koluma. : ma ua tapunia e le tagata faafoe faaiuga.
O taualumaga ma galuega tauave ua fa'aalia o le proc ma le func, i le faasologa. O finauga o loo lisiina i puipui. O mea uma e pei o le tele o isi gagana.
Fa'atonu foʻi e mafai ona e toe faafoi se tau mai se galuega, operator malologa fa'atagaina oe e alu ese mai le fa'agasologa/galuega (pe a iai i fafo atu o fa'amau).
Fa'ata'ita'iga code:
...
func summ(a, b):
return a + b
end
proc main():
println(summ(inputln(), inputln()))
end
Fuafuaga Lagolago
- Loops: mo..i'uga, a'o..i'uga, se'ia..i'uga
- Tulaga: afai..[ese..]mutu, sui..[mataupu..mutu..][ese..]mutu
- Metotia: proc <name>():... end, func <name>():... end
- Fa'ailoga & goto: <igoa>:, oso <igoa>
- Enum enumerations ma fa'asologa faifaipea.
Fesuiaʻiga
E mafai e le fa'aliliutusi ona fa'avasegaina otometi, po'o le fa'atupuina e tusi var a'o le'i fa'amatalaina.
Fa'ata'ita'iga fa'ailoga:
a ?= 10
b ?= a + 20
var a = 10, b = a + 20
E lagolagoina suiga o le lalolagi ma le lotoifale.
OOP
Ia, ua tatou oʻo mai i le autu sili ona manaia. E lagolagoina e Mash faʻataʻitaʻiga polokalame uma e faʻatatau i mea. O na. vasega, tofi, polymorphism (e aofia ai le faʻamalosi), faʻamalosi otometi mafaufauga ma suʻesuʻega (tumu).
A aunoa ma se toe faʻaoga, e sili atu le tuʻuina atu o faʻataʻitaʻiga code.
Se vasega faigofie ma galulue faʻatasi ai:
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
O le a maua mai: 30.
Tofi ma le 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
O le a maua mai: 60.
Ae faapefea le polymorphism malosi? Ioe, o le ata lea!:
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
O le a maua mai: 60.
Sei o tatou faʻaalu sina taimi e suʻesuʻe ai mo tulaga taua ma vasega faigofie:
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
O le a fua mai: moni, moni.
E uiga i tagata fa'atino tofiga ma fa'asino manino
O le ?= operator e fa'aaogaina e tu'uina atu ai se fesuiaiga o se fa'asino i se tau o lo'o manatua.
O le = operator e suia se tau i le manatua e faʻaaoga ai se faʻailoga mai se fesuiaiga.
Ma o le taimi nei e uiga i faʻamatalaga manino. Na ou faaopoopo i latou i le gagana ina ia i ai.
@<variable> - ave se fa'asino manino i se fesuiaiga.
?<variable> — maua se fesuiaiga e ala i le faasino.
@= - tuʻuina atu se tau i se fesuiaiga e ala i se faʻailoga manino i ai.
Fa'ata'ita'iga code:
uses <bf>
uses <crt>
proc main():
var a = 10, b
b ?= @a
PrintLn(b)
b ?= ?b
PrintLn(b)
b++
PrintLn(a)
InputLn()
end
Ole a fa'aalia: nisi numera, 10, 11.
Taumafai..[pu'e..][i'u lava..]faaiu
Fa'ata'ita'iga 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
Fuafuaga mo le lumanaʻi
Ou te vaʻavaʻai ma vaʻavaʻai i le GraalVM & Truffle. O loʻu siosiomaga taʻavale e leai se JIT compiler, e tusa ai ma le faʻatinoga o loʻo naʻo le tauvaga ma le Python. Ou te faʻamoemoe o le a mafai ona ou faʻatinoina le JIT compilation e faʻavae i luga o GraalVM poʻo LLVM.
faleteuoloa
E mafai ona e taʻalo i atinaʻe ma mulimuli i le poloketi oe lava ia.
Faafetai mo le faitau e oo i le iuga pe afai na e faitauina.
puna: www.habr.com