Puo e ncha ea lenaneo Mash

Ka lilemo tse 'maloa ke ile ka leka letsoho la ka ho iketsetsa puo ea ka ea mananeo. Ke ne ke batla ho theha, ka maikutlo a ka, puo e bonolo ka ho fetisisa, e sebetsang ka botlalo le e loketseng ho khoneha.

Sehloohong sena ke batla ho totobatsa mekhahlelo e meholo ea mosebetsi oa ka 'me, ho qala ka ho hlalosa mohopolo o bōpiloeng oa puo le ts'ebetsong ea eona ea pele, eo ke ntseng ke e sebetsa hona joale.

E re ke bolele esale pele hore ke ngotse morero oohle ho Free Pascal, hobane ... mananeo a ho eona a ka bokelloa bakeng sa palo e kholo ea liforomo, 'me moqapi ka boeona o hlahisa li-binaries tse ntlafalitsoeng haholo (ke bokella likarolo tsohle tsa morero ka folakha ea O2).

Nako ea ho sebetsa ea puo

Pele ho tsohle, ho bohlokoa ho bua ka mochini o hlakileng oo ke ileng ka tlameha ho o ngola ho tsamaisa lits'ebetso tsa nako e tlang ka puo ea ka. Ke ile ka etsa qeto ea ho kenya ts'ebetsong mohaho oa li-stack, mohlomong, hobane e ne e le tsela e bonolo ka ho fetisisa. Ha kea ka ka fumana sehlooho se le seng se tloaelehileng sa mokhoa oa ho etsa sena ka Serussia, kahoo ka mor’a ho tloaelana le boitsebiso ba puo ea Senyesemane, ke ile ka lula fatše ho rala le ho ngola baesekele ea ka. Ka mor'a moo ke tla hlahisa maikutlo a ka a "tsoetseng pele" le tsoelo-pele tabeng ena.

Ts'ebetsong ea stack

Ho hlakile hore ka holimo ho VM ke stack. Ts'ebetsong ea ka e sebetsa ka li-blocks. Ha e le hantle, sena ke lisupa tse bonolo le tse fapaneng ho boloka index ea bokaholimo ba stack.
Ha e qalisoa, ho etsoa letoto la likarolo tse 256. Haeba lintlha tse ling li sutumetsoa holim'a stack, boholo ba eona bo eketseha ka likarolo tse 256 tse latelang. Ka hona, ha o tlosa likarolo ho stack, boholo ba eona boa fetoloa.

VM e sebelisa mekotla e mengata:

  1. Sekoahelo sa mantlha.
  2. Stack bakeng sa ho boloka lintlha tsa ho khutlisa.
  3. Pokello ea lithōle.
  4. Leka/tshwara/qetellong thibela sekgoqetsane.

Kamehla le Liphetoho

Ena e bonolo. Li-Constant li sebetsoa ka karolo e nyane e arohaneng ea khoutu mme li fumaneha lits'ebetsong tsa nako e tlang ka liaterese tse sa fetoheng. Liphetoho ke letoto la litsupa tsa boholo bo itseng, phihlello ea lisele tsa eona e etsoa ka index - i.e. aterese e tsitsitseng. Lintho tse feto-fetohang li ka sutumelletsoa ka holim'a stack kapa tsa baloa ho tloha moo. Haele hantle, hobane Le ha mefuta ea rona e boloka lintlha tsa boleng mohopolong oa VM, puo e busoa ke ho sebetsa ka lintlha tse hlakileng.

'mokelli oa lithōle

Ho VM ea ka ke semi-automatic. Tseo. moqapi ka boeena o etsa qeto ea hore na o tla bitsa moqoqo oa lithōle neng. Ha e sebetse ho sebelisoa k'haonta e tloaelehileng ea pointer, joalo ka Python, Perl, Ruby, Lua, joalo-joalo. E kenngoa ts'ebetsong ka mokhoa oa ho tšoaea. Tseo. ha phapang e reretsoe ho abeloa boleng ba nakoana, pointer ea boleng bona e eketsoa ho moqotetsi oa lithōle. Nakong e tlang, 'mokelli o potlakela ho feta lethathamong le seng le lokisitsoe la litsupa.

Ho sebetsana le teko/tšoasa/ho thiba qetellong

Joalo ka puo efe kapa efe ea sejoale-joale, ho sebetsana le mokhelo ke karolo ea bohlokoa. VM core e phuthetsoe ka try..catch block, e ka khutlelang ts'ebetsong ea khoutu ka mor'a ho tšoara mokhelo ka ho sutumelletsa tlhahisoleseding e itseng ka eona holim'a stack. Khoutung ea kopo, o ka hlalosa ho leka / ho ts'oara / ho qetela li-blocks tsa khoutu, ho bonts'a lintlha tsa ho kena ha ho ts'oaroa (motho ea ts'oarang) mme qetellong / pheletso (qetello ea block).

Multithreading

E tšehetsoa boemong ba VM. E bonolo ebile e bonolo ho e sebelisa. E sebetsa ntle le tsamaiso ea tšitiso, kahoo khoutu e lokela ho etsoa ka likhoele tse 'maloa ka potlako, ka ho latellana.

Lilaeborari tsa kantle tsa li-VM

Ha ho na mokhoa oa ho etsa ntle le sena. VM e ts'ehetsa thepa e tsoang kantle ho naha, joalo ka ha e kengoa ts'ebetsong ka lipuo tse ling. U ka ngola karolo ea khoutu ka Mash le karolo ea khoutu ka lipuo tsa matsoalloa, ebe u li hokela ho e le 'ngoe.

Mofetoleli ho tloha puong ea boemo bo holimo ea Mash ho ea ho bytecode bakeng sa li-VM

Puo ya mahareng

Ho ngola ka potlako mofetoleli ho tloha puong e rarahaneng ho ea ho khoutu ea VM, ke ile ka qala ka ho hlahisa puo e bohareng. Sephetho e bile pono e tšabehang e kang ea motho ea kopanyang eo ho seng ntlha e itseng ea ho nahanoa mona. Ke tla re feela boemong bona mofetoleli o sebetsana le maemo a mangata le mefuta-futa, o bala liaterese tsa bona tse tsitsitseng le liaterese tsa lintlha tsa ho kena.

Mehaho ea mofetoleli

Ha kea khetha moralo o motle ka ho fetisisa bakeng sa ts'ebetsong. Mofetoleli ha a hahe sefate sa khoutu, joalo ka ha bafetoleli ba bang ba etsa. O sheba qalong ea sebopeho. Tseo. haeba karolo ea khoutu e ntseng e aroloa e shebahala e le "ha :", joale ho hlakile hore sena ke ho haha ​​​​loop ea nakoana 'me e hloka ho sebetsoa e le ho hahoa ha loop ea nakoana. Ho hong ho kang khese e rarahaneng ea switjha.

Ka lebaka la tharollo ena ea meralo, mofetoleli o ile a bonahala a sa potlake haholo. Leha ho le joalo, boiketlo ba phetoho ea eona bo eketsehile haholo. Ke ile ka eketsa mehaho e hlokahalang ka potlako ho feta kamoo kofi ea ka e ka pholileng kateng. Ts'ehetso e felletseng ea OOP e kentsoe tšebetsong ka nako e ka tlase ho beke.

Ntlafatso ea khoutu

Mona, ehlile, e ka be e kentsoe ts'ebetsong hantle ('me e tla kengoa ts'ebetsong, empa hamorao, hang ha motho a fihla ho eona). Ho fihlela hajoale, optimizer e tseba feela ho khaola khoutu e sa sebelisoeng, li-constants le tse tsoang kantle ho naha ho tsoa kopanong. Hape, li-constants tse 'maloa tse nang le boleng bo tšoanang li nkeloa sebaka ke e le' ngoe. Ke phetho.

Puo ea Mash

Mohopolo oa motheo oa puo

Sepheo se seholo e ne e le ho hlahisa puo e sebetsang ka ho fetisisa le e bonolo ka ho fetisisa. Ke nahana hore nts'etsopele e sebetsana le mosebetsi oa eona ka sekhahla.

Li-block blocks, mekhoa le mesebetsi

Mehaho eohle ea puo e buloa ka kolone. : mme di kwalwa ke opareitara QETA.

Mekhoa le mesebetsi li phatlalatsoa e le proc le func, ka ho latellana. Likhang li thathamisitsoe ka masakaneng. Lintho tsohle li tšoana le lipuo tse ling tse ngata.

Mokhanni khutlele o ka khutlisa boleng ho tsoa ho tšebetso, opareitara khefu e u lumella ho tsoa ts'ebetsong / ts'ebetso (haeba e le ka ntle ho loops).

Mohlala oa khoutu:

...

func summ(a, b):
  return a + b
end

proc main():
  println(summ(inputln(), inputln()))
end

Meetso e Tšehetsoeng

  • Loops: bakeng sa..qetello, ha..qetela, ho fihlela..qetellong
  • Dipea
  • Mekhoa: proc ():... qetello, func ():... qetello
  • Label & goto: :, tlole
  • Enum enumerations le mekhahlelo e sa fetoheng.

Mefuta e fapaneng

Mofetoleli a ka li tseba ka bohona, kapa haeba moqapi a ngola var pele a li hlalosa.

Mehlala ea khoutu:

a ?= 10
b ?= a + 20

var a = 10, b = a + 20

Liphetoho tsa lefats'e le tsa lehae li tšehetsoa.

OOP

Hantle, re fihlile sehloohong se monate ka ho fetisisa. Mash e ts'ehetsa li-paradigms tsohle tse shebaneng le lintho. Tseo. litlelase, lefa, polymorphism (ho kenyeletsoa dynamic), dynamic reflection automatic and introspection (e tletseng).

Ntle le ho feta, ho molemo ho fana ka mehlala ea khoutu feela.

Sehlopha se bonolo le ho sebetsa le sona:

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

Tlhahiso: 30.

Lefa 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

Tlhahiso: 60.

Ho thoe'ng ka dynamic polymorphism? E, sena ke ho thuisa!:

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

Tlhahiso: 60.

Joale ha re nke nako ea ho itlhahloba bakeng sa litekanyetso le litlelase tse bonolo:

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: nnete, nnete.

Mabapi le li-asaenente tse sebetsang le litsupa tse hlakileng

?= opareitara e sebedisetswa ho abela sesupa se fetofetohang boleng bo mohopolong.
The = opareitara e fetola boleng ba memori ka ho sebelisa pointer ho tsoa ho feto-fetoha.
'Me joale hanyane ka litsupa tse hlakileng. Ke li kentse puong hore li be teng.
@ - nka pointer e hlakileng ho e feto-fetohang.
? — fumana phetoho ka pointer.
@= - abela boleng ho feto-fetoha ka sesupa se hlakileng ho eona.

Mohlala oa khoutu:

uses <bf>
uses <crt>

proc main():
  var a = 10, b
  b ?= @a
  PrintLn(b)
  b ?= ?b
  PrintLn(b)
  b++
  PrintLn(a)
  InputLn()
end

Tlhahiso: palo e itseng, 10, 11.

Leka..[tšoasa..][qetellong..]qetela

Mohlala oa khoutu:

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

Merero ea bokamoso

Ke lula ke shebile le ho sheba GraalVM & Truffle. Tikoloho ea ka ea nako ea ho matha ha e na moqapi oa JIT, kahoo mabapi le ts'ebetso hona joale e hlōlisana le Python feela. Ke tšepa hore ke tla khona ho kenya tšebetsong pokello ea JIT e thehiloeng ho GraalVM kapa LLVM.

polokelo

U ka bapala le nts'etsopele 'me u latele morero ka bouena.

websaeteng
Sebaka sa polokelo ho GitHub

Kea leboha ha u balile ho fihlela qetellong haeba u entse joalo.

Source: www.habr.com

Eketsa ka tlhaloso