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

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

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

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

Ao longo deste ano, a linguagem foi significativamente aprimorada, muitos de seus aspectos foram repensados ​​e a direção de seu desenvolvimento foi definida.

Fico feliz em compartilhar tudo isso com a comunidade.

Aviso Legal

Este projeto está sendo desenvolvido puramente por entusiasmo e não pretende dominar o mundo no campo das linguagens de programação dinâmica!

Este desenvolvimento não deve ser considerado 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, escrita em Mash (a primeira versão da linguagem).

O compilador possui um gerador de código na listagem asm (para assembler para máquina virtual de pilha).
Atualmente estou desenvolvendo uma versão do gerador para Java (JDK 1.8).

A nova versão do compilador oferece suporte completo à funcionalidade da primeira versão da linguagem e a complementa.

Nova Programação Orientada a Objetos

Na nova versão da linguagem, o trabalho com classes foi parcialmente reformulado.
Os métodos de classe podem ser declarados tanto dentro do corpo da classe quanto fora dele.
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, então teremos a capacidade de fazer chamadas herdadas facilmente (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

Sobrescrita 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/Espaços de nomes

O espaço de nomes deve permanecer limpo!
Assim sendo, a linguagem deve proporcionar essa oportunidade.
Em Mash, se um método de classe for estático, ele poderá ser chamado com segurança de qualquer lugar no código.

Exemplo:

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

Aliás, o superoperador funcionará corretamente quando chamado desta forma.

Exceções

Na nova versão da linguagem, eles são tratados como classes:

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

Novo enum

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 de programação embarcada

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

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

O Mash possui um Ambiente de Execução — uma VM baseada em pilha, construída como uma biblioteca dinâmica com uma API completa.

Basta adicioná-lo às dependências do seu projeto e fazer algumas chamadas.

A própria linguagem oferece funcionalidades para funcionar como uma linguagem incorporada.
Ao mesmo tempo, a funcionalidade em conjunto com bibliotecas de idiomas e de terceiros não é prejudicada.
Obtemos uma linguagem incorporada que pode usar todo o poder de várias estruturas escritas nela.

Mash + JVM

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

Resultados de

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

Fonte: habr.com

Adicionar um comentário