Mash est un langage de programmation qui se compile

image

Salutations à tous dans la nouvelle 2020e année.

Depuis la publication du premier article sur Mash, presque exactement un an s'est écoulé.

Cette année, le langage a été considérablement amélioré, de nombreux aspects ont été pensés et un vecteur de développement a été défini.

Je suis heureux de partager cela avec la communauté.
Clause de non-responsabilité

Ce projet est développé exclusivement par enthousiasme et ne prétend pas à une domination mondiale dans le domaine des langages de programmation dynamiques!

Vous ne devez pas considérer ce développement comme une norme à laquelle vous devez vous efforcer, le projet n'est pas idéal, mais il évolue néanmoins.

Github
Le site
Le forum

Nouveau compilateur


Dans la branche / mashc du référentiel de projet, vous pouvez voir la nouvelle version du compilateur, qui est écrite en Mash (sur la première version du langage).

Le compilateur a un générateur de code dans la liste asm (pour l'assembleur sous la pile VM).
En ce moment je développe la version du générateur pour Java (JDK 1.8).

La nouvelle version du compilateur prend entièrement en charge la fonctionnalité de la première version du langage et la complète.

Nouveau POO


La nouvelle version de la langue a partiellement retravaillé le travail avec les classes.
Les méthodes de classe peuvent être déclarées à la fois dans le corps de classe et à l'extérieur.
La classe a maintenant un constructeur explicite: init.

Exemple de code:

... 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 l'héritage se produit, alors nous avons la possibilité de faire facilement des appels hérités (super).

Exemple de code:

 ... 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éthodes de substitution dynamique sur les instances de classe:

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

Packages / espaces de noms


L'espace de noms doit rester propre!
Par conséquent, le langage devrait offrir cette possibilité.
Dans Mash, si la méthode de classe est statique, elle peut être appelée en toute sécurité de n'importe où dans le code.

Un exemple:

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

Soit dit en passant, le super opérateur fonctionnera correctement avec un tel appel.

Exceptions


Dans la nouvelle version du langage, ils sont traités comme des classes:

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

Nouvelle énumération


Désormais, les éléments d'énumération peuvent recevoir des valeurs constantes:

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

Intégré


Potentiellement - Mash peut prendre sa niche en tant que langage de programmation intégré, similaire à Lua.

Pour commencer à utiliser Mash à ces fins, vous n'avez même pas besoin de créer un projet vous-même.

Mash a un environnement d'exécution - une machine virtuelle empilée conçue comme une bibliothèque dynamique avec une API complète.

Il suffit de l'ajouter en fonction du projet et de faire quelques appels.

Le langage lui-même fournit des fonctionnalités pour travailler en tant que langage intégré.
Dans le même temps, l'opérabilité avec les bibliothèques de langues et tierces n'est pas violée.
Nous obtenons un langage embarqué qui peut utiliser toute la puissance des différents frameworks qui y sont écrits.

Mash + JVM


Il a commencé à développer une version traductrice pour la JVM.
Peut-être, après le Nième temps, un post sur ce sujet apparaîtra sur le hub.

Résumé


Il n'y a pas de résultats particuliers. Il s'agit d'une présentation intermédiaire des résultats.
Bonne chance à tous en 2020.

Source: https://habr.com/ru/post/fr482842/


All Articles