Add maybe_uninit constructor and .assume_init() method#803
Merged
Conversation
dda72c3 to
3e07340
Compare
ManuallyDrop has the benefit that we use it up front, instead of after any "critical" operations.
Add representation trait RawDataSubst that array storage types correctly (emulation of higher kinded types). Implement it as a transmute-like operation, using the representation guarantees that MaybeUninit documents. Make it a public method - avaialable on all array types - owned arrays, arcarray, array views and so on. The safety percussions of exposing this transformation are only explored to an extent, but it's a type change without value conversion so there should not be much that can go wrong. Interesting aspects include being able to have one ArcArray handle with the old type and one with the new type, or one owned array with old and a view with new.
3e07340 to
684b9c4
Compare
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.
Add new constructor -
Array::maybe_uninit()that makes an uninitialized array. This is represented in the type system as the array having the element typeMaybeUninit<T>, and can be converted to a proper array ofTwhen it has been fully initialized.Fixes #685
Zip's apply_assign_into can write to
MaybeUninitelements, but more than that, it is pretty manual work, but it can at least be done in safe code. The onlyunsafestep is to promise all elements are initialized, and calling.assume_init().The updated example -
sort-axis.rsshows how usage remains similar to the old constructor, but it is much easier to be confident about having done it correctly - and it supports non-Copy elements.