Mash — un linguaggio di programmazione che si compila da solo

Mash — un linguaggio di programmazione che si compila da solo

Saluto tutti in questo nuovo anno 2020.

Dalla pubblicazione del primo del post di Mash è trascorso praticamente un anno.

In quest'anno il linguaggio è stato notevolmente migliorato, molti dei suoi aspetti sono stati ponderati e è stata definita la direzione dello sviluppo.

Sono felice di condividere tutto ciò con la comunità.

Avvertenza

Questo progetto è sviluppato unicamente per passione e non aspira alla supremazia mondiale nel campo dei linguaggi di programmazione dinamici!

Non si dovrebbe considerare questo sviluppo come un modello a cui aspirare; il progetto non è perfetto, ma comunque si sta evolvendo.

GitHub
Sito
Forum

Nuovo compilatore

Nella branch /mashc del repository del progetto, puoi vedere una nuova versione del compilatore, scritta in Mash (nella prima versione del linguaggio).

Il compilatore ha un generatore di codice in listing asm (per l'assembler su una VM a stack).
Attualmente sto sviluppando una versione del generatore per Java (JDK 1.8).

La nuova versione del compilatore supporta completamente le funzionalità della prima versione del linguaggio e le amplia.

Nuovo OOP

Nella nuova versione del linguaggio, la gestione delle classi è stata in parte riprogettata.
I metodi di una classe possono essere dichiarati sia all'interno che all'esterno della classe.
Ora la classe ha un costruttore esprimibile in modo esplicito: init.

Esempio di codice:

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

In caso di ereditarietà, abbiamo la possibilità di effettuare facilmente chiamate inherited (super).

Esempio di codice:

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

Ridefinizione dinamica dei metodi negli oggetti delle classi:

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

Pacchetti / spazi dei nomi

Lo spazio dei nomi deve rimanere pulito!
Di conseguenza, il linguaggio deve fornire questa possibilità.
In Mash’, se un metodo di classe è statico, può essere chiamato in modo sicuro da qualsiasi parte del codice.

Esempio:

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

A proposito, l'operatore super funzionerà correttamente con questa chiamata.

Eccezioni

Nella nuova versione del linguaggio, vengono gestite come classi:

...
try:
  raise new Exception(
    "La mia eccezione sollevata!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Classe di eccezione sconosciuta!")
  end
end
...

Nuovo enum

Ora agli elementi dell'enumerazione possono essere assegnati valori costanti:

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

Linguaggio di programmazione incorporato

Potenzialmente, Mash può occupare la sua nicchia come linguaggio di programmazione integrato, simile a Lua.

Per iniziare a utilizzare Mash a questi fini, non è nemmeno necessario costruire il progetto da soli.

Mash dispone di un Runtime Environment — una VM basata su stack, costruita come una libreria dinamica con un API completa.

È sufficiente aggiungerla alle dipendenze del progetto e fare un paio di chiamate.

Il linguaggio stesso prevede funzionalità per funzionare come linguaggio incorporato.
In questo modo, la funzionalità in combinazione con le biblioteche linguistiche e di terze parti non viene compromessa.
Otteniamo un linguaggio incorporato che può utilizzare tutta la potenza di vari framework scritti in esso.

Mash + JVM

Ho iniziato a sviluppare una versione del traduttore per JVM.
Forse, dopo un certo periodo di tempo, apparirà un post su questo argomento su Habr.

Risultati

Non ci sono risultati definitivi. Questa è una rappresentazione intermedia dei risultati.
Buona fortuna a tutti per il 2020.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster