Gagana polokalame fou Mash

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:

  1. Faaputuga autu.
  2. Se faaputuga mo le teuina o mea toe faafoi.
  3. Fa'aputu lapisi.
  4. 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.

website
Fale teu oloa ile GitHub

Faafetai mo le faitau e oo i le iuga pe afai na e faitauina.

puna: www.habr.com

Faaopoopo i ai se faamatalaga