本文假定您对 Nim 已经有一定的了解,本文并非零基础教程
安装 🔭
建议的安装姿势: 使用 choosenim
Windows🖥️
从这里 https://github.com/dom96/choosenim/releases 下载压缩包(.zip
),不要下载 .exe
Unix🎵
[Optional] 代表可选
[CHOOSENIM_CHOOSE_VERSION=stable] curl https://nim-lang.org/choosenim/init.sh -sSf | sh
或者
[CHOOSENIM_CHOOSE_VERSION=stable] wget -qO - https://nim-lang.org/choosenim/init.sh | sh
*可以通过环境变量 CHOOSENIM_CHOOSE_VERSION
来指定安装的版本,默认是最新的发行版
Note: Nim 也有类似于 Rust 的 nightly 构建,这个构建是基于
devel
的.*Nim 虽然已经有相当一段时间的发展,但它仍然是一个小众的社区,所以我个人并不建议使用最新的 nightly(devel) 构建,因为您可能会收获一些无法立刻解决的 bug
配置 ⚙️
choosenim
🔧
choosenim
会默认安装到 ~/.choosenim
中,在 Windows 上是 C:\User\<Username>\
.
之后各个版本的工具链会安装这个目录,choosenim
也提供了 --choosenimDir
来指定其安装位置,有兴趣的可以自己试一试.
nimble
📦
nimble
类似于 Rust 的 cargo
,是 Nim 的官方包管理器,在通过 choosenim
安装的时候会一块安装好.
nimble
的默认安装路径是 ~/.nimble
(请自行翻译成 Windows 上的相应目录 😋)
如果有需要,可以通过配置文件来修改默认的包安装路径1:
- Windows:
C:\Users\<Username>\AppData\Roaming\nimble\nimble.ini
- Unix:
~/.config/nimble/nimble.ini
举个栗子 🌰:
# 这是我个人的配置
httpProxy = r"127.0.0.1:7890" # 下载依赖使用的代理
nimbleDir = r"E:\.nimble" # 默认下载/安装的包放到 E 盘
nim.cfg
🤖
接下来我们需要配置 Nim 的编译器,这个部分之所以存在是因为 Nim 当前的稳定版(昨天还是今天来着,刚从 1.6.12 更新到 1.6.14)仍然使用的是引用计数的 GC(refc),而非高效的 ARC/ORC
你可以在 ~/.choosenim/toolchains/
中找到你正实际使用的 Nim 版本,之后可以修改其配置文件 ./nim-1.6.14/config/nim.cfg
:
# 同理,附上我的配置,只需找个地方加上这个即可
# -------------------------------------------------------------------------- #
# User defined by sslime336 #
# -------------------------------------------------------------------------- #
cc = clang # 使用 LLVM 而非传统 GCC,因为有些包会依赖 libclang,虽然可以直接提供给
# GCC 这个库,但使用 LLVM 相对于 GCC 会带来更好的性能
--gc:arc # 使用 ARC.
# ORC 虽然带来了循环引用内存泄露的消除,但是也引入的大多数时候不必要的性能损耗
# 我们需要将修改后的 `nimble` 位置添加进来,不然会找不到依赖
nimblepath=r"E:\.nimble\pkgs"
nimblepath=r"E:\.nimble\pkgs2"
# 这里我们根据不同的构建方式,如 -d:release, -d:danger,在指定位置生成带有后缀标记的缓存
# *_r 表示 release 的缓存, *_rd 是 danger,*_d 是默认的 debug 构建的缓存
@if release:
nimcache = r"E:\.cache\nimcache\${projectName}_r"
@elif danger:
nimcache = r"E:\.cache\nimcache\${projectName}_rd"
@else
# 需要提醒一句的是,虽然 nimc 默认是 debug 构建,但如果不指定 -d:debug,是不会走到
# @elif debug: 中的,所以我们直接使用 @else 来 workaround
nimcache = r"E:\.cache\nimcache\${projectName}_d"
@end
# ---------------------- End of sslime336's define -------------------------
行了,到这里就差不多了,现在可以:
- touch helloworld.nim and write some code
- use nimble init [pkgName] to do whatever you want