【Rust日报】2023-10-24 一位 Python 开发者学习 Rust 的心路历程

2023-10-25 20:33:25 浏览数 (2)

一位 Python 开发者学习 Rust 的心路历程

我对学习一门新语言一直犹豫不决。在我的职业生涯中,我大部分时间都使用Python。当需要时,我也会使用诸如PowerShell、Lua和Javascript等语言,但我总是回到我熟悉的领域。我在大学之外从未使用过编译语言或系统语言,现在是时候重新学习一门新语言了。

我一直在学习 Go 和 Rust 之间犹豫不决,同时也在思考是否真的需要转向其他语言,因为我在 Python 方面从未遇到过让我不得不转换的难题。Rust 在速度和安全性方面一直名列前茅,并且根据 Stack Overflow 的调查,它也是最受欢迎的编程语言之一。

我真正被激发去深入学习Rust的原因是听了《Ship It》播客,Tim McNamara 在其中谈到他如何在 AWS 推广 Rust。Rust 不仅仅能节省计算资源,还能提高可持续性,节约资金。通过观察 Lambda 的冷启动时间,并推断出所有可能受益的资源,将会大大减少所需资源的数量。

然后我开始了一场学习之旅.

ReadMore: https://blog.erikhorton.com/2023/10/22/skills-getting-rusty.html

从 Vec<Result<>> 中生成 Result<>

假设你有一个可能失败的函数,并且你调用它多次。类似这样的情况:

代码语言:javascript复制
fn fetch_chunk(from: usize, to: usize) -> Result<Row, Error> {
    // 一些实现
}

当我们调用它时,如果直接收集结果,我们会得到一堆 Result

代码语言:javascript复制
let chunks: Vec<Result<Row, Error>> =
    indexes.iter().map(|i| fetch_chunk(i, i 1)).collect();

这样处理起来有点丑陋。在很多情况下,这可能确实是你想要的类型,因为你可以知道哪些操作失败了。但有时,你只想知道是否有任何失败,那么你可以直接将结果收集到一个 Result

代码语言:javascript复制
let chunks: Result<Vec<Row>, Error> =
    indexes.iter().map(|i| fetch_chunk(i, i 1)).collect();

这是几乎相同的代码,只是有不同的类型签名,并且收集到不同的类型中。这真是太酷啦。

ReadMore: https://ntietz.com/blog/rust-vec-of-result/

0 人点赞