Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
August 22, 2010 [Issue 4707] New: auto ref for foreach loops | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=4707 Summary: auto ref for foreach loops Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: dsimcha@yahoo.com --- Comment #0 from David Simcha <dsimcha@yahoo.com> 2010-08-21 19:31:14 PDT --- The following should be possible, with x being ref if possible and non-ref otherwise. I've toyed with the possibility of adding opApply support to some stuff in std.range and std.algorithm and this is a blocker for doing it at all properly. void main() { foreach(auto ref x; [1, 2]) {} } test9.d(2): basic type expected, not auto test9.d(2): no identifier for declarator int test9.d(2): found 'auto' when expecting ';' test9.d(2): found ';' when expecting ')' test9.d(2): found ')' when expecting ';' following statement -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 22, 2010 [Issue 4707] auto ref for foreach loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Simcha | http://d.puremagic.com/issues/show_bug.cgi?id=4707 nfxjfg@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |nfxjfg@gmail.com --- Comment #1 from nfxjfg@gmail.com 2010-08-21 20:33:05 PDT --- How would this be different from the following (which works)? void main() { foreach(ref x; [1, 2]) {} } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 22, 2010 [Issue 4707] auto ref for foreach loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Simcha | http://d.puremagic.com/issues/show_bug.cgi?id=4707 --- Comment #2 from David Simcha <dsimcha@yahoo.com> 2010-08-21 20:49:02 PDT --- Because if the range didn't support ref iteration, the foreach loop would work with non-ref iteration rather than producing a compile time error.(In reply to comment #1) > How would this be different from the following (which works)? > > void main() { > foreach(ref x; [1, 2]) {} > } If the range didn't support ref iteration, the foreach loop would work with non-ref iteration rather than producing a compile time error. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 30, 2010 [Issue 4707] auto ref for foreach loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Simcha | http://d.puremagic.com/issues/show_bug.cgi?id=4707 --- Comment #3 from David Simcha <dsimcha@yahoo.com> 2010-08-29 21:33:04 PDT --- Another use case for this is if you are iterating over something that may be expensive to copy. In these cases, doing foreach(elem; stuff) is inefficient because it produces an unnecessary copy, but foreach(ref elem; stuff) isn't generic enough because it won't work on ranges w/o lvalue elements. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
November 01, 2013 [Issue 4707] auto ref for foreach loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Simcha | http://d.puremagic.com/issues/show_bug.cgi?id=4707 Martin Nowak <code@dawg.eu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |code@dawg.eu --- Comment #4 from Martin Nowak <code@dawg.eu> 2013-11-01 12:17:39 PDT --- This is still an interesting proposal. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
November 02, 2013 [Issue 4707] auto ref for foreach loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Simcha | http://d.puremagic.com/issues/show_bug.cgi?id=4707 monarchdodra@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |monarchdodra@gmail.com --- Comment #5 from monarchdodra@gmail.com 2013-11-02 03:10:11 PDT --- (In reply to comment #4) > This is still an interesting proposal. Seconded. Thoguh I do seem to remember that another Bug Report about this was open... I did find this interesting thread about it though: http://forum.dlang.org/thread/ceftaiklanejfhodbpix@forum.dlang.org This proposal has 2 very important (IMO) ramifications: First, it would allow making "foreach(ref; range)" illegal, if said range doesn't give ref access. This is a *big* source of bugs. Second, once we have this, we would be able to write *correct* generic code. Read this extract from "reduce": // For now, just iterate using ref to avoid unnecessary copying. // When Bug 2443 is fixed, this may need to change. foreach (ref elem; r) { Or "I'm doing wrong, but it seems to work". So long story short, if we ever hope to have "ref-correct" foreach, we *must* have "auto ref" to make foreach useable in generic code. This gets a vote from me -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation