Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Hash and Eq from AstNodeRef for types not implementing Eq or Hash #16100

Merged
merged 3 commits into from
Feb 11, 2025

Conversation

MichaReiser
Copy link
Member

Summary

This is a follow up to #15763 (comment)

It reverts the change to using ptr equality for AstNodeRefs, which in turn removes the Eq, PartialEq, and Hash implementations for AstNodeRefs parametrized with AST nodes.
Cheap comparisons shouldn't be needed because the node field is generally marked as [#tracked] and #[no_eq] and removing the implementations even enforces that those
attributes are set on all AstNodeRef fields (which is good).

The only downside this has is that we technically wouldn't have to mark the Unpack::target as #[tracked] because
the target field is accessed in every query accepting Unpack as an argument.

Overall, enforcing the use of #[tracked] seems like a good trade off, espacially considering that it's very likely that
we'd probably forget to mark the Unpack::target field as tracked if we add a new Unpack query that doesn't access the target.

Test Plan

cargo test

@MichaReiser MichaReiser added internal An internal refactor or improvement red-knot Multi-file analysis & type inference labels Feb 11, 2025
Copy link
Contributor

@carljm carljm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, modulo the one inline question.

To be clear, my comment wasn't intended to suggest that I think it's important we make this change; I was just curious what the tradeoffs are and if there was anything we should document for future.

@MichaReiser
Copy link
Member Author

Hmm, it does seem that this regresses performance slightly (2%) for the cold case. Let me re-run to verify that it is real. It might just be the cost of tracking the Unpack::target field.

@MichaReiser MichaReiser merged commit 9c17931 into main Feb 11, 2025
21 checks passed
@MichaReiser MichaReiser deleted the micha/revert-astnoderef-eq-hash-change branch February 11, 2025 18:55
dcreager added a commit that referenced this pull request Feb 11, 2025
* main:
  add diagnostic `Span` (couples `File` and `TextRange`) (#16101)
  Remove `Hash` and `Eq` from `AstNodeRef` for types not implementing `Eq` or `Hash` (#16100)
  Fix release build warning about unused todo type message (#16102)
  [`pydocstyle`] Handle arguments with the same names as sections (`D417`) (#16011)
  [red-knot] Reduce usage of `From<Type>` implementations when working with `Symbol`s (#16076)
  Transition to salsa coarse-grained tracked structs (#15763)
  [`pyupgrade`] Handle micro version numbers correctly (`UP036`) (#16091)
  [red-knot] `T | object == object` (#16088)
  [`ruff`] Skip singleton starred expressions for `incorrectly-parenthesized-tuple-in-subscript` (`RUF031`) (#16083)
  Delete left-over `verbosity.rs (#16081)
  [red-knot] User-level configuration (#16021)
  Add `user_configuration_directory` to `System` (#16020)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
internal An internal refactor or improvement red-knot Multi-file analysis & type inference
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants