std.digest toHexString

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Mar 16 11:09:52 PDT 2017


On Thursday, 16 March 2017 at 17:47:34 UTC, H. S. Teoh wrote:
> Actually, the bug still exists even if you explicitly slice it:
>
> 	string x = func()[]; // still compiles, but shouldn't

I don't call that a bug, once it is explicitly done it means the 
programmer realized something is up and decided they are OK with 
it. Perhaps you want to pass it to a function that you know isn't 
going to hold the reference beyond the calling scope.

> For some reason, slicing a static array return value is somehow 
> OK, while slicing a local variable is rejected.  Seems like the 
> compiler is missing escaping ref checks for return values?

It's the uniqueness thing, see my last email (I probably was 
typing it at the same time you were typing this...)

This isn't an escape per se, `string x` is still a local variable.

immutable(char)[32] buffer;
string s = buffer[0 .. 16]; // sane and really useful 
optimization... just be careful not to escape it

Walter wants to expand the escape check so it automatically 
issues an error if you aren't careful enough, but the status quo 
is still usable - such code is not necessarily wrong, banning 
entirely it is a step backward, and programmers coming up the C 
tradition are used to watching lifetimes like that.


More information about the Digitalmars-d-learn mailing list