Mash é uma linguagem de programação que se compila

Mash é uma linguagem de programação que se compila

Saudações a todos no novo ano de 2020.

Desde a publicação do primeiro jejum Quase exatamente 1 ano se passou sobre Mash.

Durante este ano, a linguagem foi muito melhorada, muitos dos seus aspectos foram pensados ​​​​e o vetor de desenvolvimento foi determinado.

Fico feliz em compartilhar tudo isso com a comunidade.

Aviso Legal

Este projeto é desenvolvido exclusivamente com entusiasmo e não pretende dominar o mundo no campo das linguagens de programação dinâmicas!

Este desenvolvimento não deve ser considerado como um padrão a ser alcançado; o projeto não é ideal, mas mesmo assim está em desenvolvimento.

GitHub
site
fórum

Novo compilador

Na ramificação /mashc do repositório do projeto, você pode ver uma nova versão do compilador, que é escrita em Mash (a primeira versão da linguagem).

O compilador possui um gerador de código em listagem ASM (para assembler para uma VM baseada em pilha).
Atualmente estou desenvolvendo uma versão do gerador para Java (JDK 1.8).

A nova versão do compilador suporta totalmente a funcionalidade da primeira versão da linguagem e a complementa.

Novo POO

Na nova versão da linguagem, o trabalho com classes foi parcialmente redesenhado.
Os métodos de classe podem ser declarados tanto no corpo da classe quanto fora dela.
A classe agora possui um construtor explícito: init.

Exemplo de código:

...
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 ocorrer herança, teremos a oportunidade de fazer facilmente chamadas herdadas (super).

Exemplo de código:

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

Substituição dinâmica de métodos em instâncias de classe:

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

Pacotes/namespaces

O namespace deve permanecer limpo!
Conseqüentemente, a linguagem deve fornecer esta oportunidade.
No Mash, se um método de classe for estático, ele poderá ser chamado com segurança de qualquer parte do código.

Exemplo:

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

A propósito, o superoperador funcionará corretamente quando chamado desta forma.

Exceções

Na nova versão da linguagem elas são tratadas como classes:

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

Nova enumeração

Agora os elementos de enumeração podem receber valores constantes:

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

Linguagem incorporada

Potencialmente, Mash pode encontrar seu nicho como uma linguagem de programação embarcada, semelhante a Lua.

Para começar a usar o Mash para esses fins, você nem precisa montar o projeto sozinho.

Mash possui um Runtime Environment - uma VM baseada em pilha compilada como uma biblioteca dinâmica com uma API completa.

Tudo que você precisa fazer é adicioná-lo à dependência do projeto e fazer algumas chamadas.

A própria linguagem fornece funcionalidade para funcionar como uma linguagem incorporada.
Ao mesmo tempo, o desempenho em conjunto com a linguagem e bibliotecas de terceiros não é afetado.
Obtemos uma linguagem incorporada que pode usar todo o poder de vários frameworks escritos nela.

Mash + JVM

Comecei a desenvolver uma versão do tradutor para a JVM.
Talvez, depois de N tempo, uma postagem sobre esse assunto apareça no Habré.

Resultados de

Não há resultados específicos. Esta é uma representação intermediária dos resultados.
Boa sorte a todos em 2020.

Fonte: habr.com

Adicionar um comentário