如何在Rust中获取源代码的哈希值

3
为了检查客户端和服务器之间的兼容性,我想比较它们共享代码的版本。我已经通过一个build.rs实现了这一点,它创建了src/下所有文件内容的哈希值,但这似乎很脆弱。我想确保计算的哈希值是实际用于构建的文件。肯定在构建过程中的某个时候已经完成了此操作。
有一个功能Add hash of source files in debug info,听起来很有前途,但它将数据添加到调试信息中,我想在运行时获取它。

1
请注意,仅计算源代码的哈希值是不够的,至少在一般情况下是这样:过程宏可以扩展为任何它们想要的东西,即使调用站点(被哈希的站点)没有更改,也可能不稳定。正如下面的答案建议的那样,我会选择语义版本控制,因为它被广泛使用,不是因为它是最好的解决方案,而是因为它是最不坏的解决方案之一。还有一个名为built的工具,它可以为您提供构建的git提交ID以及指示工作目录是否干净的指示。 - user2722968
1个回答

2
如果您想检查兼容性,那么恐怕仅检查您的源代码是不够的(至少这并非总是正确的)。您可能依赖于某个箱子来实现某些功能,如果更改其版本,它可能仍然失败。
因此,如果您想使用哈希路线,则需要对整个项目进行哈希处理,包括Cargo.lock文件。是的,您确实可以通过build.rs脚本完成。
但是,我不会选择这条路。
通常使用版本号来解决这个问题。在Rust中,您应该使用语义化版本控制。使用这个系统,您可以从数字中看出两个箱子版本是否兼容。

1
在这种情况下,我认为更新依赖关系不会造成破坏,因此检查我的代码应该就足够了。这并不是一个超级安全的检查;而是避免在开发过程中出错的一种方式。在开发过程中每次可能会破坏的更改都增加一个版本号,听起来对于这个目的来说太麻烦了。 - Martin Vilcans
在实践中,我认为这并不难做。当然,这取决于你发布的频率。 如果你在git中有一个良好的设置并进行拉取请求,那么无论如何都是一件好事。 所以我的建议是尝试“正常”的方式。如果你不喜欢它,你总可以尝试对项目进行哈希处理。 - Geoxion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接