Eliminate redundancy of dup/idup
kenji hara
k.hara.pg at gmail.com
Sun Sep 9 10:06:10 PDT 2012
An advantage of generic dup() is to allow copying of const arrays.
void main()
{
class C {}
const C[] ca = new C[3];
//ca.dup;
// Error: cannot implicitly convert element type const(C) to
mutable in ca.dup
//ca.idup;
// Error: cannot implicitly convert element type const(C) to
immutable in ca.idup
ca.dup();
// result is const(C[])
}
----
According to what I remember, the name 'idup' had been discussed in
the beginning of D2, but it had been disappeared from the need for
idup. But it is still oddly name.
Using:
auto iarr = marr.idup;
Instead of :
immutable iarr = marr.dup(); // In the future, () would not be necessary
Is really handy? Yes, it is 6(or 4) characters shorter. But I can't
see it *handy*.
"idup" is still odd name to me.
Kenji Hara
2012/9/10 Timon Gehr <timon.gehr at gmx.ch>:
> On 09/09/2012 05:44 PM, kenji hara wrote:
>>
>> 2012/9/10 Adam D. Ruppe <destructionator at gmail.com>:
>>>
>>> On Sunday, 9 September 2012 at 15:32:01 UTC, kenji hara wrote:
>>>
>>>>
>>>> Then returned value can be implicitly convertible to immutable(E[]).
>>>
>>>
>>>
>>> What about rebindable with auto? For example:
>>>
>>> void main() {
>>> char[] a = "cool".dup;
>>> string b = a.idup; // explicitly immutable(char)[]
>>> auto c = a.idup; // automatically typeof(c) == immutable(char)[]
>>
>>
>> Yes. In this case, you should write:
>> immutable c = a.dup(); // explicit immutable conversion
>>
>>> c = "another"; // so this compiles
>
>
> This does not compile anymore now.
>
>>> }
>
>
> +1 for moving to library and lifting restrictions on conversion.
> -1 for removing .idup, it is handy.
More information about the Digitalmars-d
mailing list