[Issue 10527] New: Eliding more postblit constructor calls

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jul 3 03:51:22 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=10527

           Summary: Eliding more postblit constructor calls
           Product: D
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: tommitissari at hotmail.com


--- Comment #0 from Tommi <tommitissari at hotmail.com> 2013-07-03 03:51:18 PDT ---
Definitions:
1) 'Str' is a struct type which has a postblit constructor
2) 'var' is a variable whose unqualified type is Str
3) 'cpy' is a copy of the variable var

Proposed language change:
Whenever a copy is made from var to cpy (either by making a new variable or by
passing var to a function by value) and the compiler can determine (either
through analysing code or by deduction from a function signature) that during
the lifetime of cpy, no mutation is done to var nor to any data reachable from
it, the language should guarantee these two things:
1) cpy's postblit constructor is omitted when cpy is constructed
2) cpy's destructor is omitted when cpy goes out of scope

Examples:
Here are some examples, where the compiler can deduce that it's safe to omit
the postblit and destructor of cpy by merely looking at the function signature:
1)
int foo(T, U)(const Str cpy, const T t, immutable U u) pure { }

2)
void foo(T, U)(immutable Str cpy, T t, U u) { }

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


More information about the Digitalmars-d-bugs mailing list