8000
  • Add maybe_uninit constructor and .assume_init() method by bluss · Pull Request #803 · rust-ndarray/ndarray · GitHub
    [go: up one dir, main page]

    Skip to content

    Add maybe_uninit constructor and .assume_init() method#803

    Merged
    bluss merged 7 commits intomasterfrom
    generic-maybe-uninit
    Apr 18, 2020
    Merged

    Add maybe_uninit constructor and .assume_init() method#803
    bluss merged 7 commits intomasterfrom
    generic-maybe-uninit

    Conversation

    @bluss
    Copy link
    Member
    @bluss bluss commented Apr 18, 2020

    Add new constructor - Array::maybe_uninit() that makes an uninitialized array. This is represented in the type system as the array having the element type MaybeUninit<T>, and can be converted to a proper array of T when it has been fully initialized.

    Fixes #685

    Zip's apply_assign_into can write to MaybeUninit elements, but more than that, it is pretty manual work, but it can at least be done in safe code. The only unsafe step is to promise all elements are initialized, and calling .assume_init().

    The updated example - sort-axis.rs shows 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.

    @bluss bluss force-pushed the generic-maybe-uninit branch from dda72c3 to 3e07340 Compare April 18, 2020 19:11
    bluss added 7 commits April 18, 2020 21:32
    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.
    @bluss bluss force-pushed the generic-maybe-uninit branch from 3e07340 to 684b9c4 Compare April 18, 2020 19:32
    @bluss bluss merged commit 1229eea into master Apr 18, 2020
    @bluss bluss deleted the generic-maybe-uninit branch April 18, 2020 20:25
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Labels

    None yet

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    Change uninitialized to return an array of MaybeUninit

    1 participant

    0