Thread overview
[Issue 10527] New: Eliding more postblit constructor calls
Jul 03, 2013
Tommi
Jul 03, 2013
Tommi
Jul 03, 2013
Tommi
July 03, 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@puremagic.com
        ReportedBy: tommitissari@hotmail.com


--- Comment #0 from Tommi <tommitissari@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: -------
July 03, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10527



--- Comment #1 from Tommi <tommitissari@hotmail.com> 2013-07-03 04:12:00 PDT ---
(In reply to comment #0)
> [..] 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

Let's change this proposal so that the language would guarantee to do those optimisations only when it can deduce that it can be done from looking at function signatures. And the compiler can choose whether or not it wants to try to do more postblit/destructor elisions through static analysis.

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



--- Comment #2 from Tommi <tommitissari@hotmail.com> 2013-07-03 06:55:55 PDT ---
(In reply to comment #0)
> 2) 'var' is a variable whose unqualified type is Str

By this I mean:
is(std.traits.Unqual!(typeof(var)) == Str)

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