Proposal for fixing dchar ranges

Steven Schveighoffer schveiguy at yahoo.com
Mon Mar 10 14:09:35 PDT 2014


On Mon, 10 Mar 2014 16:52:27 -0400, Walter Bright  
<newshound2 at digitalmars.com> wrote:

> On 3/10/2014 1:36 PM, Steven Schveighoffer wrote:
>> What strings are already is a user-defined type,
>
> No, they are not.

The functionality added via phobos can hardly be considered extraneous.  
One would not use strings without the library.

>> but with horrible enforcement.
>
> With no enforcement, and that is by design.

The enforcement is opt-in. That is, you have to use phobos' templates in  
order to use them "properly":

auto getIt(R)(R r, size_t idx)
{
    if(idx < r.length)
       return r[idx];
}

The above compiles fine for strings. However, it does not compile fine if  
you do:

auto getIt(R)(R r, size_t idx) if(hasLength!R && isRandomAccessRange!R)

Any other range will fail to compile for the more strict version and the  
simple implementation without template constraints. In other words, the  
compiler doesn't believe the same thing phobos does. shooting one's foot  
is quite easy.

> Keep in mind that D is a systems programming language, and that means  
> unfettered access to strings.

Access is fine, with clear intentions. And we do not have unfettered  
access. I cannot sort a mutable string of ASCII characters without first  
converting it to ubyte[].

What in my proposal makes you think you don't have unfettered access? The  
underlying immutable(char)[] representation is accessible. In fact, you  
would have more access, since phobos functions would then work with a  
char[] like it's a proper array.

-Steve


More information about the Digitalmars-d mailing list