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