Another performance improvement on the Formatter by using Kernel#sprintf over String#% #75
+2
−3
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.
String#%
takes the arguments as an Array object, which requires us to create an extra object (like we're doing here).Also, while both
String#%
andKernel#sprintf
internally falls backrb_str_format
in the current CRuby implementation, the former seems to be performing a little bit of argument checking, which possibly causes a very subtle performance difference (?).Anyway, here's a benchmark of
String#%
vsKernel#sprintf
.P.S. I have no strong preference on whether to use
Kernel#sprintf
orKernel#format
. I'm happy to rewrite the patch to callformat(...)
(orKernel.sprintf(...)
orKernel.format(...)
) if the maintainer has any preference.