Mash is 'n programmeertaal wat homself saamstel.

Mash is 'n programmeertaal wat homself saamstel.

Groete aan almal in die nuwe jaar 2020.

Sedert die publikasie van die eerste vas oor Mash is amper presies 1 jaar verby.

Gedurende hierdie jaar is die taal baie verbeter, baie van sy aspekte is deurdink en 'n ontwikkelingsvektor is bepaal.

Dit alles wat ek graag met die gemeenskap deel.

Vrywaring

Hierdie projek word uitsluitlik op entoesiasme ontwikkel en gee nie voor om wêreldoorheersing op die gebied van dinamiese programmeertale nie!

Jy moet nie hierdie ontwikkeling beskou as 'n standaard waarna jy moet streef nie, die projek is nie ideaal nie, maar dit ontwikkel nietemin.

GitHub
Site
Форум

Nuwe samesteller

In die /mashc-tak van die projekbewaarplek kan u die nuwe weergawe van die samesteller sien, wat in Mash geskryf is (die eerste weergawe van die taal).

Die samesteller het 'n kodegenerator in die asm-lys (vir samesteller onder die stapel VM).
Op die oomblik ontwikkel ek 'n weergawe van die generator vir Java (JDK 1.8).

Die nuwe weergawe van die samesteller ondersteun ten volle die funksionaliteit van die eerste weergawe van die taal en vul dit aan.

Nuwe OOP

In die nuwe weergawe van die taal is werk met klasse ietwat herontwerp.
Klasmetodes kan beide in die klasliggaam en daarbuite verklaar word.
Die klas het nou 'n eksplisiete konstruktor: init.

Kode voorbeeld:

...
class MyClass:
  private:
    var a, b

  public:
    init(a, b):
      $a ?= a
      $b ?= b
    end

    func Foo():
      return $a + $b   
    end
end

func MyClass::Bar(c):
  return $a + $b + c
end
...

As oorerwing plaasvind, dan het ons die vermoë om maklik geërfde oproepe te maak (super).

Kode voorbeeld:

...
class MySecondClass(MyClass):
  public:
    var c

    init(a, b, c):
      super(a, b)
      $c ?= c
    end

    func Bar():
      super($c)  
    end
end
...

x ?= new MySecondClass(10, 20, 30)
println( x -> Bar() )     // 60

Dinamiese oorheersing van metodes vir klasgevalle:

...
func Polymorph::NewFoo(c):
  return $a + $b + c  
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30)    // 60

Pakkette / Naamruimtes

Die naamruimte moet skoon bly!
Gevolglik moet die taal hierdie geleentheid bied.
In Mash, as 'n klasmetode staties is, kan dit veilig vanaf enige deel van die kode geroep word.

Voorbeeld:

...
class MyPackage:
  func MyFunc(a, b):
    return a + b  
  end
end
...
println( MyPackage -> MyFunc(10, 20) )    // 30

Terloops, die superoperateur sal reg werk met so 'n oproep.

uitsonderings

In die nuwe weergawe van die taal word hulle soos klasse behandel:

...
try:
  raise new Exception(
    "My raised exception!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Unknown exception class!")
  end
end
...

Nuwe enum

Nou kan konstante waardes aan die elemente van die opsomming toegeken word:

enum MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

Ingebedde PL

Potensieel - Mash kan sy nis vind as 'n inbedbare programmeertaal, soos Lua.

Om Mash vir hierdie doeleindes te begin gebruik, hoef jy nie eers die projek self te bou nie.

Mash het 'n Runtime Environment - 'n stapel VM gebou as 'n dinamiese biblioteek met 'n volledige API.

U hoef dit net by die projekafhanklikhede te voeg en 'n paar oproepe te maak.

Die taal self bied funksionaliteit om as 'n ingebedde taal te werk.
Terselfdertyd word prestasie in samewerking met taal- en derdepartybiblioteke nie geskend nie.
Ons kry 'n inbedbare taal wat die volle krag van verskeie raamwerke wat daarin geskryf is, kan gebruik.

Mash + JVM

Het begin om 'n weergawe van die vertaler vir die JVM te ontwikkel.
Miskien sal na die N-de tyd 'n plasing oor hierdie onderwerp op Habré verskyn.

Resultate van

Daar is geen spesifieke resultate nie. Dit is 'n intermediêre voorstelling van die resultate.
Sterkte aan almal in 2020.

Bron: will.com

Voeg 'n opmerking