首发于Rust编程
Rust 开发环境指北

Rust 开发环境指北

有兴趣入门 Rust 的同学现在不少,一直想写这样一篇文章,但不是我拖延而时机未到,现在今年是社区着力改善工具链和第三方库的年份,相关的成绩挺显著。虽然搭建环境的时候可能会碰到问题,但大致要做的事情已经明了了。

(因为很少在 Windows 上开发,本文暂时不会涉及 Windows。但基本流程是差不多的。)

安装

如果仅仅是想尝鲜体验一下 Rust,可以选择用喜爱的软件包管理器安装 rust 或者 rustc,然后选择一个靠谱的编辑器尝试就行了。(更轻度的话可以在线体验: Rust Playground

如果尝鲜之后,想系统地学习 Rust,并使用方便的开发工具和各式第三方库,需要用官方推荐的方式来安装,在网站有相关内容,为了避免没注意到这里也贴一下:

使用 rustup 管理工具链

Rust 由 rustup 工具来安装和管理。 Rust 有一个 6 周的 快速发布过程 并且支持 大量的平台 ,所以任何时候都有很多 Rust 构建可用。 rustup 在 Rust 支持的每一个平台上以一致的方式管理这些构建, 并可以从 beta 和 nightly 发布渠道安装 Rust,且支持额外的交叉编译目标平台。

更多信息请查看 rustup documentation


配置 PATH 环境变量

在 Rust 开发环境中,所有工具都安装到 ~/.cargo/bin 目录, 并且您能够在这里找到 Rust 工具链,包括 rustc、cargo 及 rustup。

因此,Rust 开发者们通常会将此目录放入 PATH 环境变量。在安装时,rustup 会尝试配置 PATH, 但是因为不同平台、命令行之间的差异,以及 rustup 的 bug,对于 PATH 的修改将会在重启终端、用户登出之后生效,或者有可能完全不会生效。

当安装完成之后,如果在控制台运行 rustc --version 失败,这是最可能的原因。

注:配置环境变量的简便方法是将这一行加入你的 .bashrc / .zshrc / .profile etc:

source $HOME/.cargo/env

rustup

Rust 编译器分为三个频道:修复了大多数 bug,但也不能用实验功能的 stable;等待观察成为 stable 的 beta;以及有着最多 bug 和 feature 的 nightly。

Rust 玩家需要在三个版本之间切换是十分痛苦的事情,有人做了切换工具 multirust,之后被官方招安,改名为 rustup并成为默认的安装途径。如果需要帮助可以参考这篇文章

安装完成后视情况请定期运行 rustup update。不使用 nightly 的话一般不到两个月更新一次。

这是一片神奇的土地,很多时候全球都能下载下来的在这片土地上就下载不下来。

感谢中科大镜像有 Rust 源 这个源帮助下载 Rust 编译器等静态文件。

Crates.io 是 Rust 包的网站,类似于 NPM,you know,这是另一个镜像

以前有报告称,因为代码补全插件的 bug,使用这个镜像会导致代码补全不可用,如果出现这种情况请切换回原本的源并且大喊:fuck GFW。然后用文本编辑器打开 ~/.cargo/config

[http]
proxy = "[socks5://]server:<port>"

refer 1 2

RLS

如果不使用 Visual Studio Code 本节可以跳过。

RLS 是 Rust Language Server 的简写,微软提出编程语言服务器的概念,将 IDE 的一些编程语言相关的部分由单独的服务器来实现,比如说代码补全、跳转定义、查看文档等等。这样只用给不同编辑器或者 IDE 实现客户端接口就好了。

Rust 就是这个概念最积极的先行者,RLS 是官方的,可预见的未来也是编辑器最主要的帮手。不过现在只有微软自家的 Visual Studio Code 支持,并且需要在系统中安装 nightly 版本的 Rust(不必启用),不想用现在可以不用。

RLS 的安装请查阅项目README,也是 rustup 轻松完成。但因为目前部分功能还依赖 racer 来实现,需要配置 racer 的环境变量(不必安装),所以请参阅下文关于 RUST_SRC_PATH 环境变量的部分。

Racer 代码补全

如果使用 Intellij Rust 本节可以跳过。


Racer 是 Rust 代码补全库,被很多编辑器所需要(除了 Interllij Rust),安装:


cargo install racer

代码补全需要源代码。以前需要下载源代码,手动放到某处并且定期更新,现在有了 rustup 很方便:


rustup component add rust-src

之后需要配置环境变量,新版的 racer 似乎能自动探测了,不过这里以防万一还是写一下。因为 rustup 使得 rust 编译器的版本可以随时切换,所以环境变量不能写死,从这个 issue 可以看到很聪明的做法,设置环境变量为:


export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src"

就能根据当前的 Rust 频道自动设置源代码地址了。

(实际上强行设定为 nightly 其实应该也不会有什么问题…)

rustfmt, cargo-check 和 rust-clippy

都是很重要的工具,配置起来也没什么麻烦的,就放在一起简单介绍一下。

这些都可以作为 cargo 的子模块,如果要学 Rust 不可能不知道 cargo。作为 Rust 最常用的有力工具,广受好评的 cargo 提供对项目的依赖管理、build、文档生成、发布等等,还可以被插件扩展,下面这几个就是必装的 cargo 插件。

clippy

有点 linter 的感觉,分析你的源代码,检查哪些地方写得不地道可以改善。

可以作为项目依赖安装在编译时弹警告,但更好的做法是作为 cargo 的插件,手动或者被编辑器插件调用:


cargo install clippy
cargo-check

(评论指出这已经是自带命令,不需要去安装了。)

Rust 编译时间过长目前是一个缺点,写代码的时候不可能为了检查错误动不动编译一下。

但是 Rust 的类型安全做得非常好,90% 的错误在类型检查的时候就会被发现,所以 cargo check 给 cargo 添加了 check 命令,快速地检查程序的类型而不编译。

rustfmt

顾名思义,格式化整个项目。commit 之前跑一遍吧。

最后附赠一个编译器插件 Herbie lint for Rust 检测不稳定的浮点数运算,Haskell 也有。

编辑器

这里有一份编辑器对 Rust 支持的表,可以大致看一下,根据自己喜欢的编辑器来挑选。

这里我主要推荐 Visual Studio Code 主要是方便简单开箱即用,而且是目前RLS主要支持的编辑器。

(其次推荐 Intellij Rust,作为 Intellij 插件,他们用自己写的逻辑而不是 racer 补全,如果遇到问题了可以试试这个。)


Visual Studio Code 插件请用 Rust,而不是停止维护的 Rusty Code

不过其实现在不管是 RLS 还是插件都是不是特别完善的状况,会遇到一些问题,但总体上还是绝对可用的。

调试

之前忘了写重要的调试,更新一下。Mac 上调试我遇到了不少问题,没跑通……。

以 Visual Studio Code 为例,有两个插件可供选择:Native Debug LLDB Debugger

以后者为例,launch.js 文件如下

{
    "version": "0.2.0",
    "configurations": [

        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceRoot}/target/debug/<BINARY NAME>",
            "args": [],
            "cwd": "${workspaceRoot}",
            "sourceLanguages": ["rust"]
        }
    ]
}
编辑于 2017-05-22

文章被以下专栏收录