On 30/04/2013 11:26 AM, Gábor Lehel wrote:

Couldn't this be relaxed? In other words allow dynamically sized `str`
as a type (and perhaps similarly for other dynamically sized types), but
prohibit those things specifically which would be problematic, i.e.
using it in ways that would require knowing its size?

This option was considered at ... great length, a year ago during the vector-reform conversations.

https://mail.mozilla.org/pipermail/rust-dev/2012-April/001742.html
https://mail.mozilla.org/pipermail/rust-dev/2012-April/001772.html
https://mail.mozilla.org/pipermail/rust-dev/2012-June/001951.html
https://mail.mozilla.org/pipermail/rust-dev/2012-July/002114.html

I'm not sure anyone ever reduced those threads to their essence, but re-reading them I think I can articulate the fundamental difficulty with what you're suggesting:

  - Any object has a real size. Some sizes are statically known,
    some must be discovered dynamically (by reading a size field
    or carrying a size value in a (ptr,size) pair)

  - When T is static-size, &T and ~T and @T should be 1-word
    pointers. The compiler knows the size.

  - To operate on a vector of statically-unknown size, you
    need to get its dynamically-known size from somewhere.
    This means pointers to vectors need to carry bounds.

  - So ~[] and @[] and &[] are not the same representation as
    ~T, @T and &T in general. They have to have a size stuck
    on them somewhere.

  - We want to be able to take sub-slices and have slices that
    point to fixed-size vectors in C structs. This means
    slices can't have their length in the pointee, and have to be
    (ptr,len) pairs.

So about the only wiggle room away from where we are now is that we might be able to make ~[] represented by (ptr,len) pairs too, like slices are, rather than 1 ptr that points to a [len,data...] buffer. But it's not clear if that would buy us anything. Maybe a bit more genericity in impls, though I don't know how; Niko might. There might be a bit more room for improvement here, but it's an _extremely_ constrained space to work in.

-Graydon

_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to