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.
This is better than it was before, but I'll follow up with another PR to use stack-allocated memory in many cases. That'll probably have to wait until Monday.
As for this PR, the old version was slow because adding type asserts on a function means to call
convert
and then to type-assert, while adding it on a function return only means to type assert.Getting from an
IdDict{Any,Any}
of course infers asAny
, which then means we need a dynamic dispatch to theconvert
. By only having the type assert, we instead get a fast check to confirm the type and then an error.I left the type assert on the function as well, but as the type has now already been confirmed by the time the function returns, we have a static dispatch to convert (that gets compiled away, because it's already known to be the correct type).