Rust 历险记 小代码建议 #1

2025-05-28

Rust 历险记

小代码建议 #1

Rust 诞生后的几年里,我经常会解释 Rust 是一门多么神奇的语言,阐述它将如何改变系统编程世界,以及用 Rust 编写代码是多么令人愉悦。

几个月前,我终于抽出时间尝试了一下。结果糟透了。该死的借用检查器什么都不让我做。我什么有用的代码都编译不出来。尽管用各种语言编程多年,我还是觉得自己完全无力应对。我决定放弃 Rust,专注于其他事情。

尽管最初感到失望和沮丧,我还是无法忘掉 Rust。它的前提太有前途了,让人看了就舍不得放弃。再说,任何编程语言都无法打败我!不过,它还可以等。现在的工作量太大了。也许几年后,我会写 Rust。

然而,使用 Rust 的体验却截然不同。Rust 工具简直太棒了。作为一个彻头彻尾的 Windows 用户,我已经习惯了开源工具(尤其是命令行工具)在 Windows 上不受支持。(不,Cygwin 不是一个有效的解决方案。)我不怪开发者——他们在 Linux 上工作。即使他们有时间花在 Windows 移植上,他们也不一定有 Windows 机器来测试。然而——我已经习惯了失望。这就是为什么,当我第一次听说rg(一个很棒的grep替代品)和fd(一个很棒的find替代品)时,我就知道它们在 Windows 上无法运行。但是,出于乐观的心态,我还是检查了一下。幸好我这么做了。

要安装 Rust 工具,最简单的方法是安装 Rust 工具集并进行编译。在其他语言中这都是一项艰巨的任务,但在 Rust 中却轻而易举。

  1. 前往rustup.rs并安装 Rust(Linux 上单个命令行,Windows 上单个可执行文件)
  2. cargo install ripgrep fd-find
  3. 就是这样。真的。现在使用工具吧。

正是在那时,我意识到 Rust 的神奇之处。即使完全忽略这门语言本身,它的工具和包管理功能也无与伦比。我之前发布过 Python 包,它简洁的发布和安装机制让我惊叹不已。而之前用过 C 和 C++ 的我,对一个带有包管理功能的系统编程更是赞叹不已。所以,尽管我仍然对 Rust 的借用检查器有些畏惧,但我还是决定我的下一个 CLI 工具将用 Rust 编写。如此轻松的部署过程就此彻底结束。

几个月后,我终于发现自己需要一个新的 CLI 工具。我面临一个连续的日志,我想过滤掉重复项。sort -u排序,所以它不能在流上工作。当然,可能有一些我可以使用的方法sedawk魔法,但我想要一些简单的东西。此外,一个过滤掉重复项的工具似乎是开始使用 Rust 的完美初学者项目。所以我继续创建uq。完成后,我在crates.io上发布了它。cargo install uq在第二台机器上,它起作用了。Windows 和 Linux 都适用。一个朋友试了一下,它真的有效!我从来没有过如此愉快的部署经历。从源代码安装实际上比发送编译后的二进制文件更容易!而且它开箱即用,跨平台工作。

不久之后,我想用正则表达式对一些日志条目进行分组。我四处寻找,却找不到简单的方法。所以,我又一次转向了 Rust。一番折腾之后,第一个版本groupby终于完成了。耶!

不久之后,我经历了人生中最棒的开源体验之一。有人开始使用groupby,查看了我糟糕的代码,并发布了这个问题:

小代码建议 #1

你好

我发现这个小程序对我做的很多事情都很有用(我通常结合使用 sed、sort 等来做类似的事情)。我也研究了代码。我猜你还在学习 Rust,对吗?能给我一些小建议吗?

  • 我瞥见至少一个可以通过用户输入触发的展开(给出太大的组 ID),这将导致丑陋的错误消息而不是有用的消息。
  • 你选择BTreeMap/BTreeSet是出于什么特殊原因吗?是因为元素的顺序吗?如果不是,HashMap那么 andHashSet可能会更快。
  • 两种变体(unique 与 all)看起来非常相似,仅在内部数据类型和用于push/ 的方法上有所不同insert。我认为只需一段对该类型通用的代码,然后添加您自己的特征来实现添加操作即可。您想让我向您展示这样的代码吗?

能有一位 Rust 经验丰富的人来帮我改进我那非常幼稚的代码真是太好了。而且这是我第一次收到“这太棒了,我能帮你吗?”这样的评论,而不是“这太棒了,我也想要这个”这样的评论。

目前,我花在 Rust 借用检查器上的时间比实际编写代码的时间还多。但我(几乎)确信这是由于缺乏经验造成的。好的一面是,我在检测其他语言的生命周期问题方面也做得越来越好了。

所以,对于还没有尝试过 Rust 的人,我强烈推荐使用基于 Rust 的工具。就为了享受开箱即用(和编译!)的奇妙体验。之后,如果你选择真正使用它来编写代码,一定要做好迎接一些坎坷的准备。朋友们告诉我,用一段时间后,Rust 会变得更容易,从而加快他们的开发速度。我还没达到那种程度,但我正在努力。

文章来源:https://dev.to/tmr232/adventures-in-rust-56fc
PREV
PublishTo.Dev:安排在 dev.to 上发布文章
NEXT
我爱上的 VSCode 扩展