
在新的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年祝大家好运。