Skip to content

Commit e173ead

Browse files
provide additional justification for array interface design
Explain why Rust does not implement traits for large arrays. Explain why most methods are implemented on slices rather than arrays.
1 parent 11f8805 commit e173ead

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/libstd/primitive_docs.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,18 @@ mod prim_pointer { }
269269
/// - `Borrow`, `BorrowMut`
270270
/// - `Default`
271271
///
272+
/// This limitation to `N in 0..33` exists because Rust does not yet support
273+
/// generics over the size of an array type. `[Foo; 3]` and `[Bar; 3]` are
274+
/// instances of same generic type `[T; 3]`, but `[Foo; 3]` and `[Foo; 5]` are
275+
/// entirely different types. As a stopgap, trait implementations are
276+
/// statically generated for `N in 0..33`.
277+
///
272278
/// Arrays coerce to [slices (`[T]`)][slice], so their methods can be called on
273-
/// arrays.
279+
/// arrays. Slices are dynamic and do not coerce to arrays; consequently more
280+
/// methods are defined on `slice` where they support both types.
274281
///
275282
/// [slice]: primitive.slice.html
276283
///
277-
/// Rust does not currently support generics over the size of an array type.
278-
///
279284
/// # Examples
280285
///
281286
/// ```

0 commit comments

Comments
 (0)