Nim 是一门高度灵活的编程语言,其代码具有很强的多态与组合能力,尤其在使用 macro 时,语义往往需要在编译期展开后才能最终确定。这种高自由度的设计在增强抽象能力的同时,也引入了显著的语义不确定性,使得程序行为更依赖上下文推导与编译期分析。这种特性在提升表达力的同时,也增加了静态分析的复杂度,进而成为 LSP 实现需要进行重度语义推导、导致响应卡顿的重要原因之一。
……
Nim 是一款 Python 风格的静态类型语言。但事实上,除了缩进语法外,Nim 和 Python 并没有太多相似之处。相对于 Python,Nim 更多地吸收了 Ada 和 Lisp 等语言的特性。
Nim 编译器通过生成 C 或 Obj-C 中间代码的方式来进行本地编译,所以需要依赖一套外部编译器。Nim 也可以生成 Javascript 代码。此外,还有以脚本方式运行的 NimScript。
OOP 的一个特性就是支持多态,而动态分发(Dynamic Dispatch)就是实现多态的基础。在讲解 Nim 的动态分发实现前,先讲一下其他语言是如何实现的。