Is @safe still a work-in-progress?
vit
vit at vit.vit
Fri Aug 17 13:29:43 UTC 2018
On Friday, 17 August 2018 at 13:02:20 UTC, Jonathan M Davis wrote:
> On Friday, August 17, 2018 6:30:26 AM MDT Atila Neves via
> Digitalmars-d wrote:
>> On Friday, 17 August 2018 at 11:37:54 UTC, rikki cattermole
>> wrote:
>> > On 17/08/2018 11:33 PM, Atila Neves wrote:
>> >> . Good luck figuring out why your template functions aren't
>> >> @safe and coaxing the compiler to tell you why it's
>> >> inferring the attributes it is. Bonus points if it's a
>> >> Phobos function so you can't slap `@safe` on its definition.
>> >
>> > Sure you can. It's a template so it'll be initialized as its
>> > required.
>> >
>> > I've done that to fix a bug in druntime before and in my own
>> > libraries.
>>
>> It's not easy though. You have to either be building your own
>> phobos or sudo editing files in /usr/include. You can, but
>> it's a pain. Then there's finding out exactly where in a chain
>> of 10 template functions that it became @system...
>
> The reality of the matter is that you tend to have to be very
> motivated to make your code @safe if you're doing much with
> templates (the same with other attributes such as pure). And
> sadly, it can quickly get to the point that it just feels like
> it's not worth it in spite of the fact that there is definitely
> value to be had in using them.
>
> I wonder what it would take to make it so that the compiler
> could actually tell you where in the function call chain it
> first becomes @system.
>
> - Jonathan M Davis
Does -dip1000 affect alias template parameters and closures?
example:
import std.experimental.all;
void main()@safe @nogc{
int i = 2;
const x = iota(0, 10)
.filter!((x)scope => x == i)
.map!((x)scope => x * x)
.front;
assert(x == 4);
}
onlineapp.d(4): Error: function `D main` is @nogc yet allocates
closures with the GC
onlineapp.d(8): onlineapp.main.__lambda1 closes over
variable i at onlineapp.d(5)
More information about the Digitalmars-d
mailing list