www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3833] New: pure/nothrow functions/delegates are a subtype of the nonpure/throw ones

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

           Summary: pure/nothrow functions/delegates are a subtype of the
                    nonpure/throw ones
           Product: D
           Version: 2.040
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc


--- Comment #0 from bearophile_hugs eml.cc 2010-02-18 12:58:00 PST ---
This compiles, but it's an error because the array is mixed, &sqr is not pure:

void main() {
    double sqr(double x) { return x * x; }
    pure double psqr(double x) { return x * x; }
    pure double delegate(double)[] funcs = [&sqr, &psqr];
}


This doesn't compile, but pure functions are a subsets of impure functions:

pure real sqr1(real x) { return x * x; }
real sqr2(real x) { return x * x; }
void main() {
    real function(real x)[] funcs = [&sqr1, &sqr2];
}



While this compiles:

void main() {
    double sqr(double x) { return x * x; }
    pure double psqr(double x) { return x * x; }
    double delegate(double)[] funcs = [&sqr, &psqr];
}


The following doesn't compile, but nothrow functions are a subset of throwing
functions:

nothrow real sqr1(real x) { return x * x; }
real sqr2(real x) {
    if (x == 0) throw new Error("");
    return x * x;
}
void main() {
    real function(real x)[] funcs = [&sqr1, &sqr2];
}


(Similar things happen with "pure nothrow" functions/delegates.)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 18 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3833



--- Comment #1 from bearophile_hugs eml.cc 2010-12-16 00:50:55 PST ---
With dmd 2.051beta all four examples don't compile, so the DMD is more strict.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 16 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3833



--- Comment #2 from bearophile_hugs eml.cc 2011-02-02 10:15:39 PST ---
This D2 program shows a cost of a strong type system: creating collections of
functions becomes a problem because there are so many attributes that change a
type. This specific problem is solved managing correctly variance/covariance of
function pointers and delegates, typing the array 'a' as an array of impure
nothrow  trusted functions:


import std.math;
void main() {
    auto a = [&asin, &cbrt];
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 02 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3833


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |yebblies gmail.com
         Resolution|                            |DUPLICATE


--- Comment #3 from yebblies <yebblies gmail.com> 2011-06-08 22:48:20 PDT ---
I'm going to mark this as a dupe of 3180, along with 4000, as both cases are
covered by covariance.

*** This issue has been marked as a duplicate of issue 3180 ***

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