Rust #1:创建你的开发环境

2025-06-08

Rust #1:创建你的开发环境

概述

这篇博客旨在记录我使用 Rust 的心得体会。我从事电子游戏程序员超过 25 年,因此一直将 C++ 作为我的主要编程语言,甚至用于个人项目。自从发现并学习 Rust 以来,我再也不会主动接触 C++ 了。我只会在日常工作中使用 C++,仅此而已。在我看来,Rust 已经让 C++ 在编写新软件方面变得多余。

在过去的几个月里,我成功地完善了我的 Rust 编程开发环境,并想分享我的方法。这就是我的第一篇文章的主题——如何搭建一个高效的 Rust 编程开发环境。

先决条件

我假设读者熟悉终端(或 Shell)。也就是说,他们知道如何通过终端创建文件夹、设置当前文件夹以及启动命令。

我还假设读者之前有过编程经验,可能是 C、C++ 或类似的语言。这些指南不会教你如何编程,而是如何将你现有的编程技能运用到一门新的语言中。

您还需要互联网连接。Rust 构建系统会不断从万维网下载软件包(称为 crate)。

安装 Rust

安装 Rust 的最佳方法是使用工具Rustup。Windows 用户需要下载可执行文件,但对于具有更合理命令 shell 的操作系统,只需执行一次剪切和粘贴即可。

跳转到http://rustup.rs并按照说明操作。rustup-init.exe在 Windows 上运行可执行文件,或在其他操作系统上执行 shell 命令后,您将看到一个全屏文本和 3 个选项:

图像

继续选择选项 1,这样 Rust 及其相关工具就安装完成了。为了确认,请打开你常用的终端并输入:

$ rustc --version
Enter fullscreen mode Exit fullscreen mode

如果一切顺利(我希望如此,因为否则本指南不会对您有帮助),您应该会看到类似以下内容:

rustc 1.53.0 (53cb7b09b 2021-06-17)
Enter fullscreen mode Exit fullscreen mode

安装过程涉及rustup下载和安装“组件”。您可能看到正在安装的组件包括:

  • cargo - 终极、超强的打包/构建/执行一切操作的工具,将成为您 Rust 编程体验的中心。
  • clippy - 这是一款 linting 工具,可以扫描你的代码并提出改进建议或发现问题。这是你工作流程中不可或缺的一部分。
  • rust-docs - 一个 Cargo 插件,可以从源代码自动生成文档。如果你熟悉 Doxygen,它与它类似。
  • rustc - 编译器,nuff 说!
  • rustfmt - Rust 非常规范的代码格式化程序。它会根据一套标准自动格式化你的代码,以便每个人的 Rust 代码看起来都一样。一开始可能会有点烦人,但只要坚持使用,你就能从中受益。

你的第一个 Rust 程序

让我们尝试一下必备的 Hello World 程序。有了 Cargo,您无需输入任何代码即可完成!大多数指南会演示如何使用,rustc但您无需直接操作。您将使用 Cargo 来检查、构建、测试、基准测试和运行代码以及执行许多其他操作。因此,请跳转到您最喜欢的终端,cd进入您为 Rust 开发预留的文件夹(我使用 Windows,因此我选择的文件夹是r:\),然后输入:

$ cargo new hello
$ cd hello
Enter fullscreen mode Exit fullscreen mode

您将收到一条消息,告诉您已经创建了一个名为“hello”的二进制包。

让我们看看你刚刚创建的文件夹。首先,你会看到一个Cargo.toml文件。它向 Cargo 提供了如何构建项目的信息以及其他元数据(例如作者、版本等)。我们稍后会介绍这一点。

其次,有一个与 相关的隐藏文件和目录git,它是大多数 Rust 程序员使用的默认源代码控制系统。您可以将其切换到 Mercurial 或其他版本。要了解相关信息,请快速访问https://doc.rust-lang.org/cargo/commands/cargo-new.html并查看其--vcs命令行选项。在本指南中,我将忽略该文件和文件夹。

最后,有一个src文件夹,里面存放着你所有的 Rust 源代码。如果你查看里面的内容,你会看到一个名为 的文件main.rs。让我们来查看一下。你可以使用typeWindows 系统或cat其他操作系统来显示 的内容src/main.rs

fn main() {
    println!("Hello, world!");
}
Enter fullscreen mode Exit fullscreen mode

hello world 程序已经写好了,感谢 Cargo 的帮助。我们来看一下代码:

  • fn标记一个函数的开始,在本例中定义了名为 的函数main。所有 Rust 应用程序都从此函数开始,就像 C/C++ 一样。如果您使用 Cargo 构建(我们将使用 Cargo),则文件main.rs夹根src目录中也必须有一个文件。它后面的括号通常包含参数(我们目前没有),该函数的代码位于大括号之间。如果您熟悉 C、C++、C#、JavaScript 等语言,那么您会对这一切感到熟悉。
  • println!会将文本打印到标准输出。名称中的感叹号表示它println!不是一个函数,而是一个宏。它类似于 Lisp 中的宏,而不是那些无用的 C 风格宏。Rust 可以在编译期间生成代码。在本例中,println!它将根据其参数扩展为多个语句,这些语句将插入到调用点。

好的,让我们运行它。输入:

$ cargo run
   Compiling hello v0.1.0 (R:\hello)
    Finished dev [unoptimized + debuginfo] target(s) in 1.11s
     Running `target\debug\hello.exe`
Hello, world!
Enter fullscreen mode Exit fullscreen mode

这将编译并运行代码。精明的你会注意到出现了一个名为 的新文件夹target。深入挖掘,你会看到一个debug文件夹。最后,你会在里面看到hello.exe你刚刚构建的 ,以及刚刚运行的 Cargo。

事实上,‘Hello, world!’ 消息之前的编译器输出描述了您刚刚构建的应用程序的类型(未优化并包含调试信息)以及在哪里可以找到它。

我们也可以构建并运行一个优化的:

$ cargo run --release
   Compiling hello v0.1.0 (R:\hello)
    Finished release [optimized] target(s) in 0.66s
     Running `target\release\hello.exe`
Hello, world!
Enter fullscreen mode Exit fullscreen mode

以下是一些值得了解的其他 Cargo 命令:

  • cargo build- 这只会构建最终的可执行文件。cargo run如果需要,将会隐式调用它。
  • cargo clean- 这将删除该target文件夹及其中生成的所有文件。
  • cargo checkcargo build- 在编写代码时很有用。这会编译你的代码,但不生成代码。这比你只想检查语法错误时快得多,而且很有用。由于我稍后会演示的 IDE 集成非常出色,所以很少需要这样做。

还有一点,在构建可执行文件后,Cargo.lock还会出现一个文件。生成此文件是为了锁定您可能用于构建程序的其他软件包的版本。这允许 Rust 编译器在清理后重新创建完全相同的可执行文件。它确保下载、构建和链接到您的应用程序的软件包版本与之前相同。目前,我们不使用软件包,因此此文件包含的信息很少。如果您使用源代码管理(例如 Git),则应在提交时将此文件与Cargo.toml您的源代码一起包含。

编辑

开始学习 Rust 的第二步是设置合适的编程环境,以最大限度地减少你和工作之间的摩擦。这个决定的关键在于使用哪种编辑器。我尝试过用 Emacs、Vim 和 Sublime 编写 Rust 代码,但最终选择的文本编辑器是Visual Studio Code。对我来说,它是微软迄今为止最好的产品。

为什么选择 Visual Studio Code?在我看来,它拥有最成熟的 Rust 代码编写工具,以及与 Rust 生态系统和构建工具(例如 Cargo)交互的工具。

因此请前往https://code.visualstudio.com/并下载并安装它。

重新启动终端,然后输入:

$ code .
Enter fullscreen mode Exit fullscreen mode

瞧瞧:

图像

终端很好用,就是打字太麻烦了。难道我们写代码还不够吗?那就试试能不能用 Visual Studio Code(以下简称 VS Code)来构建。目前还不行,因为需要扩展。

VS Code 扩展

要将 VS Code 变成强大的 Rust 编辑器,我们需要安装一些扩展。点击左侧的第 5 个图标(它看起来像 4 个正方形,其中一个正方形偏移),即可打开扩展界面。使用搜索框查找下面列出的所需扩展,然后点击扩展条目旁边的蓝色“安装”按钮:

  • rust-analyzer - 为 Rust 和许多其他与 Rust 相关的实用程序提供“智能感知”。
  • C/C++ - 什么???你需要一个 C/C++ 扩展吗?是的,它包含调试器,可以用来插入断点和单步执行代码。你也可以使用,CodeLLDB但对我来说,这个C/C++更快。

此外,还有一些有用的扩展需要安装,虽然没有必要,但仍然非常有用:

  • 板条箱- 检查您引用的任何板条箱的版本(稍后会详细介绍)。
  • Markdown All in One - 你将编写多个 Markdown 文件(带有.md扩展名的文件)。此扩展使编写过程更加轻松,并提供了实用的预览模式。
  • 更好的 TOML - 一些编辑器支持编辑 TOML 文件,例如Cargo.TOML
  • Rewrap - 与 Rust 无关,但提供了重新格式化文本(在 Markdown 文件和 Rust 注释中)的功能,使其更适合行距。按下Alt+Q,您可以将几个长注释转换为几个适合屏幕大小的短注释。正如您最终将看到的,Rust 注释将在文档生成中发挥重要作用。

清空搜索框后,您将看到已安装的扩展程序。旁边的一些按钮可能会标有“需要重新加载”,如果出现此提示,请按下该按钮,几秒钟后即可重启 VS Code。

安装完成后rust-analyzer,您将看到窗口右下角弹出一个对话框。如果您错过了,请点击notifications窗口右下角的图标。它应该如下所示:

图像

点击“立即下载”按钮。如果没有看到,请重启 VS Code,它应该会再次显示。这将下载 Rust 语言服务器 (RLS),这是一个外部程序,可以分析你的源代码并通过扩展程序与 VS Code 进行通信,以显示有关你的程序的有用信息,包括自动完成功能。

下载完成后,“rust-analyzer”将开始查看你的代码。src/main.rs使用 VS Code 打开它,你会在函数上方看到两个新的链接main

图像

点击Run,VS Code 将构建并运行你的程序。你可以在自动打开的终端窗口中看到结果。

或者,您也可以点击Debug执行相同的操作。但是目前 VS Code 尚未正确设置调试。

在 VS Code 中调试

如果您以前没有使用过 VS Code,它可能没有设置断点等调试功能。因此,请按Ctrl+Comma打开 VS Code 的设置窗口。breakpoints在此窗口顶部的搜索栏中输入以下内容,并确保Debug: Allow Breakpoints Everywhere已选中:

图像

在设置窗口中,重新输入搜索参数formatter。确保Editor: Default Formatter设置为rust-analyzer并且Editor: Format On Save已勾选。这样,rustfmt前面提到的组件就能在您每次保存文件时发挥它的魔力。这真的是一个很棒的省时方法。您可以随意输入代码,但请记住,保存后所有内容都会移动到正确的位置,缺失的尾随逗号和空格也会被替换。

现在你已经完成了这些,你可以F9在编辑时点击,在当前行添加断点。现在尝试在println!中的语句上执行此操作src/main.rs

图像

点击“调试”,代码会在执行前停在当前行。点击F10跳过下一行,执行过程中会出现“Hello, world!”字样。点击F5继续运行,或Shift+F5完全停止调试。别忘了F9再次点击断点所在的行,移除断点!

VS Code 中的启动器和任务

代码中的这些链接非常方便,但需要先打开src/main.rs函数main才能看到它们。如果我们可以按下一个键就能运行或构建它,那不是更好吗?

第一步是强制 VS Code 一键构建你的源代码。按下 键F1即可调出命令面板,它是 VS Code 中的一个界面,包含所有你可以输入的命令。现在输入build,命令菜单就会缩减为几个条目,其中之一是Tasks: Configure Default Build Task

图像

选择它。将出现一个新菜单,其中包含可用的 Cargo 命令列表。我们要选择rust: cargo build。这将在你的项目中创建一个新文件,位于.vscode/tasks.json。此文件定义了一个 VS Code 可以运行的任务。它调用了cargo build它,仅此而已。但让我们对其进行改进。

首先,将label条目改短一些。你可以改成任何你想要的,但我通常改成build。稍后其他文件会引用它。

其次,我们希望 VS Code 中的终端窗口在每次启动构建时都清空,以便我们能够清晰地区分当前消息和之前构建的消息。在行尾添加一个逗号label,然后开始输入presentation。输入几个字符后,你应该会看到一个智能感知窗口打开,提示presentation。按下 ENTER 键,VS Code 就会自动完成输入。非常方便!现在将输入改为clear,而true不是false。最终版本应该如下所示:

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cargo",
      "command": "build",
      "problemMatcher": [
        "$rustc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "label": "build",
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": false,
        "panel": "shared",
        "showReuseMessage": true,
        "clear": true
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

现在,File > Preferences > Keyboard Shortcuts从菜单中选择并build在新键盘快捷键窗口的搜索栏中输入。

双击Keybinding显示 的那一行下方的列Tasks: Run Build Task。这将允许您将按键绑定到该命令。输入 ,然后F7ENTER,即可完成。VS Code 会警告您其他绑定使用了相同的按键,但请忽略这些按键,因为它们不会冲突。我选择了 F7,因为这是 Visual Studio IDE 中用于构建的常用按键,我已经习惯了。当然,您可以选择任何其他适合您的组合键。

测试一下!现在按下 F7(或你选择的任何组合键),VS Code 中的终端窗口就会清空,并开始构建!

现在,我们想让它在按下一个键时就能构建,然后按下另一个键时就能运行(构建后)。VS Code 已经F5为这个任务做好了准备,但目前还不知道如何操作。

点击 VS Code 左侧的第 4 个图标,它看起来像一个三角形,角上有一个虫子。点击后,你会看到一个带有大Run and Debug按钮的新界面(但不要按它!)。

图像

在该按钮下方,您应该会看到一个链接create a launch.json file。要一键运行程序,我们需要创建一个启动器。启动器是通过此launch.json文件配置的,因此请继续并点击该链接。您将看到一个对话框,要求您选择环境。

图像

C++ (Windows)如果您使用的是 Windows 系统并且使用了扩展名,请选择此C/C++选项,否则选择C++ (GDB/LLDB)其他选项。这将创建一个名为 的新文件.vscode/launch.json。和之前一样,让我们​​做一些修改:

  1. 将该值更改program${workspaceFolder}/target/debug/hello.exe。这需要与你正在运行的最终可执行文件相匹配。
  2. 更改console值,使其读取integratedTerminal并在末尾添加逗号。
  3. console在条目和添加逗号的原因之后,添加条目"preLaunchTask": "build"。这一行引用了您在 中输入的标签文本tasks.json。它们必须匹配。这一行告诉启动器确保首先运行构建任务。我们想要运行程序的最新版本,不是吗?

最终结果将是:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(Windows) Launch",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${workspaceFolder}/target/debug/hello.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "preLaunchTask": "build"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

按下F5,启动器就会运行。你应该会在终端中看到构建消息以及程序的输出。

我偶尔会看到 VS Code 遇到这个问题。如果无法运行,请检查你的tasks.jsonlaunch.json文件,然后cargo clean在项目文件夹中的终端运行。

编译器错误

这篇博客现在有点长了,所以最后还有一件事要说。如果你的代码中出现错误,会发生什么?好消息是,rust-analyzer扩展程序和 VS Code 会协同帮助你解决问题。让我们在代码中添加一个错误。在println!语句之后,添加一个新的:

fn main() {
    println!("Hello, world!");
    foo();
}
Enter fullscreen mode Exit fullscreen mode

然后点击“保存”(Ctrl+S)。rust-analyzer通常只有在保存后才能看到更改。现在错误出现在程序中,如果不构建多个程序,就会发生以下情况:

  1. 下方会出现一条红线foo。将鼠标指针移到红线上方,您将看到一个弹出窗口描述错误。
  2. 查看编辑窗口上方的选项卡,您会看到文件名已变为红色,后面跟着一个数字。(还有一个字母 U,但它与源代码控制有关,所以请忽略它)。这个数字表示错误数量。选项卡文本也可能变为黄色,这意味着有警告但没有错误。这次,数字表示警告数量。您可以一目了然地看到程序中有多少错误。
  3. 在窗口的滚动条上,你会看到一个小红色标记。这大致显示了错误的位置。
  4. 如果您的终端窗口仍在 VS Code 中打开,您将在Problems选项卡旁边看到一个数字。在此选项卡中,您将看到错误列表。单击它们即可跳转到出现错误的代码行。

哇,这么多线索表明你的程序出了问题。现在按下构建键来运行构建任务(记住我的是F7)。在Terminal下面的选项卡中,你会看到编译器的输出。它通常比其他地方的错误信息更清晰:

图像

Rust 提供了史上最棒的错误信息!你甚至可以在终端输入rustc --explain E0765,按照说明操作,更详细地解释上面的错误。真是太棒了!

概括

讲了这么多,确实有点费劲。不过我们安装了 Rust 及其相关工具,安装了 VS Code 并扩展了它以支持 Rust,然后演示了如何使用 VS Code 构建和运行程序。

第二部分将讨论借用检查器、所有权、生命周期以及所有这些精彩内容。到时候见!

鏂囩珷鏉ユ簮锛�https://dev.to/cthutu/rust-1-creating-your-development-environment-55bi
PREV
Angular Dashboard🅰️ 带有 Material Analytics 的后端,带有 Cube.js 的前端应用程序交互式仪表板,带有多个图表的多页仪表板,带有数据表
NEXT
什么是 Webpack 什么是 Webpack