AA vs __gshared

IchorDev zxinsworld at gmail.com
Wed Aug 16 03:24:20 UTC 2023


On Tuesday, 15 August 2023 at 17:36:13 UTC, Steven Schveighoffer 
wrote:
> On 8/12/23 5:55 AM, IchorDev wrote:
>> On Thursday, 10 August 2023 at 15:20:28 UTC, Steven 
>> Schveighoffer wrote:
>>> That shouldn't matter.
>> 
>> Well, it does here. The AA is mutated during the loop, so 
>> perhaps this is an optimisation quirk where it works with 
>> `for` but segfaults in `foreach`? I've pretty thoroughly 
>> abused the `for` version and I haven't gotten it to segfault 
>> yet.
>
> oh yeah. That is not allowed. Any mutation of the AA during 
> iteration can invalidate existing foreach or ranges over the AA.

And yet this apparently doesn’t apply to an equivalent `for` 
somehow. Perhaps `foreach` shouldn’t have this arbitrary problem 
in the first place…

> In fact, that statement is way too broad. Invalidation of 
> iteration should be based on the type's requirements.
>
> We really should put a note in the AA spec page.

Probably yeah.

> https://dlang.org/phobos/core_lifetime.html#.emplace
>
> Any attribute requirements would be inferred based on the 
> attributes of your constructor, because emplace is a template.
>
> -Steve

Well the docs don’t say that at all, and the code is an 
unreadable mess. I dunno how anymore is meant to figure that out?


More information about the Digitalmars-d-learn mailing list