Eliminate dynamic dispatch from Language::Visitor and Analysis::AST::Visitor #4338
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.
In analysis,
Kernel#public_send
was a big delay (and it was own time -- overhead -- not the methods that end up getting called). It could mostly be eliminated by some heavy-handed codegen. It seems to me that it pays off:Before (3.6% own time)
After (0.5% own time)
TODO:
Language::Visitor
code. I think thosevisit_{...}_children
methods could be dynamically created unless the method was already manually defined, and that would remove the need for the custom method name argument. Also reconsider the method body organization to make sure stuff that can be de-duplicated is.node.visit # visit this node and all children recursively
. It may be just a matter of ergonomics 🤷