在多年的 Java 开发之后,我最近开始学习 Rust。 让我不断想到的五点是
- Rust 感觉很熟悉
- 引用很有意义
- 所有权将变得有意义
- Cargo 很有帮助
- 编译器非常出色
我绝对坚持所有这些观点,但我还有更多要说的,因为我现在感觉自己像一个 Rustacean1 ,因为
- 我感觉再也不想用其他任何语言编程了。
- 我已经摆脱了简单的咒语。
我这两个说法是什么意思? 嗯,第一个很简单:Rust 给人的感觉是未来的方向。它结构良好、富有表现力,它帮助你做正确的事情,2 它有出色的文档和工具,并且有一个很棒的社区。 当然,这一切都是开源的,这正是我非常关心的事情。
这是一个关于如何使用 Rust 的示例
// Where checkhashes is pre-defined vector of hashes to verify
let algorithms = vec![String::from("SHA-256"); checkhashes.len()];
这将创建一个名为 “algorithms” 的新向量,其长度与向量 “checkhashes” 相同,并用字符串 “SHA-256” 填充它。第二个呢? 嗯,我决定为了正确学习 Rust,我应该选择一个最初用 Java 编写的项目,并希望以相当地道的 Rust 重新实现它。 不久之后,我开始修复错误——并犯错误——围绕实现而不是围绕语法。 而且我不仅仅是从教程中复制文本,或者根据编译器输出对我的代码进行看似随机的细微更改。 换句话说,我让事情编译,理解它们为什么编译,然后只是犯编程错误。3
这是另一个示例,它应该会感觉很熟悉
fn usage() {
println!("Usage: findfromserial KEY_LENGTH INITIAL_SALT CHECK_HASH1 [CHECK_HASH2, ...]");
std::process::exit(1);
}
这是一个巨大的进步。 当你开始学习一门语言时,很容易只是复制和粘贴你在其他地方看到的文本,或者摆弄不熟悉的结构,直到它们——勉强——工作。 使用你不真正理解但似乎可以工作的代码或生成代码有时被称为“使用咒语”(来自小说、电影和游戏中的大多数魔法师背诵“只是工作”的魔法词集合,而没有真正理解他们在做什么或单词组合实际上意味着什么的想法)。 有些语言4 特别容易出现这种方法,但是许多——大多数?——学习一门新语言的人在刚开始时都容易这样做,仅仅是因为他们希望事情能够工作。
最近,我熬夜到凌晨 1 点来实现一个新功能——接受命令行输入——我真的无法理解。 我花了很多时间在这上面(包括寻找——但未能找到——一些合适的咒语),然后在内部 rust-lang 频道上寻求了一些帮助。 (您可能想注册 general Slack Rust channel,那里住着一些我认识的人。) 很多人对哪里出错了提出了一些建议,其中一个人在剖析一些建议方面非常有帮助,所以我更好地理解了它们。 他解释了很多,但最后说,“我不知道你调用的哈希函数的返回类型——我认为这是一个好地方,让你自己弄清楚这部分。”
这是我试图达到的目标
checkhashes = std::env::args()
.skip(3)
.map(|x| hex::decode(x))
.collect::<Result<Vec<Vec<u8>>, _>>()
.unwrap();
在您理解它之前,它可能看起来很奇怪,但它实际上按您的预期工作:我想从命令行获取输入,跳过前三个输入,迭代其余的输入,将每个输入转换为 u8 向量,并创建一个这些向量的向量。 “collect” 调用末尾的 _
会吸收任何错误或问题,并基本上将它们丢弃。
这正是我所需要的,也是任何学习任何东西(包括编程语言)的人所需要的。 因此,当我在午夜不得不下楼放狗出去时,我决定留在楼下,看看我是否可以自己解决问题。 而且我做到了。 我采纳了人们提出的建议,理解了他们在做什么,试图推测他们应该做什么,弄清楚他们应该如何做,然后找到了实现它的正确方法。
我还有很多东西要学习,我仍然会犯很多错误,但我现在感觉自己可以找到解决这些错误的方法(可能需要一些帮助——感谢所有已经为我指明正确方向的人)。 但我确实感觉我现在实际上是在用 Rust 编程。 而且我喜欢它。
- 这就是 Rust 程序员对自己的称呼。
- 几乎不可能完全阻止人们做错事,但鼓励人们做正确的事是很棒的。 事实上,Rust 更进一步,实际上使在许多情况下做错事变得困难。 你真的必须非常努力才能在 Rust 中做坏事。
- 例如,我在我的代码中发现了一个特别离谱的差一错误,这与 Rust 无关,而与我没有足够关注程序流程有关。
- 咳嗽 Perl 咳嗽
本文基于 More Rusty thoughts 在 Alice, Eve and Bob – 安全博客上发布,并经许可重复使用。
10 条评论