Dependent types aren't needed for sum types though, which is what you'd normally use for an array that carries its size, correct?

On Sun, Jun 7, 2020 at 7:57 PM Chris Torek <torek@torek.net> wrote:
>Safe Rust code is data race free, but not free of race
>conditions, let alone thread safe in all ways.

Er, yes.  I mainly wanted to contrast to Go, where you look for
race conditions by building with a flag that enables runtime
checking.  This can only detect races that actually occur,
and if there are paths that would still have races that didn't
occur on your test run, well...

>>[rust array limitations]

>I'm afraid this is incorrect.  Rust arrays are indexed by a
>`usize`, which is basically whatever `size_t` would be in C. Rust
>arrays in general can be essentially arbitrarily large (up to
>limitations imposed by the target machine, of course).

>However, Rust does not support dependent types, most certainly
>not for arrays.  In other words, an array's size is considered
>part of its type and so when specializing traits on arrays, one
>must do so explicitly for each supported array size.  For
>practical reasons such implementations are often limited to a
>relatively small number of distinct sizes; 32 is a believable
>number.  Perhaps that's what you're thinking of?

Ah, yes, that was it.  (As I said, I never really had time to
do anything "real" in Rust.)

Go's slices are nice to use, but slices (and maps, for that matter)
trip people up because they are headers that point to shared
spaces.

Chris