www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3235] New: Function literals must be deduced as "function" or "delegate"

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3235

           Summary: Function literals must be deduced as "function" or
                    "delegate"
           Product: D
           Version: unspecified
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: andrei metalanguage.com


Consider:

void foo(alias pred)() {
    pragma(msg, pred.stringof);
}

unittest {
    foo!((i) { return i < 0; })();
    int z = 1;
    foo!((i) { return i < z; })();
}

void main(string[] args)
{
}

This outputs:

__funcliteral1(__T2)
__dgliteral3(__T4)

because the first literal does not have to be a delegate.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 08 2009
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3235





--- Comment #1 from Andrei Alexandrescu <andrei metalanguage.com>  2009-08-08
07:17:17 PDT ---
(In reply to comment #0)
 Consider:
 
 void foo(alias pred)() {
     pragma(msg, pred.stringof);
 }
 
 unittest {
     foo!((i) { return i < 0; })();
     int z = 1;
     foo!((i) { return i < z; })();
 }
 
 void main(string[] args)
 {
 }
 
 This outputs:
 
 __funcliteral1(__T2)
 __dgliteral3(__T4)
 
 because the first literal does not have to be a delegate.

I meant that right now this outputs: __dgliteral1(__T2) __dgliteral3(__T4) and it should output: __funcliteral1(__T2) __dgliteral3(__T4) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 08 2009
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3235


Stewart Gordon <smjg iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |smjg iname.com
         Resolution|                            |INVALID




--- Comment #2 from Stewart Gordon <smjg iname.com>  2009-08-08 11:14:14 PDT ---
This is as designed.

http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral
"If the keywords function or delegate are omitted, it defaults to being a
delegate."

Having the type of a function/delegate literal depend on its contents like this
makes it hard for someone reading the code to tell which it is.  Since function
pointers and delegates are not generally interchangeable, AISI it's desirable
to keep their literal notations distinct.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 08 2009
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3235





--- Comment #3 from Andrei Alexandrescu <andrei metalanguage.com>  2009-08-08
11:55:19 PDT ---
(In reply to comment #2)
 This is as designed.
 
 http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral
 "If the keywords function or delegate are omitted, it defaults to being a
 delegate."
 
 Having the type of a function/delegate literal depend on its contents like this
 makes it hard for someone reading the code to tell which it is.  Since function
 pointers and delegates are not generally interchangeable, AISI it's desirable
 to keep their literal notations distinct.

I think type deduction should help here as much as anywhere else. If you do want a delegate, you can always use the delegate keyword. Plus, all algorithms in std.algorithm take an efficiency toll when used with literals. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 08 2009
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3235


Andrei Alexandrescu <andrei metalanguage.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |




--- Comment #4 from Andrei Alexandrescu <andrei metalanguage.com>  2009-08-08
11:57:05 PDT ---
(In reply to comment #2)
 This is as designed.
 
 http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral
 "If the keywords function or delegate are omitted, it defaults to being a
 delegate."
 
 Having the type of a function/delegate literal depend on its contents like this
 makes it hard for someone reading the code to tell which it is.  Since function
 pointers and delegates are not generally interchangeable, AISI it's desirable
 to keep their literal notations distinct.

I think type deduction should help here as much as anywhere else. If you do want a delegate, you can always use the delegate keyword. Plus, all algorithms in std.algorithm take an efficiency toll when used with literals. (Please do not mark this as resolved; I've discussed with Walter before posting it, and he suggested I do. In general, the spec of D2 is fluid enough to not be a strong reason for invalidating a bug report. Thanks.) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 08 2009
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3235



--- Comment #5 from Andrei Alexandrescu <andrei metalanguage.com> 2011-04-28
13:39:40 PDT ---
BTW this is in TDPL now, with Walter's approval.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 28 2011