Mash è un linguaggio di programmazione che si compila da solo

Mash è un linguaggio di programmazione che si compila da solo

Un saluto a tutti per il nuovo anno 2020.

Dalla pubblicazione del primo inviare È passato quasi esattamente 1 anno riguardo a Mash.

Durante quest'anno, la lingua è stata notevolmente migliorata, molti dei suoi aspetti sono stati studiati e determinato il vettore dello sviluppo.

Sono felice di condividere tutto questo con la comunità.

Negazione di responsabilità

Questo progetto è stato sviluppato esclusivamente con entusiasmo e non pretende di dominare il mondo nel campo dei linguaggi di programmazione dinamici!

Questo sviluppo non deve essere considerato come uno standard a cui tendere; il progetto non è ideale, ma è comunque in fase di sviluppo.

GitHub
sito web
foro

Nuovo compilatore

Nel ramo /mashc del repository del progetto, puoi vedere una nuova versione del compilatore, scritta in Mash (la prima versione del linguaggio).

Il compilatore dispone di un generatore di codice nell'elenco asm (per l'assemblatore per una VM basata su stack).
Attualmente sto sviluppando una versione del generatore per Java (JDK 1.8).

La nuova versione del compilatore supporta pienamente le funzionalità della prima versione del linguaggio e la integra.

Nuovo OPS

Nella nuova versione del linguaggio, il lavoro con le classi è stato parzialmente ridisegnato.
I metodi della classe possono essere dichiarati sia nel corpo della classe che all'esterno di esso.
La classe ora ha un costruttore 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
...

Se si verifica l'ereditarietà, abbiamo l'opportunità di effettuare facilmente chiamate ereditate (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

Override dinamico dei metodi sulle istanze della classe:

...
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, la lingua deve offrire questa opportunità.
In Mash, se un metodo di classe è statico, può essere chiamato in sicurezza 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, il super operatore funzionerà correttamente quando chiamato in questo modo.

eccezioni

Nella nuova versione del linguaggio vengono trattati come classi:

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

Nuova enumerazione

Ora agli elementi di enumerazione possono essere assegnati valori costanti:

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

Lingua incorporata

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

Per iniziare a utilizzare Mash per questi scopi, non è nemmeno necessario assemblare il progetto da soli.

Mash dispone di un ambiente runtime: una VM basata su stack compilata come libreria dinamica con un'API completa.

Tutto quello che devi fare è aggiungerlo alla dipendenza del progetto ed effettuare un paio di chiamate.

Il linguaggio stesso fornisce funzionalità per funzionare come linguaggio incorporato.
Allo stesso tempo, le prestazioni insieme alle librerie linguistiche e di terze parti non vengono influenzate.
Otteniamo un linguaggio incorporato in grado di sfruttare tutta la potenza dei vari framework scritti al suo interno.

Mash + JVM

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

Risultati di

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

Fonte: habr.com

Aggiungi un commento