Mash é unha linguaxe de programación que se compila por si mesma

Mash é unha linguaxe de programación que se compila por si mesma

Saúdos a todos no novo ano 2020.

Dende a publicación do primeiro publicación Pasou case exactamente 1 ano sobre Mash.

Durante este ano mellorouse moito a lingua, pensáronse moitos dos seus aspectos e determinouse o vector de desenvolvemento.

Estou feliz de compartir todo isto coa comunidade.

retratação

Este proxecto desenvólvese unicamente con entusiasmo e non pretende dominar o mundo no campo das linguaxes de programación dinámica!

Este desenvolvemento non debe considerarse como un estándar polo que se pretende esforzarse; o proxecto non é o ideal, pero está a desenvolverse.

GitHub
sitio
Foro

Novo compilador

Na rama /mashc do repositorio do proxecto, podes ver unha nova versión do compilador, que está escrita en Mash (a primeira versión da linguaxe).

O compilador ten un xerador de código na lista asm (para ensamblador para unha máquina virtual baseada en pilas).
Actualmente estou a desenvolver unha versión do xerador para Java (JDK 1.8).

A nova versión do compilador admite totalmente a funcionalidade da primeira versión da linguaxe e complétaa.

Novo OOP

Na nova versión do idioma, o traballo coas clases foi parcialmente redeseñado.
Os métodos de clase pódense declarar tanto no corpo da clase como fóra dela.
A clase agora ten un construtor explícito: init.

Código de exemplo:

...
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 se produce a herdanza, entón temos a oportunidade de facer chamadas herdadas facilmente (super).

Código de exemplo:

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

Anulación dinámica de métodos en instancias de clase:

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

Paquetes/espazos de nomes

O espazo de nomes debe permanecer limpo!
En consecuencia, a lingua debe ofrecer esta oportunidade.
En Mash, se un método de clase é estático, pódese chamar con seguridade desde calquera parte do código.

Exemplo:

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

Por certo, o superoperador funcionará correctamente cando se chame deste xeito.

Excepcións

Na nova versión do idioma trátanse como clases:

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

Nova enumeración

Agora os elementos de enumeración pódense asignar valores constantes:

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

Linguaxe incorporada

Potencialmente, Mash pode atopar o seu nicho como linguaxe de programación integrada, similar a Lua.

Para comezar a usar Mash para estes fins, nin sequera necesitas montar o proxecto ti mesmo.

Mash ten un entorno de execución: unha máquina virtual baseada en pilas compilada como unha biblioteca dinámica cunha API completa.

Todo o que tes que facer é engadilo á dependencia do proxecto e facer un par de chamadas.

A linguaxe en si proporciona funcionalidades para funcionar como linguaxe incorporada.
Ao mesmo tempo, o rendemento en conxunto con bibliotecas de idiomas e de terceiros non se ve afectado.
Obtemos unha linguaxe integrada que pode utilizar todo o poder de varios marcos escritos nel.

Mash + JVM

Comecei a desenvolver unha versión do tradutor para a JVM.
Quizais, despois de N período de tempo, apareza unha publicación sobre este tema en Habré.

Resultados de

Non hai resultados particulares. Esta é unha representación intermedia dos resultados.
Moita sorte a todos no 2020.

Fonte: www.habr.com

Engadir un comentario