Is @safe still a work-in-progress?

ag0aep6g anonymous at example.com
Thu Aug 23 11:53:11 UTC 2018


On Thursday, 23 August 2018 at 08:48:15 UTC, Walter Bright wrote:
> Being a template doesn't make any difference, except that it 
> will helpfully infer these things.

Including the `return` attribute.

> Also, since 'this' is passed by 'ref' to struct member 
> functions, it cannot escape anyway with dip1000:
>
>   struct S {
>     int x;
>     @safe ref int foo() { return x; }
>   }
>
>   dmd test -dip1000
>   test.d(4): Error: returning this.x escapes a reference to 
> parameter this, perhaps annotate with return

If we add the `return` attribute, we can escape a pointer to 
`this`. And since attributes are often inferred, it might come as 
a surprise to the programmer.

However, as far as I understand DIP 1000, it should make sure 
that the returned pointer won't outlive the struct instance. And 
I guess that's why it's ok to infer the `return` attribute?

That depends on DMD not over-estimating the lifetimes of things, 
though. Unfortunately, it does just that. When in doubt, DMD goes 
with infinite (e.g., `malloc`). I think that's a problem.

But I've already demonstrated my ignorance regarding DIP 1000 in 
a long, not very fruitful discussion with Atila on Bugzilla [1], 
so maybe I just don't get it.


[1] https://issues.dlang.org/show_bug.cgi?id=19183


More information about the Digitalmars-d mailing list