Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove uses of ArrayOps bounds #25

Merged
merged 1 commit into from
Jan 25, 2024
Merged

Conversation

tarcieri
Copy link
Member

@tarcieri tarcieri commented Jan 25, 2024

Continuation of the approach from #24 which replaces ArrayOps<T, N> bounds with ArraySize<ArrayType<T> = [T; N]>.

Though a bit more verbose, this makes the inner type of Array explicit and therefore allows more safe conversions as well as making unsafe code easier to reason about, since the inner type is no longer implicit.

This doesn't go as far as to remove the ArrayOps (and SliceOps) trait(s) yet, but that should now be possible.

Continuation of the approach from #24 which replaces `ArrayOps<T, N>`
bounds with `ArraySize<ArrayType<T> = [T; N]>`.

Though a bit more verbose, this makes the inner type of `Array` explicit
and therefore allows more safe conversions as well as making `unsafe`
code easier to reason about, since the inner type is no longer implicit.

This doesn't go as far as to remove the `ArrayOps` (and `SliceOps)
trait(s) yet, but that should now be possible.
@tarcieri tarcieri merged commit ef954cb into master Jan 25, 2024
14 checks passed
@tarcieri tarcieri deleted the remove-use-of-arrayops-bounds branch January 25, 2024 22:06
tarcieri added a commit that referenced this pull request Jan 27, 2024
After #24, #25, and #26, these traits don't really need to exist and
have largely been replaced by safe type conversions with appropriate
bounds.

In lieu of `ArrayOps<T, N>` we instead can use
`U: ArraySize<ArrayType<T> = [T; N]>>` as a bound, which albeit a bit
more verbose concretely describes the inner type of `Array` to the
compiler.

The `cast_slice_(to|from)_core(_mut)` methods previously defined on the
trait have been preserved, but as static methods of `Array`, making the
change largely a drop in replacement. Places where they were being
called as e.g. `ArrayOps::cast_slice_to_core` just need to be called as
`Array::cast_slice_to_core` instead.
tarcieri added a commit that referenced this pull request Jan 27, 2024
After #24, #25, and #26, these traits don't really need to exist and
have largely been replaced by safe type conversions with appropriate
bounds.

In lieu of `ArrayOps<T, N>` we instead can use
`U: ArraySize<ArrayType<T> = [T; N]>>` as a bound, which albeit a bit
more verbose concretely describes the inner type of `Array` to the
compiler.

The `cast_slice_(to|from)_core(_mut)` methods previously defined on the
trait have been preserved, but as static methods of `Array`, making the
change largely a drop in replacement. Places where they were being
called as e.g. `ArrayOps::cast_slice_to_core` just need to be called as
`Array::cast_slice_to_core` instead.
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.

1 participant