Nova programmatio linguae Mash

Pluribus annis manum meam temptavi ad linguam programmandi meam evolvendam. Volui facere, mea sententia, linguam simplicissimam, plene officiosam et opportunam possibilem.

In hoc articulo praecipuas laboris mei gradus illustrare cupimus et, imprimis, creatum linguae conceptum eiusque primam exsecutionem describere, quam nunc laboramus.

Dicam ante me totum consilium in Libero Paschali scripsisse, quia... programmata in eo congregari possunt ad ingentem numerum suggestorum, et ipse compilator binarias valde optimized (colligo omnes partes rei cum Vexillo O2).

Lingua runtime

Imprimis, valet de machina virtuali loqui quam scribere debebam ad futuras applicationes in lingua mea. Statui architecturae acervus efficiendi fortasse, quia via facillima erat. Unum articulum normalem non inveni quomodo hoc in Russian facerem, ita me cum materia anglicano familiari, sedi cogitans et scribens birotam meam. Deinde ideas et progressiones meas in hac re exhibebo.

Stack implementation

Videlicet in summitate VM BIBLIOTHECA. In mea exsecutione operatur in caudices. Essentialiter haec est simplex argumentorum ordinata et variabilis indicem summae acervi condere.
Cum initialized, turma 256 elementorum creatur. Si plures indices in acervum impelluntur, magnitudo augetur per 256 elementa sequentia. Et ideo, quando ab acervo elementa removentur, magnitudo eius adaequatur.

VM pluribus acervis utitur:

  1. BIBLIOTHECA Principalis.
  2. Stack pro repono reditus puncta.
  3. Purgamentum collector acervus.
  4. Conare / capere / postremo angustos tracto acervus.

Constant et Variabiles

Haec una simplex est. Constanter in particulatim codice singula tractantur ac praesto sunt in futuris applicationibus per inscriptiones staticas. Variabiles sunt indicia ordinata certae magnitudinis, accessus ad cellulas suas exercetur per indicem - i.e. oratio stabilis. Variabiles ad summum acervum impelli possunt vel inde lecta. Nam quod Dum variabiles nostri essentialiter reponunt indicium valorum in VM memoria, lingua laborat indicibus implicitis dominatur.

Purgamentum init

In mea VM est semi-automatica. Illae. ipsum elit incidit quando quisquiliarum collectorem vocare. Iusto regulae calculo utens non operatur, ut in Pythone, Perl, Ruby, Lua, etc. Impletur per typum ratio. Illae. cum variabilis valor temporalis assignari intendit, monstrator huic pretii ad purgamentum acervus collectoris accedit. In posterum, collector celeriter percurrit indicium indicatuum iam praeparatum.

Tractantem attentent / capiens / tandem caudices

Sicut in qualibet lingua recentiore, exceptio tractatio magni momenti est. Core VM involvitur in scandalum try... captura, quae ad supplicium redire potest, exceptio apprehensa, aliquas informationes de eo in acervum impellendo. In schedula codici, potes experiri/capere/tandem caudices codicis definire, puncta denotans in captura (tracto exceptio) et tandem/finem (ad finem clausus).

Multithreading

Sustinetur in gradu VM. Ad usum simplex et commodum est. Sine interpellatione systematis laborat, ut signum in pluribus sequelis pluries citius, respective exsecutus sit.

Bibliothecae externae pro VMs

Non est hoc sine ratione facere. VM subsidia importat, simile quomodo in aliis linguis impleatur. Partem Codicis scribere potes in Mash et partem Codicis in linguis indigenis, deinde eas in unum coniunge.

Interpres ab alto gradu Mash lingua ad bytecode pro VMs

Lingua media

Ut cito interpretem ex lingua complexa in VM codicem scriberem, primum linguam mediam elaboravi. Ex quo factum est spectaculum acerrimum, quod nihil attinet hic considerare. Hoc tantum dicam quod interpres in hoc gradu maxime constantes et variabiles processus procedit, suas statas inscriptiones et puncta ingressum computare.

Interpres architecturae

Optima architectura non sum ad exsequendum. Non facit interpres ficum codicem, ut alii interpretes. Ad initium structurae spectat. Illae. si fragmentum codicis parsed instar "dum <conditio>" spectat, tunc perspicuum est hanc fasciam construere et quasi dum ansam construere necesse est ut discursum sit. Simile quiddam incomplexum transibit-casu.

Per hanc solutionem architecturae interpres evasit non nimis celeriter. Nihilominus, facilitas modificationis eius signanter auxit. Adieci structuras necessarias citius quam capulus mea refrigerare posset. Plenum OOP subsidium consecutum est minus quam hebdomade.

Code ipsum

Hic, utique, melius impleri potuit (et perficietur, sed postea quam primum ad eam accedit). Hactenus optimizer solus novit quomodo codicem insuetum excidat, constantes et importat ab ecclesia. Item plures constantes eodem valore substituuntur unus. Id omne.

Lingua Mash

Praecipua notio linguae

Praecipua notio erat quam maxime utilitatis et simplicis linguae possibilis evolvere. Puto evolutionem capas cum crepitu suo moliri.

Codex caudices, rationes et munera

Omnes constructiones in lingua colon aperiuntur. : et clauduntur ab operator finis.

Rationes et functiones ut proc et func respective declarantur. Argumenta parenthesi recensentur. Omnia sunt sicut pleraque aliae linguae.

Operator reditum referre potes valorem ex functione, operator intermissum te permittit exire ratio / munus (si extra ansas est).

Exemplum codicem:

...

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

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

Supported Designs

  • Ansas: finis, dum... finem, usque ad finem
  • Conditiones: si... [aliud...] finem, transibit..
  • Methodi: proc <nomen>(): .... finis, func <nomen>():.... end
  • Label & gata: <nomen>:, salire <nomen>
  • Enum enumerem et assidue vestit.

variables

Interpres eas automatice determinare potest, vel si elit scribit var antequam eas definiat.

Exempla codicis:

a ?= 10
b ?= a + 20

var a = 10, b = a + 20

Global et locales variabiles sustentantur.

OOP

Bene, ad amoenissimum locum venimus. Mes omnia paradigmata programmandi objecta sustinet. Illae. genera, hereditas, polymorphismus (inclusa dynamica), dynamica reflexio et introspectio latae (plena).

Sine ulteriori documento, melius est exempla exempla dare.

Simplex genus et opus est;

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

Will output: XXX.

hereditas et polymorphismus:

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

Will output: XXX.

Quid de polymorphismo dynamico? Ita est cogitatio!:

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

Will output: XXX.

Nunc momentum sumamus ad introspiciendas valores simplices et classes:

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

Voluntas output: verum, verum.

De assignatione operariorum et indicibus expressis

The ?= operator variam monstratorem ad valorem in memoria assignare adhibetur.
= Auctor valorem mutat in memoria utens monstratorem ex variabili.
Et nunc pauca de indicibus expressa. Eos addidi lingua ut sint.
@<variabilis> β€” regulam explicitam sume ad variabilem.
?<variabilis> - ut variabilis a monstratorem.
@= β€” valorem variabili per explicatum monstratorem ei tribue.

Exemplum codicem:

uses <bf>
uses <crt>

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

Output: some number, X, XI.

Conare..[capere..][nemo..]end

Exemplum codicem:

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

Consilia pro futuro

Aspicio et intueor apud GraalVM & Truffle. My runtime environment does not have a JIT compiler, so in terms of performance it is currently only competitive with Python. Spero me JIT compilationem aggredi posse secundum GraalVM vel LLVM.

repositio

Cum explicationibus ludere potes et te ipsum sequere.

website
Reconditorium in GitHub

Gratias ago tibi, quia si feceris finem legendi.

Source: www.habr.com