Dynamic arrays in D 1.0
Edward Diener
eddielee_no_spam_here at tropicsoft.com
Sun May 11 13:22:15 PDT 2008
Bill Baxter wrote:
> Edward Diener wrote:
>> In D 1.0 dynamic arrays are the equivalent of C++'s std::vector<T>,
>> with slicing replacing iterators in order to access some subrange of
>> the sequence. In C++ there is functionality in std::vector::erase for
>> erasing elements from the vector and std::vector::insert for inserting
>> new elements into the vector. Where is that functionality in D's
>> dynamic arrays ?
>
> Yes, erase & insert and many other things are conspicuously missing from
> D1 Phobos (not sure about D2 Phobos). I like the collection of such
> routines provided by the Cashew library in the cashew.utils.Array module.
OK, I will look it up. I did expect such functionlity to be part of the
D run-time library or the language implementation itself.
>
>> Furthermore in D 1.0 a char[], a dynamic array of characters, is the
>> equivalent of the C++ std::string. In the C++ std::string class there
>> is a rich set of functionality for manipulating the char elements in
>> the string, for finding particular elements in the string, and for
>> comparing the character elements in strings with other strings, but I
>> see little of this in dynamic array functionality. What am I missing ?
>
> Those functions are in std.string in Phobos. And scattered all over the
> place in Tango.
I see the Phobos std.string. It seems, at first glance, not nearly as
rich an implementation as the C++ std::string functionality.
>
>> I am guessing this must be provided in D libraries of functions (
>> Phobos ? Tango ? ) templated on the dynamic array type.
>
> Right. Except for generic arrays, there's nothing in D1 Phobos.
This is surprising, but I will go with the link above you suggested.
>
>> But, if so, this seems a poor way of providing dynamic array
>> functionality as compared to built-in dynamic array functionality in
>> order to provide the sort of functionality mentioned above, especially
>> as D's dynamic arrays are part of the D language as opposed to a
>> separate library like C++'s std::vector<T> and std::string.
>
> Why? What's wrong with providing such functionality as a library when a
> library does the trick?
There is nothing instrinsically wrong with it when the library is
generic enough, as in the C++ standard algorithms which access
containers through the iterator concept.
>
> Are you aware of the pseudo-member trick that works for arrays? Example:
>
> T get_elem(T)(T[] array, size_t idx) {
> return array[idx];
> }
> ...
> float[] numbers = [1.f, 2,3];
> float first = numbers.get_elem(0);
>
> That works today in D1 and D2. Any function that takes an array as a
> first element can be treated as if it were a (non-virtual) member of the
> array type.
Yes I remember seeing this in the documentation but did not appreciate
its importance vis-a-vis an external dynamic array library.
>
> So given that, I think there's really no reason for the bulk of D's
> array functionality to not be in a library.
Agreed. Unfortunately I had missed where such a library exists, and
assumed it must be part of the normal distribution.
More information about the Digitalmars-d
mailing list