[8.17](backport #6192) Use xxhash instead of sha256 for hashing AST nodes #6252
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does this PR do?
We currently use sha256 for hashing AST nodes when generating configuration. This is used both for checking equality between AST instances and for avoiding recomputing inputs unnecessarily. This PR changes this to xxHash, which is much faster. It also changes the interface, letting the caller supply their own hasher instance, and avoiding needing to allocate one for each Node in the tree.
Of note is that I'm using the
xxhash.Digest
struct as an argument instead of the generichash.Hash64
interface from the standard library. The reason is that the former has an optimizedWriteString
method, which avoid needing to cast the string to a byte slice. I also don't expect to need to actually supply different hash implementations to this method.Note also that there's already fairly exhaustive tests for this, some unexpected behaviour included.
Why is it important?
It's a pretty significant performance improvement. See the benchstat results using the benchmark from #6180:
Checklist
./changelog/fragments
using the changelog toolRelated issues
This is an automatic backport of pull request #6192 done by [Mergify](https://mergify.com).