Suggestion: Remove implicit conversion from T[n] and T[] to T*

Lars Ivar Igesund larsivar at igesund.net
Thu Nov 30 14:52:20 PST 2006


Oskar Linde wrote:

> Removing the implicit conversion from static arrays (T[n]) and dynamic
> arrays (T[]) to pointers T* may be quite controversial, but would help
> clear up some problems and feels like the right step to take.
> 
> Motivation:
> 
> - Implicit conversions are generally bad. There are cases where they
> make sense, but those need a very good reason.
> - Both conversions are available by the .ptr property already and by
> using that the code is clearer and more self documenting.
> - T[] contains both a length and a ptr. Both are needed to retain the
> information. Symmetrically requiring (a.ptr, a.length) makes sense.
> - Decoupling arrays from pointers somewhat lifts D to a slightly higher
> abstraction level without losing any power.
> 
> Case study: Phobos
> 
> Phobos contains 150 lines that rely on implicit T[n] and T[] => T*
> conversions. (Not counting multi-typed string literals that magically
> bypass the regular conversion rules.)
> 
> Of those
> 
> 78 lines (52 %) are directly related to calls to C functions. Including:
>     21 s[n]printf
>     20 memcmp
>     17 memcpy
>   Requiring changes such as:
>   -   .send(sock, buf, buf.length, cast(int)flags);
>   +      .send(sock, buf.ptr, buf.length, cast(int)flags);
> 
> 16 are C-like D function calls, like
>   -   writeBlock(bom,bom.length);
>   +   writeBlock(bom.ptr, bom.length);
> 
> 29 are trivial assignments, like:
>   -   ubyte *str = s;
>   +      ubyte *str = s.ptr;
> 
> 7 are "new", where this change has a slight negative impact on code:
>   -   R = new dchar[Rsize];
>   +   R = (new dchar[Rsize]).ptr;
> 
> 20 remaining are other minor changes like:
>   -           if (sp != stack)
>   +           if (sp != stack.ptr)
> 
> I am very likely to have made some mistakes in this analysis, and missed
> important cases, but in general, I think most of the changes actually
> increase the code clarity.
> 
> Comments?
> 
> /Oskar

Aye. o/

-- 
Lars Ivar Igesund
blog at http://larsivi.net
DSource & #D: larsivi



More information about the Digitalmars-d mailing list