Nim语言之父对于1.0版本的个人感言

功夫不负有心人,我们终于做到了!
万众瞩目的 1.0 版本来了。

当我开始 Nim 开发时, 我想的是一个编译成 C 的不超过2万行代码的简单语言。 核心指导方针是 Nim具有宏系统 、 用以 扩展 微核心缺少的所有特性的 轻量 语言。

当前的编译器加上它使用的标准库, 不完全统计有大概14万行代码, 支持了几乎所有的操作系统和CPU架构, 可以编译成 C++JavaScript, 并且 Nim 的元编程能力是数一数二的。 语言不再轻量, 也证明了元编程无法取代所有现代语言需要的构建环节。

例如, 当 Nim宏系统 实现 async 时, 宏系统需要能够将代码编译成状态机。 这些状态机需要 goto 和获取环境变量的方式。 所以Nim的内核需要增加 “闭包迭代器” 来实现。

此外, 我们还没有真正了解如何 利用宏系统提供在类型系统层面的可扩展性, 所以Nim的内核需要泛型和泛型约束。

关于开发进展

之前说过, 我对语言开发进展表示满意, 版本 1.0 意味着我们现在有不同的开发进展: 之前的Nim被太多 “最少的惊喜原则” 推动, 导致每个人可以说 “额,我认为这本来应该工作…”, 然后随后实现的时候,还带来了很多特殊情况。 这些特殊情况可能失控并让系统 更难 理解,最终产生了新的……“惊喜”。 从 1.0 版本开始我们遵循 “规范优先” 的开发: 先写RFC,之后讨论,再写规范,再实现,再在实现的过程中观察 规范 所带来的反馈。

对,我知道规范/手册有一些疏漏和bug,但这种现状正在改善。 新的 “析构器” 语言特性也是遵循 规范先行 的思想开发的, 哪怕规范本身还有瑕疵,效果也能好很多,并且能产生更高质量的结果。

Nim 的未来

我们想把重心放在Nim的工具上, 包括 Nimsuggest (一个跨编辑器的 Nim 代码补全引擎), NimbleNim 的包管理器), 和 NimprettyNim 的源代码格式化工具)。 从我个人的角度,我认为 “增量编译”(IC) 会是 Nim 编译器下一个大的里程碑。 IC 将会进一步压缩 Nim 已经很快的编译时间, 加快对宏扩展和其他构造结果的缓存。

关于 conceptsowned: 有人说,这两个特性必须和 1.0 版本一起发布, 因为它们改变了 Nim 在实际开发过程中的编写方式。 但,恕不敢苟同,即使没有 concept ,语言仍然可以很好地运作, 而且尽管现有的 concepts 语法和语义亟待改善,但也是能用的。 现在还不清楚我们是否最终会在 Nim 中使用 owned ,我也有其他的想法来改进nim的内存管理。

不过这都不重要。v1 版本的宗旨是交付我们有的,不是我们想要的。 前途是光明的,1.0 版本只是一个开始。

就像一场婚姻,婚礼只是开始。