Talent Plan 之 Rust 网络编程入门

引言

本节将开始「Talent Plan 之 Rust 网络编程实践」系列课程学习啦,该系列课程的最终目标是使用 Rust 语言编写一个高性能的单机日志类型(log-structured) key/value 存储服务,分为客户端和服务端两个部分,并使用自定义的协议进行通信,能够使用命令行进行操作。

需要注意的是,该系列课程并非面向初级编程爱好者。参与该系列课程学习和实践前,最好已经有过其它语言编程经验,并且对 Rust 语言有基本了解,写过一些 Rust 代码。笔者强烈建议阅读 The Rust Book 或者《Rust 编程之道》这样的书籍来打好基础。Rust 中引入的所有权、生命周期等概念需要转变思维来理解它,这样才能更好地领悟到这门语言的精髓。

大纲

以下是 Rust 网络编程实践课程大纲,总共分为六个部分(最后一个部分还没完成),循序渐进地引导我们阅读一些博客,掌握最佳编程实践,通过不断实践来加深对这门语言的理解。

课程大纲

学习姿势

GitHub talent-plan 仓库中存放了课程中安排的编程项目,位于 /rust/projects 目录下。这里的每一个项目都是基于前一个项目进行改造的,在每个项目中都会增量应用一些新的 Rust 知识,比如学习引入第三方 crates,使用标准网络库,使用多线程编程改进服务性能等。

在进行每个项目实践之前,会有一个针对性的 Building Block,可以看成是一些预备知识。在预备知识中,会针对和接下来要实践的项目有关的话题,提供一些阅读材料和练习题,在阅读完成后可以通过练习题巩固下学习到的知识,这样在进行项目实践时会更加得心应手,提升效率。

开发环境准备

我们可以通过 rustup 管理 Rust 版本及相关的工具链。如果还没有安装 Rust 编译器,可以通过下面的命令行完成(Linux 或者 macOS 环境):

1
$ curl https://sh.rustup.rs -sSf | sh

rustup 工具会为我们安装最新稳定版本的 Rust 编译器。之后也可以通过 rustup update 进行版本更新,或者使用 rustup self uninstall 完成 Rust 编译器和 rustup 卸载。详细操作不再赘述,可参见 Rust Getting Started

下面笔者将要安利两款神器级插件,便于提升 Rust 编程体验。早期的 Rust IDE 支持比较差,明显没有其它语言在 IDE 中体验舒服(笔者曾经在 Clion 中尝试 Rust 插件,但是效果欠佳)。不过社区一直都在努力改进这一点,下面介绍下笔者的开发环境,仅供参考。

  1. Rust 版本:1.42
  2. 代码编辑器:Visual Studio Code
  3. 插件:
    1. rust-analyzer:这个是用来替代 RLS(Rust Language Server)的实验产品,目标是提供更加优秀的 IDE 功能支持。目前虽然处于 alpha 阶段,不过相对已有的其它插件,已经非常实用了。支持代码自动补齐、文档提示、函数实现跳转、main 函数识别、单元测试识别等。推荐使用~
    2. TabNine:这是一款智能代码自动补全工具,采用深度学习技术加速代码编写,支持主流编程语言。值得一提的是,TabNine 服务本身是使用 Rust 编写,所以它的很多付费功能都是对 Rust 语言开放的,所以尽管使用吧。

开发环境

关于调试

掌握调试技能,对于排查程序问题非常有帮助。那么如何在 Visual Studio Code 中调试我们的 Rust 项目呢?下面将以一个简单的例子来演示下如何进行调试。

首先,在工程目录下新建一个示例项目 cargo new miao,然后输入如下代码,并执行 cargo build,生成的可执行文件位于 target/debug 目录下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
fn main() {
assert_eq!(binary_search(vec![1, 2, 3, 4, 5, 8], 10), -1);
assert_eq!(binary_search(vec![1, 2, 3, 4, 5, 8], 1), 0);
}

fn binary_search(nums: Vec<i32>, target: i32) -> i32 {
if nums.len() == 0 {
return -1;
}

let mut left = 0;
let mut right = nums.len() - 1;

while left < right {
let mid = left + (right - left) / 2;
if nums[mid] == target {
return mid as i32;
} else if nums[mid] < target {
left = mid + 1;
} else {
right = mid - 1;
}
}

-1
}

接下来,点击 vscode 左侧工具栏中的「调试」按钮,并且点击「create a launch.json file」按钮,创建启动配置文件。在弹出的候选框中选择「C++ (GDB/LLDB)」。
create launch json

紧接着,编辑生成的 .vscode/launch.json 文件,修改其中的程序启动配置,即 configurations.program 指向可执行文件 ${workspaceFolder}/target/debug/miao
edit launch json

接下来,在代码中添加断点,然后执行 cargo build(默认会以 debug 模式构建),最后启动调试即可。

当然,也可以使用命令行工具 rust-lldb 执行调试,感兴趣的话,可以前往 Rust LLDB 调试入门指北 了解更多细节。

小结

本节对「Talent Plan 之 Rust 网络编程实践」系列课程进行了简单介绍,了解课程的具体安排,并在最后给出了 Rust 开发环境搭建的一些参考。

参考

0%