在多年的 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 频道上寻求了一些帮助。 (你可能想注册 通用 Slack Rust 频道,那里住着一些我认识的人。) 许多人对哪里出错了提出了一些建议,其中一个人在剖析一些建议方面非常有帮助,所以我更好地理解了它们。 他解释了很多,但最后说,“我不知道你调用的哈希函数的返回类型——我认为这是一个好地方,让你自己弄清楚这部分。”
这就是我试图达到的目标
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 咳嗽
本文基于 更多 Rusty 的想法 ,来自 Alice, Eve and Bob – 一个安全博客,并已获得许可重复使用。
10 条评论