
Saludos a todos en el nuevo año 2020.
Desde la publicación de la primera
publicación sobre Mash, ha pasado casi exactamente 1 año.
Durante este año, el lenguaje mejoró enormemente, se pensaron muchos de sus aspectos y se definió un vector de desarrollo.
Estoy feliz de compartir esto con la comunidad.
Descargo de responsabilidad
¡Este proyecto se desarrolla exclusivamente con entusiasmo y no pretende dominar el mundo en el campo de los lenguajes de programación dinámicos!
No debe considerar este desarrollo como un estándar al que debe esforzarse, el proyecto no es ideal, pero sin embargo se está desarrollando.
Github
Sitio
Foro
Nuevo compilador
En la rama / mashc del repositorio del proyecto, puede ver la nueva versión del compilador, que está escrita en Mash (en la primera versión del lenguaje).
El compilador tiene un generador de código en la lista de asm (para el ensamblador en la pila VM).
En este momento estoy desarrollando la 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 POO
La nueva versión del lenguaje ha reelaborado parcialmente el trabajo con clases.
Los métodos de clase se pueden declarar tanto en el cuerpo de la clase como en el exterior.
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 la herencia, entonces tenemos la oportunidad de hacer llamadas heredadas (super) fácilmente.
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
Métodos de anulación dinámica 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 mantenerse limpio!
En consecuencia, el lenguaje debería brindar esta oportunidad.
En Mash, si el método de la clase es estático, se puede llamar de forma segura desde cualquier parte del código.
Un ejemplo:
... class MyPackage: func MyFunc(a, b): return a + b end end ... println( MyPackage -> MyFunc(10, 20) ) // 30
Por cierto, el súper operador funcionará correctamente con dicha llamada.
Excepciones
En la nueva versión del lenguaje, 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
Incrustado
Potencialmente: Mash puede ocupar su lugar como un lenguaje de programación integrado, similar a Lua.
Para comenzar a usar Mash para estos fines, ni siquiera necesita crear un proyecto usted mismo.
Mash tiene un entorno de tiempo de ejecución: una máquina virtual apilada construida como una biblioteca dinámica con una API completa.
Solo es necesario agregarlo según el proyecto y hacer un par de llamadas.
El lenguaje en sí proporciona funcionalidad para trabajar como un lenguaje incrustado.
Al mismo tiempo, no se viola la operatividad junto con el lenguaje y las bibliotecas de terceros.
Obtenemos un lenguaje incrustado que puede usar todo el poder de varios marcos escritos en él.
Mash + JVM
Comenzó a desarrollar una versión traductora para la JVM.
Quizás, después de la enésima cantidad de tiempo, aparecerá una publicación sobre este tema en el centro.
Resumen
No hay resultados particulares. Esta es una presentación provisional de los resultados.
Buena suerte a todos en 2020.