Jump to page: 1 2
Thread overview
[Issue 1553] New: foreach_reverse is allowed for delegates
Oct 08, 2007
d-bugmail
Jul 01, 2011
yebblies
Jul 02, 2011
Walter Bright
Jul 02, 2011
Vladimir Panteleev
Jul 02, 2011
Walter Bright
Jul 02, 2011
Vladimir Panteleev
Jul 02, 2011
Walter Bright
Jul 02, 2011
Vladimir Panteleev
Jul 02, 2011
Jonathan M Davis
Jul 02, 2011
Vladimir Panteleev
Jul 02, 2011
Walter Bright
Jul 02, 2011
Vladimir Panteleev
Jul 04, 2011
Walter Bright
Feb 06, 2012
Yao Gomez
Oct 21, 2013
Denis Shelomovskij
October 08, 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1553

           Summary: foreach_reverse is allowed for delegates
           Product: D
           Version: 1.022
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: enhancement
          Priority: P4
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: thecybershadow@gmail.com


Suggestion: do not allow to use delegates with foreach_reverse. Since, in the case of delegates, foreach_reverse is synonymous with foreach, it can be a cause of bugs, especially in the case of rewriting code that looped over a pre-built array to loop using a delegate.


-- 

July 01, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |accepts-invalid, patch
           Priority|P4                          |P3
                 CC|                            |yebblies@gmail.com
           Platform|x86                         |All
            Version|1.022                       |D1 & D2
         OS/Version|Windows                     |All
           Severity|enhancement                 |normal


--- Comment #1 from yebblies <yebblies@gmail.com> 2011-07-01 14:44:15 EST ---
https://github.com/D-Programming-Language/dmd/pull/184

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla@digitalmars.com
         Resolution|                            |WONTFIX


--- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2011-07-01 18:24:24 PDT ---
I don't think it's right to make foreach_reverse crippled compared with foreach. I'm going to mark as won't fix.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553



--- Comment #3 from Vladimir Panteleev <thecybershadow@gmail.com> 2011-07-01 18:29:03 PDT ---
Walter, did you understand the bug report correctly? My 4-year-old explanation could have been better, but what I meant is that:

foreach (v; someDelegate) { ... }

did the exact same thing as

foreach_reverse (v; someDelegate) { ... }

Someone may try to use foreach_reverse intuitively over a delegate, hoping it'll "just work", and get unexpected results (as I have 4 years ago).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553



--- Comment #4 from Walter Bright <bugzilla@digitalmars.com> 2011-07-01 18:48:10 PDT ---
Yes, I understood your point. I agree that one could make an error this way. I disagree that the solution is to remove the feature.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553



--- Comment #5 from Vladimir Panteleev <thecybershadow@gmail.com> 2011-07-01 18:50:16 PDT ---
Why? This is clearly an accepts-invalid bug! What would a better solution be, anyway? reverse_delegate?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553



--- Comment #6 from Walter Bright <bugzilla@digitalmars.com> 2011-07-01 19:16:27 PDT ---
The compiler cannot tell what the delegate does, so there's no way it can diagnose an error.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553



--- Comment #7 from Vladimir Panteleev <thecybershadow@gmail.com> 2011-07-01 19:18:00 PDT ---
Exactly! We can only assume that all delegates are written for forward iteration. I am having trouble understanding your problem with disabling foreach_reverse with delegates specifically. You say it'd be removing a feature, but how can it be a feature if it neither is nor can be implemented?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553


Jonathan M Davis <jmdavisProg@gmx.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jmdavisProg@gmx.com


--- Comment #8 from Jonathan M Davis <jmdavisProg@gmx.com> 2011-07-01 19:32:08 PDT ---
But why couldn't a delegate be written for reverse iteration? And if it does exactly the same thing for both foreach and foreach_reverse, I don't really see the problem. Granted, it may be a bit weird, but I don't see the bug.

Though truth be told, I've been wondering whether foreach_reverse is actually supposed to be sticking around, given the general move towards ranges and the fact that foreach_reverse isn't actually mentioned in TDPL (at least, it's not in the index).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1553



--- Comment #9 from Vladimir Panteleev <thecybershadow@gmail.com> 2011-07-01 19:38:33 PDT ---
(In reply to comment #8)
> But why couldn't a delegate be written for reverse iteration?

So put the semantics in the delegate name, instead of expecting the user to always use the correct one of the two semantically-opposite but actually synonymous keywords. This can easily become a point of confusion, and I'm surprised I need to elaborate in so much detail why this is plain bad.

What's wrong with writing it like this?

foreach (v; &foo.reverseIterator) { ... }

If you start writing it like this:

foreach_reverse (v; &foo.reverseIterator)

Sooner or later someone will forget the second "reverse", the code will look and compile right, and work wrong!

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
« First   ‹ Prev
1 2