建议 Trait 命名方式以 I 开始,以便于与基本类型和 struct 区分开来,提高代码可识别度

struct T {
  x: Int
  y: Int
} derive(IEq, ICompare, IDebug, IDefault)

感觉这样相当于偏旁部首,也起到注释的作用。

C# 就是这么做的。好处就是你说的,可识别度更高。

不过 C# 里,interface 是 pure abstract class,还是一个 class,所以需要和普通的 class 通过命名规范区分开。但在我们这里,trait 和 type 一开始就是两种完全独立的构造了,可能出现的位置也不一样(trait:类型参数列表、derive。type:各种类型标注),所以通过命名规范区分 trait 和 type 的需求不那么强,就选择了更类似的语言(Rust、Haskell)的做法,不给 trait 加特殊的命名规范

1 个赞

请问一下,moonbit 将来是否会实现类似于 rust 中的 impl Trait 的功能?
这样的功能 trait 和 type 出现的位置是一样的

这周我们刚刚加入了 trait object,类似 Rust 的 dyn,但没有关键字,所以 trait 可以直接拿来做类型了。但语义上 trait 和 type 还是两种独立的东西。比如在类型参数的约束里写普通类型会直接报错