Checking function parameters in Phobos
    Meta 
    jared771 at gmail.com
       
    Wed Nov 20 23:57:17 PST 2013
    
    
  
On Thursday, 21 November 2013 at 07:36:38 UTC, Jacob Carlborg 
wrote:
> On 2013-11-20 19:53, Meta wrote:
>
>> Yes. It is very important not to allow direct access to the 
>> underlying
>> value. This is important for ensuring that it is not put in an 
>> invalid
>> state. This is a mistake that was made with 
>> std.typecons.Nullable,
>> making it useless for anything other than giving a 
>> non-nullable type a
>> null state (which, in fairness, is probably all that it was 
>> originally
>> intended for).
>
> In that case all string functionality needs to be provided 
> inside the Validated struct. In addition to that we loose the 
> beauty of UFCS, at least for functions expecting plain "string".
This is tricky business. Unfortunately, having the wrapper be 
able to degrade to its base type is at odds with providing 
compiler-enforced guarantees. We can't allow direct access to the 
underlying string, because the user could purposely or 
inadvertently put it in an invalid state. On the other hand, 
these opaque wrapper types can no longer be transparently 
substituted into existing code. One solution is copying the 
validated string to do arbitrary operations on, leaving the 
original validated string unchanged.
auto validatedString = validate!isValidUTF(someString);
//Doesn't work; Validated!string does not expose the string 
interface
//auto invalidString = validatedString.map!(c => c - 
cast(char)int.max);
//Also doesn't work
//validatedString ~= cast(char)0xFFFF
auto validatedCopy = validatedString.duplicate();
//Do bad things with validatedCopy. validatedString remains 
unchanged and valid
    
    
More information about the Digitalmars-d
mailing list