I/O 项目:构建命令行程序
本章是对您目前为止学到的许多技能的回顾,并探索一些更标准的库功能。我们将构建一个命令行工具,该工具与文件和命令行输入/输出进行交互,以练习您现在掌握的一些 Rust 概念。
Rust 的速度、安全性、单一二进制输出和跨平台支持使其成为创建命令行工具的理想语言,因此对于我们的项目,我们将创建我们自己版本的经典命令行搜索工具 grep
(globally search a regular expression and print 的缩写)。在最简单的用例中,grep
在指定文件中搜索指定的字符串。为此,grep
将文件路径和字符串作为其参数。然后它读取文件,查找文件中包含字符串参数的行,并打印这些行。
在此过程中,我们将展示如何使我们的命令行工具使用许多其他命令行工具使用的终端功能。我们将读取环境变量的值,以允许用户配置我们工具的行为。我们还将错误消息打印到标准错误控制台流 (stderr
) 而不是标准输出 (stdout
),以便例如,用户可以将成功输出重定向到文件,同时仍然在屏幕上看到错误消息。
一位 Rust 社区成员 Andrew Gallant 已经创建了一个功能齐全、速度非常快的 grep
版本,名为 ripgrep
。相比之下,我们的版本将相当简单,但本章将为您提供一些背景知识,您需要这些知识才能理解像 ripgrep
这样的真实世界项目。
我们的 grep
项目将结合您目前为止学到的许多概念
- 组织代码 (第 7 章))
- 使用 vectors 和 strings (第 8 章))
- 处理错误 (第 9 章))
- 在适当的地方使用 traits 和 lifetimes (第 10 章))
- 编写测试 (第 11 章))
我们还将简要介绍 closures、iterators 和 trait objects,这些内容将在 第 13 章 中详细介绍和 第 18 章中详细介绍。