DIP76: Autodecode Should Not Throw

via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 7 04:22:49 PDT 2015


On Tuesday, 7 April 2015 at 07:50:40 UTC, Vladimir Panteleev 
wrote:
> On Tuesday, 7 April 2015 at 07:42:02 UTC, w0rp wrote:
>> Maybe autodecoding could throw an Error (No 'new' allowed) 
>> when debug mode is on, and use replacement characters in 
>> release mode. I haven't thought it through, but that's an idea.
>
> No no no, terrible idea. This means your program will pass your 
> test suite in debug mode (which, of course, is never going to 
> test behavior with bad UTF in all the relevant places), but 
> silently corrupt real-world data in release mode. Errors and 
> asserts are for logic errors, not for validating user input!

I'd say that invalid UTF8 in `string`s _is_ a logic error, 
because these are defined to be valid UTF8. If they aren't, 
someone didn't correctly validate their inputs.

Unfortunately, not even the runtime cares about UTF correctness:

     void main(string[] args) {
         import std.utf;
         args[1].validate; // throws
     }

     # ./testutf8 `echo 'äöü' | recode utf8..latin1`


More information about the Digitalmars-d mailing list