New programming language Mash

Tau ntau xyoo kuv sim kuv txhais tes ntawm kev tsim kuv tus kheej cov lus programming. Kuv xav tsim, hauv kuv lub tswv yim, qhov yooj yim tshaj plaws, ua haujlwm tau zoo thiab cov lus yooj yim ua tau.

Hauv tsab xov xwm no kuv xav qhia txog cov theem tseem ceeb ntawm kuv txoj haujlwm thiab, pib nrog, piav qhia lub tswv yim tsim ntawm cov lus thiab nws thawj qhov kev siv, uas kuv tab tom ua haujlwm tam sim no.

Cia kuv hais ua ntej tias kuv tau sau tag nrho qhov project hauv Free Pascal, vim tias ... cov kev pab cuam ntawm nws tuaj yeem sib sau ua ke rau ntau lub platforms, thiab lub compiler nws tus kheej tsim cov binaries zoo heev (Kuv sau tag nrho cov khoom ntawm qhov project nrog O2 chij).

Lus runtime

Ua ntej tshaj plaws, nws tsim nyog tham txog lub tshuab virtual uas kuv yuav tsum tau sau los khiav cov ntawv thov yav tom ntej hauv kuv cov lus. Kuv txiav txim siab los siv ib pawg architecture, tej zaum, vim nws yog txoj kev yooj yim tshaj plaws. Kuv tsis pom ib tsab xov xwm hais txog yuav ua li cas ua qhov no hauv Lavxias, yog li tom qab paub kuv tus kheej nrog cov khoom siv lus Askiv, kuv zaum los tsim thiab sau kuv lub tsheb kauj vab. Tom ntej no kuv yuav nthuav qhia kuv cov tswv yim "advanced" thiab kev txhim kho hauv qhov teeb meem no.

Kev siv cov khib nyiab

Obviously, nyob rau sab saum toj ntawm VM yog pawg. Hauv kuv qhov kev siv nws ua haujlwm hauv blocks. Qhov tseem ceeb qhov no yog ib qho yooj yim array ntawm pointers thiab ib tug kuj sib txawv los khaws qhov Performance index ntawm sab saum toj ntawm pawg.
Thaum nws pib, ib qho array ntawm 256 lub ntsiab yog tsim. Yog tias ntau tus taw qhia raug thawb mus rau pawg, nws qhov loj yuav nce los ntawm 256 lub ntsiab lus tom ntej. Raws li, thaum tshem cov khoom los ntawm pawg, nws qhov loj me yog hloov kho.

VM siv ntau pawg:

  1. Main pawg.
  2. Ib pawg rau khaws cov ntsiab lus rov qab.
  3. Cov khib nyiab khib nyiab.
  4. Sim/catch/thaum kawg block handler stack.

Constants thiab Variables

Qhov no yog qhov yooj yim. Constants raug tuav hauv ib qho me me ntawm cov lej thiab muaj nyob rau hauv cov ntawv thov yav tom ntej ntawm qhov chaw nyob zoo li qub. Kev sib txawv yog ib qho ntawm cov taw qhia ntawm ib qho loj me, kev nkag mus rau nws cov hlwb yog ua los ntawm kev ntsuas - i.e. chaw nyob zoo li qub. Cov kev hloov pauv tuaj yeem raug thawb mus rau sab saum toj ntawm pawg lossis nyeem los ntawm qhov ntawd. Qhov tseeb, vim Thaum peb cov kev hloov pauv tseem ceeb khaws cov taw qhia rau qhov tseem ceeb hauv VM nco, cov lus tau ua haujlwm los ntawm kev ua haujlwm nrog cov ntsiab lus tsis raug.

Cov khib nyiab

Hauv kuv VM nws yog semi-automatic. Cov. tus tsim tawm nws tus kheej txiav txim siab thaum twg hu rau tus neeg khaws khib nyiab. Nws tsis ua haujlwm siv lub ntsuas ntsuas ntsuas li niaj zaus, xws li hauv Python, Perl, Ruby, Lua, thiab lwm yam. Nws yog siv los ntawm ib tug marker system. Cov. Thaum ib qho kev sib txawv yog npaj los muab tus nqi ib ntus, tus taw tes rau tus nqi no ntxiv rau cov khib nyiab khib nyiab. Nyob rau hauv lub neej yav tom ntej, tus neeg sau tau nrawm nrawm los ntawm cov npe uas twb tau npaj lawm.

Kov sim / ntes / thaum kawg blocks

Raws li nyob rau hauv txhua yam lus niaj hnub no, kev zam kev tuav yog ib qho tseem ceeb. VM core yog qhwv hauv ib qho sim..catch thaiv, uas tuaj yeem rov qab mus rau qhov kev ua tiav code tom qab ntes qhov kev zam los ntawm thawb qee cov ntaub ntawv hais txog nws mus rau pawg. Hauv daim ntawv thov code, koj tuaj yeem txhais tau sim / ntes / thaum kawg thaiv cov lej, qhia cov ntsiab lus nkag ntawm kev ntes (tsuas yog tus tuav) thiab thaum kawg / kawg (kawg ntawm thaiv).

Multithreading

Nws tau txais kev txhawb nqa ntawm VM qib. Nws yog qhov yooj yim thiab siv tau yooj yim. Nws ua haujlwm yam tsis muaj kev cuam tshuam, yog li cov cai yuav tsum raug tua nyob rau hauv ob peb threads ob peb zaug sai dua, feem.

Cov tsev qiv ntawv sab nraud rau VMs

Tsis muaj txoj hauv kev ua tsis muaj qhov no. VM txhawb nqa kev xa tawm, zoo ib yam li nws siv hauv lwm hom lus. Koj tuaj yeem sau ib feem ntawm cov lej hauv Mash thiab ib feem ntawm cov lej hauv hom lus, tom qab ntawd txuas lawv ua ib qho.

Tus txhais lus los ntawm qib siab Mash rau bytecode rau VMs

Cov lus nruab nrab

Txhawm rau sau tus neeg txhais lus sai sai los ntawm cov lus nyuaj rau hauv VM code, kuv xub tsim cov lus nruab nrab. Qhov tshwm sim yog ib qho kev sib dhos zoo li qhov txaus ntshai uas tsis muaj qhov tshwj xeeb hauv kev xav ntawm no. Kuv tsuas yog hais tias nyob rau theem no tus txhais lus ua cov txheej txheem feem ntau tsis tu ncua thiab hloov pauv, suav lawv qhov chaw nyob zoo li qub thiab qhov chaw nyob ntawm cov ntsiab lus nkag.

Tus txhais lus architecture

Kuv tsis tau xaiv qhov zoo tshaj plaws architecture rau kev siv. Tus neeg txhais lus tsis tsim ib tsob ntoo code, zoo li lwm tus neeg txhais lus ua. Nws saib thaum pib ntawm tus qauv. Cov. Yog hais tias daim code raug parsed zoo li "thaum <condition>:", ces nws yog pom tseeb tias qhov no yog ib lub voj voog tsim thiab yuav tsum tau ua tiav raws li lub voj voog tsim. Ib yam dab tsi zoo li ib tug complex switch-case.

Ua tsaug rau qhov kev daws teeb meem kev tsim vaj tsev, tus neeg txhais lus tau hloov tsis tau sai heev. Txawm li cas los xij, qhov yooj yim ntawm nws qhov kev hloov kho tau nce ntau. Kuv ntxiv cov qauv tsim nyog sai dua li kuv lub kas fes tuaj yeem txias. Kev them nyiaj yug OOP tag nrho tau ua tiav tsawg dua ib lub lis piam.

Code optimization

Ntawm no, tau kawg, nws tuaj yeem raug siv tau zoo dua (thiab yuav raug siv, tab sis tom qab ntawd, sai li sai tau thaum ib tus mus txog nws). Txog tam sim no, tus optimizer tsuas yog paub yuav ua li cas txiav tawm cov lej tsis siv, qhov tsis tu ncua thiab kev xa tawm los ntawm kev sib dhos. Tsis tas li ntawd, ob peb qhov tsis tu ncua nrog tus nqi qub yog hloov los ntawm ib qho. Yog tag nrho.

Mas lus

Basic tswvyim ntawm lus

Lub tswv yim tseem ceeb yog los tsim cov lus yooj yim tshaj plaws thiab ua tau. Kuv xav tias txoj kev loj hlob copes nrog nws txoj hauj lwm nrog ib tug bang.

Code blocks, cov txheej txheem thiab kev ua haujlwm

Tag nrho cov kev tsim kho hauv cov lus tau qhib nrog txoj hnyuv. : thiab raug kaw los ntawm tus neeg teb xov tooj kawg.

Cov txheej txheem thiab kev ua haujlwm tau tshaj tawm tias yog proc thiab func, ntsig txog. Cov lus sib cav tau teev nyob rau hauv kab lus. Txhua yam zoo ib yam li lwm yam lus.

Tus neeg ua haujlwm rov qab los koj tuaj yeem xa rov qab tus nqi los ntawm kev ua haujlwm, tus neeg teb xov tooj so tso cai rau koj tawm ntawm cov txheej txheem / kev ua haujlwm (yog tias nws nyob sab nraum lub voj voog).

Qauv code:

...

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

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

Txhawb Kev Tsim

  • Loops: rau..kawg, thaum..kawg, mus txog..kawg
  • Cov xwm txheej: yog..[lwm..]end, hloov.
  • Methods: proc <name>():... end, func <name>():... end
  • Label & goto: <name>:, dhia <name>
  • Enum enumerations thiab tas li arrays.

Hloov pauv

Tus neeg txhais lus tuaj yeem txiav txim siab rau lawv, lossis yog tias tus tsim tawm sau var ua ntej txhais lawv.

Code piv txwv:

a ?= 10
b ?= a + 20

var a = 10, b = a + 20

Kev txhawb nqa thoob ntiaj teb thiab hauv cheeb tsam sib txawv.

OOP

Zoo, peb tau los rau lub ntsiab lus qab tshaj plaws. Mash txhawb nqa tag nrho cov phiaj xwm phiaj xwm phiaj xwm. Cov. chav kawm, qub txeeg qub teg, polymorphism (xws li dynamic), dynamic tsis siv neeg xav txog thiab introspection (tag nrho).

Yog tsis muaj ado ntxiv, nws zoo dua los tsuas yog muab cov qauv piv txwv.

Ib chav kawm yooj yim thiab ua haujlwm nrog nws:

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

Output: 30.

Keeb kwm thiab 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

Output: 60.

Yuav ua li cas yog dynamic polymorphism? Yog, qhov no yog kev xav!:

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

Output: 60.

Tam sim no cia peb siv sij hawm ib pliag rau introspect rau cov txiaj ntsig yooj yim thiab cov chav kawm:

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

Yuav tso zis: tseeb, tseeb.

Hais txog cov neeg ua haujlwm ua haujlwm thiab cov lus qhia meej

Tus ?= tus neeg teb xov tooj yog siv los muab qhov sib txawv ntawm tus taw tes rau tus nqi hauv nco.
Tus = tus neeg teb xov tooj hloov tus nqi hauv nco siv tus taw tes los ntawm qhov sib txawv.
Thiab tam sim no me ntsis txog cov ntsiab lus meej. Kuv ntxiv lawv rau cov lus kom lawv muaj nyob.
@<variable> β€” coj tus taw qhia meej rau qhov sib txawv.
?<variable> β€” tau txais qhov sib txawv los ntawm tus taw tes.
@= β€” muab tus nqi rau qhov sib txawv los ntawm tus taw qhia meej rau nws.

Qauv code:

uses <bf>
uses <crt>

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

Yuav tso zis: qee tus lej, 10, 11.

Sim..[catch..][finally..]end

Qauv 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

Cov tswv yim rau yav tom ntej

Kuv pheej saib thiab saib ntawm GraalVM & Truffle. Kuv qhov chaw khiav haujlwm tsis muaj JIT compiler, yog li hais txog kev ua tau zoo nws tam sim no tsuas yog sib tw nrog Python. Kuv vam tias kuv yuav tuaj yeem siv JIT muab tso ua ke raws li GraalVM lossis LLVM.

chaw cia khoom

Koj tuaj yeem ua si nrog kev txhim kho thiab ua raws li qhov project koj tus kheej.

website
Repository ntawm GitHub

Ua tsaug rau koj nyeem kom kawg yog koj ua tau.

Tau qhov twg los: www.hab.com

Ntxiv ib saib