Avoid uncached isBuiltin and uncached calls in Enumerable#6369
Merged
headius merged 1 commit intojruby:masterfrom Aug 28, 2020
Merged
Avoid uncached isBuiltin and uncached calls in Enumerable#6369headius merged 1 commit intojruby:masterfrom
headius merged 1 commit intojruby:masterfrom
Conversation
There are several changes here to avoid uncached method lookups along hot paths: * All uses of RubyBasicObject.isBuiltin except for two have been replaced with CachingCallSite.isBuiltin. The two that remain are for the IO stream wrappers and are not valuable to cache. This came up in a profile of RubyKon where Array#any?'s uncached isBuitin must be on a hot path. * All uncached method calls in RubyEnumerable are replaced by CallSite.call, including the various callEach forms. These sites are localized as much as possible to avoid conflicts, but will still churn quite a bit in a typical application that has many Enumerable implementers. Long-term we should move Enumerable to a Ruby implementation that can be split and specialized. In addition, in RubyEnumerable all lambdafiable block callbacks have been replaced by lambdas (fewer class files) and all deprecated methods moved to the bottom of the file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
There are several changes here to avoid uncached method lookups along hot paths:
In addition, in RubyEnumerable all lambdafiable block callbacks
have been replaced by lambdas (fewer class files) and all deprecated methods moved to the bottom of the file.