Remove allocation for builder cache hits #40
Closed
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.
Credit to @simonvandel over at the main rowan repository for pointing out how this is possible.
Draft proof of concept includes many problematic corners that make this not mergeable:
vec::Drain::as_slice
(Tracking issue for slice::IterMut::as_slice and vec::Drain::as_slice rust-lang/rust#58957)ptr-union
wrangling ingreen/builder.rs
that shouldn't need to be therefn Union2::as_untagged_ptr
rather than unpacking the uniontrait AsSlice
is a hack to accept theas_slice
-having by-value iteratorsAsRef<[T]>
is probably the correct bound hereIntoIterator
rather thanIterator
directlyInto
bound is nice but unnecessaryas_slice
/RandomAccessIterator
and performs the old behavior of collecting into a provisional nodematch
(though not as nice asmatch match match
)