Thank you for the answers.

2. How to allocate a mutable managed vector dynamically?

>  I can create an owned vector with: let a = vec::from_elem(..);
>> I can create a managed vector with: let a = at_vec::from_elem(..);
>>
>
> You cannot. Because the elements of a managed vector are stored inline
> without indirection, and managed vectors are inherently shared, they cannot
> change length after they are created. Think of a managed vector like a Java
> array, which has the same properties.
>
> If you want a mutable vector, you must place an owned vector into a
> managed box. At the moment, this is most conveniently done using the `DVec`
> wrapper (this is what it exists for). That is, a type like `@DVec<T>` is
> basically the equivalent of Java's `ArrayList<T>`.
>
> In the future, we currently plan to build in better support for managed,
> mutable data using a plan, so it is likely that `@DVec<T>` will be removed
> in favor of something like `@mut ~[T]`.


I'm finding not being able to store array types in mutable boxes a bit
concerning. Some of my main fields of interest are in computer
graphics and numerical computing, both in which you'd end up having large
arrays of mutable data (frame buffer: mut [u8], matrices: mut [float]).
And in both cases, the sizes would not be known until runtime, so they
could not be represented as [type * cnt]. In both cases, growing the
vector is of no importance. I guess I could store both in the exchange
heap, but it just seems a bit weird as I don't really have interest
in passing the data between different threads; and I'll lose the
flexibility of being able to have multiple pointers to the data, apart from
using
a wrapper.
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to