常见问题

常规问题

为什么不用其他编程语言而用Nim?

Nim是一种极少见的 可编程 静态类型的, 并结合了C的速度和内存效率、凝练的语法、内存安全性和其他多种目标的语言。

Nim稳定吗?

编译器和标准库正在积极开发中,并有一套测试用例来持续确保稳定性。 每三到六个月会定期发布一次稳定版,让稳定性要求高的系统可以得到保证。

很少出现不向后兼容的更新, 但每次出现我们都做了详细的文档记录, 让你可以轻松地进行管理。 编译器也会对已弃用的功能进行高亮显示, 以便为更新提供足够的提示和转换时间。

安全性和内存安全性如何?

Nim通过不执行指针运算、 可选检查、 跟踪和非跟踪引用 以及可选的非可空类型来保证内存安全性。 它通过koch工具和污点分析对Valgrind提供支持。

Nim遵循怎样的许可?

Nim编译器和库是MIT许可的。 这意味着你可以为你使用Nim开发的程序选取任何许可。

有对JVM和CLR的后端支持吗?

我们最近并没有计划对JVM/CLR提供支持。 但是由于这些VM支持FFI到C, 因此应该可以创建原生Nim桥接, 通过Nim强大的元编程功能,可以显式生成所有粘水代码。

语言设计主要受哪些其他语言的影响?

Nim大量借用了(按照受影响的顺序):Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.

为啥起名叫proc?

过程曾经是常用术语,而不是作为没有别的用的数学的函数实体。 而且在Nim中func确实是proc {.noSideEffect.}的语法糖。 还因为Nim提供了一个iterator和一个method关键字,而def代表define, 所以叫它def也就不可能了。

编译的常见问题

哪个选项编译的可执行文件最快?

对于标准的配置文件,-d:danger 通过禁用 所有 运行时安全检查(包括边界检查、流程检查、空值检查等等),以尽最快速度构建二进制文件。 更多的情况下用-d:release就已经足以应付。 当然如果你的编译器支持,你也可以开启链接时优化来更快地构建一个可执行文件: 在 Nim 1.4 以上版本使用 --passc:-flto 或者 -d:lto

哪个选项可以构建出最小的可执行文件?

对于标配的文件, -d:danger -d:strip --opt:size 就能得到你想要的。 当然如果你的编译器支持,你也可以和上一个问题中描述的相同方式,开启链接时优化来构建一个更快的可执行文件

如何使用与默认编译器不同的C编译器?

打开并编辑config/nim.cfg文件。 将cc变量的值对照下方表格进行修改:

缩写 C/C++ 编译器
gcc GNU C编译器
clang Clang编译器
vcc 微软Visual C++
icc Intel C编译器
llvm_gcc LLVM-GCC编译器
ucc 通用UNIX C编译器
tcc 微型 C 编译器
bcc Borland C 编译器
envcc 你环境中的默认 C 编译器

其他的C编译器我们不进行官方支持,但是它可能也能用,大概吧。

如果你的C编译器不在上述列表中, 尝试使用 环境中的默认 C 编译器envcc) 。 如果C编译器需要不同的命令行参数,可以尝试使用 --passc--passl 进行切换。