Mash hè una lingua di prugrammazione chì si compila

Mash hè una lingua di prugrammazione chì si compila

Saluti à tutti in u novu annu 2020.

Dapoi a publicazione di u primu postu Quasi esattamente 1 annu hè passatu circa Mash.

In questu annu, a lingua hè stata assai migliurata, parechji di i so aspetti sò stati pensati è u vettore di u sviluppu hè statu determinatu.

Sò felice di sparte tuttu questu cù a cumunità.

Légales

Stu prughjettu hè sviluppatu solu nantu à l'entusiasmu è ùn pretende micca a duminazione mundiale in u campu di i linguaggi di prugrammazione dinamichi !

Stu sviluppu ùn deve esse cunsideratu cum'è un standard per sforzà; u prugettu ùn hè micca ideale, ma si sviluppa sempre.

GitHub
situ
Forum

Novu compilatore

In u ramu /mashc di u repositoriu di u prughjettu, pudete vede una nova versione di u compilatore, chì hè scrittu in Mash (a prima versione di a lingua).

U compilatore hà un generatore di codice in a lista asm (per assembler per una VM basata in stack).
Attualmente sò sviluppatu una versione di u generatore per Java (JDK 1.8).

A nova versione di u compilatore sustene cumplettamente a funziunalità di a prima versione di a lingua è cumplementa.

Novu OOP

In a nova versione di a lingua, u travagliu cù e classi hè statu parzialmente riprogettatu.
I metudi di classi ponu esse dichjarati in u corpu di classi è fora di questu.
A classe hà avà un custruttore esplicitu: init.

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

Se l'eredi si trova, allora avemu l'uppurtunità di fà facilmente chjamate ereditate (super).

Codice di 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

Overriding dinamicu di metudi nantu à istanze di classi:

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

Pacchetti/spazi di nomi

U namespace deve esse pulitu!
Per quessa, a lingua deve furnisce questa opportunità.
In Mash, se un metudu di classi hè staticu, pò esse chjamatu sicuru da ogni parte di u codice.

Esempiu:

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

In modu, u super operatore hà da travaglià currettamente quandu chjamatu in questu modu.

Eccezziune

In a nova versione di a lingua sò trattati cum'è classi:

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

Enum novu

Avà l'elementi di enumerazione ponu esse attribuiti valori custanti:

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

Lingua incrustata

Potenzialmente, Mash pò truvà u so nichulu cum'è una lingua di prugrammazione integrata, simili à Lua.

Per cumincià à aduprà Mash per questi scopi, ùn avete mancu bisognu di assemblà u prugettu stessu.

Mash hà un Ambiente Runtime - una VM basata in stack compilata cum'è una biblioteca dinamica cù una API completa.

Tuttu ciò chì duvete fà hè aghjunghje à a dependenza di u prughjettu è fà un paru di chjama.

A lingua stessa furnisce funziunalità per travaglià cum'è una lingua integrata.
À u listessu tempu, u funziunamentu in cunghjunzione cù e biblioteche di lingua è di terzu ùn hè micca affettatu.
Avemu una lingua incrustata chì pò aduprà u pienu putere di diversi frameworks scritti in questu.

Mash + JVM

Aghju cuminciatu à sviluppà una versione di u traduttore per a JVM.
Forsi, dopu à N quantità di tempu, un postu nantu à questu tema appariscerà in Habré.

Risultati

Ùn ci sò micca risultati particulari. Questa hè una rappresentazione intermedia di i risultati.
Bona furtuna à tutti in 2020.

Source: www.habr.com

Add a comment