DIP 1022---foreach auto ref---Community Review Round 2
Andrea Fontana
nospam at example.com
Wed Oct 23 08:41:54 UTC 2019
On Wednesday, 23 October 2019 at 07:25:40 UTC, Dukc wrote:
> On Saturday, 19 October 2019 at 13:16:17 UTC, Mike Parker wrote:
>> This is the feedback thread for the second round of Community
>> Review for DIP 1022, "foreach auto ref":
>
> In case someone does not have concentration to see what's
> changed relative to the first community review, the major
> things are:
>
> -`static foreach` is no longer supposed to compile with `auto
> ref`. Rationale of why in description.
>
> -added a simplified example in bottom of rationale section
I'm the author of that pull request. Reading your DIP I think you
give a misinterpretation of it.
"A pull request[3] was submitted to disallow this behavior.
In every place where foreach (ref <...>) presently iterates by
value, a compiler error would have resulted after merging that
pull request."
My patch was not supposed to give any error. And I didn't even
try to disallow this behaviour.
Before that patch, compiler allowed to iterate a range of structs
(where front is returned by value) by ref, that probably doesn't
make any sense. In this case dtor on those structs is never
called due to a bug in code. This mean that if my struct wrap a
"malloc" call in struct's ctor and a "free" call in struct's dtor
(or a refcount like in my case) memory is saturated using a
foreach (or simply usign phobos "each!T").
My patch simply fixed that missing dtor call, and I left the
behaviour change for a complex DIP.
Sönke Ludwig summarized [1] this better than me in a comment on
github:
"Isn't this quite simple? Fixing the failure to call the
destructor is critical and a clear improvement over the status
quo. The ref foreach didn't ever do something useful for r-value
ranges, but that's an orthogonal issue that should simply be
discussed in the context of a separate ticket (or DIP)."
[1] https://github.com/dlang/dmd/pull/8437#issuecomment-466249392
More information about the Digitalmars-d
mailing list