Jump to page: 1 2
Thread overview
[Issue 3180] New: Need delegate covariance and contravariance
Jul 17, 2009
Haruki Shigemori
Jun 09, 2011
yebblies
Jun 09, 2011
yebblies
[Issue 3180] Covariance of delegates/function pointers
Jun 09, 2011
yebblies
Jun 13, 2011
yebblies
Aug 18, 2011
yebblies
Sep 02, 2011
Walter Bright
Sep 06, 2011
yebblies
Sep 06, 2011
yebblies
Sep 06, 2011
yebblies
Sep 06, 2011
yebblies
Sep 17, 2011
Walter Bright
Sep 17, 2011
Haruki Shigemori
Sep 18, 2011
yebblies
July 15, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3180

           Summary: Need delegate covariance and contravariance
           Product: D
           Version: unspecified
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Keywords: spec
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: rayerd.wiz@gmail.com


import std.stdio;

class A {}
class B : A {}

class X
{
    A foo() { return new A; }
}
class Y : X
{
    B foo() { return new B; }
}

class V
{
    void foo(B){}
}

void main()
{
    // Class Covariance (supported already)
    {
        X x = new X;
        Y y = new Y;
        A r = x.foo();
        A s = y.foo();
        B t = y.foo();
        writeln(r); // A
        writeln(s); // B
        writeln(t); // B
    }
    // Delegate Covariance
    {
        A delegate() f = delegate A() { return new A; }; // Of course, OK.
        writeln(f()); // A

        //A delegate() g = delegate B() { return new B; }; // Need support the
covariance
        //writeln(g()); // This should be B.
    }


    // Delegate Contravariance
    {
        V v = new V;
        void delegate(B) g = &v.foo; // Of course, OK.
        //void delegate(A) f = &v.foo; // Need suport the contravariance.
    }
}

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


Steven Schveighoffer <schveiguy@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schveiguy@yahoo.com
           Severity|normal                      |enhancement




--- Comment #1 from Steven Schveighoffer <schveiguy@yahoo.com>  2009-07-15 18:13:10 PDT ---
Your contravariance example is not valid, you cannot call foo(B) with an A.

It should be:

class V
{
  void foo(A);
}


...

V v = new v;
void delegate(B) g = &v.foo; // contravariance

Also this is somewhat of a duplicate of bug 3075.  Although you do bring up covariance for delegates, which should be implemented at the same time as contravariance.

Sadly, Walter has decided the prior bug is an invalid enhancement request, so most likely nothing will come of this request either.

I think the only possible way this may be included is if someone implements it and submits it as a patch to dmd.

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





--- Comment #2 from Haruki Shigemori <rayerd.wiz@gmail.com>  2009-07-17 16:55:58 PDT ---
(In reply to comment #1)
> Your contravariance example is not valid, you cannot call foo(B) with an A.
> 
> It should be:
> 
> class V
> {
>   void foo(A);
> }
> 
> 
> ...
> 
> V v = new v;
> void delegate(B) g = &v.foo; // contravariance

Sorry, it is my mistake.

> Also this is somewhat of a duplicate of bug 3075.  Although you do bring up covariance for delegates, which should be implemented at the same time as contravariance.
> 
> Sadly, Walter has decided the prior bug is an invalid enhancement request, so most likely nothing will come of this request either.

OMG. It is so sad. There are both in C#.

> I think the only possible way this may be included is if someone implements it and submits it as a patch to dmd.

I am trying to make some dmd patchs, but it is difficult yet.

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


Steven Schveighoffer <schveiguy@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dsimcha@yahoo.com


--- Comment #3 from Steven Schveighoffer <schveiguy@yahoo.com> 2011-03-16 10:08:31 PDT ---
*** Issue 5742 has been marked as a duplicate of this issue. ***

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


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs@eml.cc


--- Comment #4 from yebblies <yebblies@gmail.com> 2011-06-08 22:48:20 PDT ---
*** Issue 3833 has been marked as a duplicate of this issue. ***

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



--- Comment #5 from yebblies <yebblies@gmail.com> 2011-06-08 22:48:58 PDT ---
*** Issue 4000 has been marked as a duplicate of this issue. ***

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


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|spec                        |patch, rejects-valid
                 CC|                            |yebblies@gmail.com
            Summary|Need delegate covariance    |Covariance of
                   |and contravariance          |delegates/function pointers
           Severity|enhancement                 |normal


--- Comment #6 from yebblies <yebblies@gmail.com> 2011-06-08 22:54:07 PDT ---
The enhancement portion of the original report is a dupe of Issue 3075, which has been marked INVALID by Walter.

In the comments he states that delegate covariance is supposed to work, so that part of the report is definitely a bug.

https://github.com/D-Programming-Language/dmd/pull/96 should fix this report for function pointers.

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


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |zan77137@nifty.com


--- Comment #7 from yebblies <yebblies@gmail.com> 2011-06-13 12:16:14 PDT ---
*** Issue 4218 has been marked as a duplicate of this issue. ***

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


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@kyllingen.net


--- Comment #8 from yebblies <yebblies@gmail.com> 2011-08-19 01:50:28 EST ---
*** Issue 6524 has been marked as a duplicate of this issue. ***

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


Walter Bright <bugzilla@digitalmars.com> changed:

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


--- Comment #9 from Walter Bright <bugzilla@digitalmars.com> 2011-09-02 02:38:23 PDT ---
Partial fix: https://github.com/D-Programming-Language/dmd/commit/306df8eaa6f8a987f76f401a1e03d8edf1f1e2ae

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