Mash是一种可自行编译的编程语言

图片

在新的2020年向所有人致以问候。

自有关Mash的第一篇文章发布以来,几乎已经过去了一年。

今年,该语言得到了极大的改进,已经考虑了许多方面,并定义了一个开发载体。

很高兴与社区分享。
免责声明

这个项目是完全出于热情而开发的,并不声称在动态编程语言领域处于世界主导地位!

您不应该将这种发展视为您应该追求的标准,该项目不是理想的,但是它仍在发展中。

Github
网站
论坛

新的编译器


在项目存储库的/ mashc分支中,您可以看到以Mash编写的新版本编译器(在该语言的第一个版本上)。

编译器在asm列表中有一个代码生成器(用于堆栈VM下的汇编器)。
目前,我正在开发Java生成器的版本(JDK 1.8)。

编译器的新版本完全支持该语言的第一版本的功能并对其进行补充。

新的面向对象


该语言的新版本对类进行了部分重做。
可以在类主体中和外部都声明类方法。
该类现在具有一个显式构造函数:init。

代码示例:

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

如果发生继承,那么我们就有机会轻松进行继承的调用(超级)。

代码示例:

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

在类实例上动态重写的方法:

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

包/命名空间


名称空间必须保持整洁!
因此,该语言应提供此机会。
在Mash中,如果类方法是静态的,则可以在代码中的任何位置安全地调用它。

一个例子:

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

顺便说一句,超级操作员将通过这样的调用正常工作。

例外情况


在新版本的语言中,它们被视为类:

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

新枚举


现在可以为枚举元素分配常量值:

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

嵌入式的


潜在的-Mash可以像Lua一样,将其优势作为嵌入式编程语言。

要开始将Mash用于这些目的,您甚至不需要自己构建项目。

Mash有一个运行时环境-一个堆叠的VM,它作为具有完整API的动态库而构建。

仅需要根据项目将其添加并打几个电话即可。

该语言本身提供了用作嵌入式语言的功能。
同时,不违反与语言和第三方库一起的可操作性。
我们得到了一种嵌入式语言,可以使用其中编写的各种框架的全部功能。

混搭+ JVM


他开始为JVM开发翻译器版本。
也许在第N个时间之后,有关此主题的帖子将出现在中心上。

总结


没有特别的结果。 这是结果的临时介绍。
到2020年祝大家好运。

Source: https://habr.com/ru/post/zh-CN482842/


All Articles