我是 Rust 的新手,我一直在重新解决 Project Euler问题。问题是,我意识到我一直在强制转换整数类型(主要是 i32
-i64
)以适合我的陈述; for 迭代器、in 循环、for 函数输入、for 条件等等。这正常吗?
我猜我在处理通过 PE 并主要来自动态类型语言的一次性函数时做错了什么。
我总是尝试使用尽可能小(或最可行)的整数类型来解决问题,我觉得我应该对所有事情都使用 i64
并完成它而不是那么多转换周围。
哪个是更好/推荐的方法,一揽子 i64
类型或在代码中强制转换的合理整数类型?
编辑:在我想澄清的评论之后,这不完全是代码审查查询,而是关于最佳实践和可读性问题,因为这两个选项中的哪一个是首选。我认为如果不在循环中滥用,转换对性能的影响可以忽略不计。
不相关的 PS:我在做 P4 时用了一些质因数,结果发现没有回文是两个 4 位素数的乘积,而两个 3 位素数中最大的一个是 99899
最佳答案
I always try to use the smallest possible (or most feasible) int type for the problem
给你。优化。 (否则你为什么要这样做?)
Rust 鼓励您考虑整数类型。这会导致更好地定义和明确的程序行为,有助于捕获特定类型的错误并让您进行优化。
但是来自一种不那么细致的语言,您可能会过度使用它。这就是我们的思维通常的工作方式:当我们遇到一些新的能力或技能时,我们会尝试在任何地方使用它。
这通常是 Rust 的问题。该语言会向程序员介绍某些新概念(安全借用、零成本 future ),然后作为人们,我们会匆匆忙忙地把我们几乎没有经验的东西混在一起,把自己借到一个角落,或者在任何地方都使用 future 。
您正在尝试使用尽可能小的整数类型来优化您的程序,尽管您觉得这会让您的生活变得不那么舒适。如果你在 stackoverflow 上问这个问题,那么我会大胆地说,是的,你转换太多了!
您可能知道 Knuth 的格言,“过早的优化是万恶之源”。
不要让过度优化毁了您的编程体验。只有当你觉得舒服时才进行优化。当你想要时!
如果您害怕过早悲观,那么请将这种恐惧留给算法。请记住,使用大多数动态语言进行编程时,您没有太多的自由来过度优化,但您的动态语言程序仍然有效。
关于casting - 我是否过多地转换了整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43481325/