Skip to content

Conversation

@tarcieri
Copy link
Member

@tarcieri tarcieri commented Sep 1, 2025

Closes #131, #132

Notably these impls even existing can break code which would otherwise compile when hybrid-array is included as a dependency, due to some complex interactions between type inference and the sized-to-unsized coercion, something I previously knew little about prior to #131:

https://rustc-dev-guide.rust-lang.org/traits/unsize.html

Notably the existence of overlapping AsRef impls can break inference in cases where code is depending on the sized-to-unsized coercion, since the compiler can infer the desired type is [T] and coerce the other arguments from [T; N] into [T] to match.

When this is no longer possible, it can fail in some pretty counterintuitive ways. See #131 for examples.

This is all unfortunate because it's removing functionality which made it possible to expose [T; N] in public APIs so the caller didn't have to worry about Array at all. Perhaps we can lean on the From impls for doing such conversions instead.

See #131, #132

Notably these impls even existing can break code which would otherwise
compile when `hybrid-array` is included as a dependency, due to some
complex interactions between type inference and the sized-to-unsized
coercion, something I previously knew little about prior to #131:

https://rustc-dev-guide.rust-lang.org/traits/unsize.html

Notably the existence of overlapping `AsRef` impls can break inference
in cases where code is depending on the sized-to-unsized coercion, since
the compiler can infer the desired type is `[T]` and coerce the other
arguments from `[T; N]` into `[T]` to match.

When this is no longer possible, it can fail in some pretty
counterintuitive ways. See #131 for examples.

This is all unfortunate because it's removing functionality which made
it possible to expose `[T; N]` in public APIs so the caller didn't have
to worry about `Array` at all. Perhaps we can lean on the `From` impls
for doing such conversions instead.
@tarcieri tarcieri merged commit 6b921f3 into master Sep 1, 2025
14 checks passed
@tarcieri tarcieri deleted the remove-asref-for-core-array branch September 1, 2025 14:27
tarcieri added a commit that referenced this pull request Sep 1, 2025
Provides an alternative to #133 using the less commonly used `Borrow`
trait instead, which should still make the same patterns of exposing
APIs with core arrays possible, but hopefully while causing less
breakage in end user code.
tarcieri added a commit that referenced this pull request Sep 1, 2025
Provides an alternative to #133 using the less commonly used `Borrow`
trait instead, which should still make the same patterns of exposing
APIs with core arrays possible, but hopefully while causing less
breakage in end user code.
tarcieri added a commit that referenced this pull request Sep 1, 2025
Provides an alternative to #133 using the less commonly used `Borrow`
trait instead, which should still make the same patterns of exposing
APIs with core arrays possible, but hopefully while causing less
breakage in end user code.
@tarcieri tarcieri mentioned this pull request Sep 1, 2025
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.

AsRef<Array<_, _>> for [T; N] is poisonous

1 participant