Mash és un llenguatge de programació que es compila per si mateix

Mash és un llenguatge de programació que es compila per si mateix

Salutacions a tothom pel nou any 2020.

Des de la publicació del primer publicació Gairebé exactament ha passat 1 any sobre Mash.

Durant aquest any s'ha millorat molt la llengua, s'han pensat molts dels seus aspectes i es va determinar el vector de desenvolupament.

Estic content de compartir tot això amb la comunitat.

renúncia

Aquest projecte es desenvolupa únicament amb entusiasme i no pretén dominar el món en l'àmbit dels llenguatges de programació dinàmics!

Aquest desenvolupament no s'ha de considerar com un estàndard pel qual s'ha d'esforçar; el projecte no és l'ideal, però tot i així s'està desenvolupant.

GitHub
Lloc
Fòrum

Nou compilador

A la branca /mashc del dipòsit del projecte, podeu veure una nova versió del compilador, que està escrita en Mash (la primera versió del llenguatge).

El compilador té un generador de codi a la llista asm (per a l'assemblador d'una màquina virtual basada en pila).
Actualment estic desenvolupant una versió del generador per a Java (JDK 1.8).

La nova versió del compilador admet totalment la funcionalitat de la primera versió del llenguatge i la complementa.

Nou OOP

En la nova versió de l'idioma s'ha redissenyat parcialment el treball amb classes.
Els mètodes de classe es poden declarar tant al cos de la classe com fora d'ell.
La classe ara té un constructor explícit: init.

Codi de mostra:

...
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
...

Si es produeix l'herència, tenim l'oportunitat de fer trucades heretades fàcilment (súper).

Codi de mostra:

...
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

Anulació dinàmica de mètodes en instàncies de classe:

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

Paquets/espais de noms

L'espai de noms ha de romandre net!
En conseqüència, la llengua ha de proporcionar aquesta oportunitat.
A Mash, si un mètode de classe és estàtic, es pot cridar amb seguretat des de qualsevol part del codi.

Exemple:

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

Per cert, el superoperador funcionarà correctament quan es truqui d'aquesta manera.

Excepcions

A la nova versió de l'idioma es tracten com a classes:

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

Nou enumeració

Ara els elements d'enumeració es poden assignar valors constants:

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

Llenguatge incrustat

Potencialment, Mash pot trobar el seu nínxol com a llenguatge de programació incrustat, similar a Lua.

Per començar a utilitzar Mash per a aquests propòsits, ni tan sols cal que muntis el projecte tu mateix.

Mash té un entorn d'execució: una màquina virtual basada en pila compilada com a biblioteca dinàmica amb una API completa.

Tot el que heu de fer és afegir-lo a la dependència del projecte i fer un parell de trucades.

El llenguatge en si proporciona funcionalitat per funcionar com a llenguatge incrustat.
Al mateix temps, el rendiment juntament amb l'idioma i les biblioteques de tercers no es veu afectat.
Obtenim un llenguatge incrustat que pot utilitzar tota la potència de diversos marcs escrits en ell.

Mash + JVM

Vaig començar a desenvolupar una versió del traductor per a la JVM.
Potser, després de N de temps, apareixerà una publicació sobre aquest tema a Habré.

Resultats de

No hi ha resultats particulars. Aquesta és una representació intermèdia dels resultats.
Molta sort a tothom el 2020.

Font: www.habr.com

Afegeix comentari