我对 Nim 完全陌生。
Nim 会在编译过程中自动尝试做所有它能做的事情吗? 文档讨论了很多关于在编译时计算静态内容的内容,这似乎是该语言的指导思想。
我有一个Python程序,它通过一堆嵌套循环来计算一些东西,每个循环生成一个数组,然后根据数组中的值计算启发式。 除了在最后将启发式写入文件或控制台之外,运行期间没有任何 I/O。
输出是 100% 确定性的,并且原则上在程序运行之前是已知的,但是 Python 当然会在运行时计算输出,即使在启用多处理之后,这也可能需要很长时间(因为问题是 CPU 和内存限制的) ).
如果我用 Nim 重写 Python 程序,编译器是否足够聪明,可以在编译时计算出输出? 因此,运行时只会将最终输出写入文件。
我可以将 Nim 中的 Python 程序简化为:
var x: int
for i in 1..10:
x += i
echo x
退货:
55
这里几乎不可读的 C 输出在
nimAddInt(...)
内部有一个 NimMainModule
调用,所以我猜测在这种特殊情况下该操作发生在运行时。 我如何强制它在编译时进行? 宏?
Nim 不会在编译时自动执行操作。你必须明确地告诉它。幸运的是,这就像在编译时上下文中使用结果一样简单。例如,将其分配给
const
或明确地将所有内容放入 static
块中。