Mash es un lenguaje de programación que se compila a sí mismo.

Mash es un lenguaje de programación que se compila a sí mismo.

Saludos a todos en el nuevo año 2020.

Desde la publicación del primer ayuno Ha pasado casi exactamente 1 año sobre Mash.

Durante este año se mejoró mucho el lenguaje, se pensaron muchos de sus aspectos y se determinó el vector de desarrollo.

Estoy feliz de compartir todo esto con la comunidad.

Observación

¡Este proyecto se está desarrollando únicamente con entusiasmo y no pretende dominar el mundo en el campo de los lenguajes de programación dinámicos!

Este desarrollo no debe considerarse como un estándar por el que luchar; el proyecto no es ideal, pero de todos modos se está desarrollando.

GitHub
sitio web
Foro

Nuevo compilador

En la rama /mashc del repositorio del proyecto, puede ver una nueva versión del compilador, que está escrita en Mash (la primera versión del lenguaje).

El compilador tiene un generador de código en el listado asm (para ensamblador de una máquina virtual basada en pila).
Actualmente estoy desarrollando una versión del generador para Java (JDK 1.8).

La nueva versión del compilador es totalmente compatible con la funcionalidad de la primera versión del lenguaje y la complementa.

Nueva programación orientada a objetos

En la nueva versión del idioma, el trabajo con clases se ha rediseñado parcialmente.
Los métodos de clase se pueden declarar tanto en el cuerpo de la clase como fuera de él.
La clase ahora tiene un constructor explícito: init.

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

Si se produce herencia, entonces tenemos la oportunidad de realizar fácilmente llamadas heredadas (super).

Ejemplo 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

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/espacios de nombres

¡El espacio de nombres debe permanecer limpio!
En consecuencia, el lenguaje debe brindar esta oportunidad.
En Mash, si un método de clase es estático, se puede llamar de forma segura desde cualquier parte del código.

Ejemplo:

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

Por cierto, el superoperador funcionará correctamente cuando se llame de esta forma.

Excepciones

En la nueva versión del idioma se tratan como clases:

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

Nueva enumeración

Ahora a los elementos de enumeración se les pueden asignar valores constantes:

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

Idioma incorporado

Potencialmente, Mash puede encontrar su nicho como lenguaje de programación integrado, similar a Lua.

Para comenzar a utilizar Mash para estos fines, ni siquiera necesita armar el proyecto usted mismo.

Mash tiene un entorno de ejecución: una máquina virtual basada en pila compilada como una biblioteca dinámica con una API completa.

Todo lo que necesitas hacer es agregarlo a la dependencia del proyecto y realizar un par de llamadas.

El lenguaje en sí proporciona funcionalidad para funcionar como un lenguaje integrado.
Al mismo tiempo, el rendimiento junto con bibliotecas de idiomas y de terceros no se ve afectado.
Obtenemos un lenguaje integrado que puede utilizar todo el poder de varios marcos escritos en él.

Mezcla + JVM

Comencé a desarrollar una versión del traductor para JVM.
Quizás, después de N cantidad de tiempo, aparezca una publicación sobre este tema en Habré.

resultados

No hay resultados particulares. Esta es una representación intermedia de los resultados.
Buena suerte a todos en 2020.

Fuente: habr.com

Añadir un comentario