本文系 Creating JVM language 翻译的第四篇。
原文中的代码和原文有不一致的地方均在新的代码仓库中更正过,建议参考新的代码仓库。

上一节中,我们已经实现了 Enkel 语言的原型实现。本章我们需要定义好 Enkel 的语言特性。

众所周知,Java 中有很多冗余的部分。Java 尽可能的避免让你犯错,因此我们有时候需要写大量的重复性代码。

我们的目标是让 Enkel 尽可能的简单。简单带来的缺点显而易见,但是对于实现语言原型,是个不错的选择。

下面我们定义了 Enkel 语言的和新特性。

特点 示例
一个文件代表一个类,无需使用 class 关键字来声明类名,只需要在 import后提供类型 Car {}
继承 Car : Vehicle {}
可选的自动生成 getters,setters,builder,equals,hashcode Car(getters,setters,hashequals,builder) : Vehicle {}
类型推断 var x = 5
默认参数 fun createPoint(Int x=0, Int y = 0)
可选参数命名,这在函数调用指明参数的时候非常有用 createPoint(5,0) createPoint(x->5,y->0) createPoint(y->0,x->5)
函数也是对象(函数是一等公民) const f = (Int x=0, Int y=0) => x*y
没有静态方法 static void x()
默认用 == 替代 equals object1 == object2