http://d.puremagic.com/issues/show_bug.cgi?id=11420
Summary: Inefficient AA value setting Product: D Version: D2 Platform: All OS/Version: All Status: NEW Keywords: performance Severity: major Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: k.hara...@gmail.com --- Comment #0 from Kenji Hara <k.hara...@gmail.com> 2013-11-02 05:51:21 PDT --- This is both dmd and druntime issue. By fixing issue 6178, AA value setting with opAssign behavior has been properly fixed in 2.064. struct S { int val; this(int v) { val = 1; } void opAssign(S) { val = 2; } } void main() { S[int] aa; aa[1] = S(1); // S(1) is moved in the newly allocated AA slot aa[1] = S(2); // opAssign(S1) is called on existing aa[1] value assert(aa.length == 1 && aa[1].val == 2); } But, the generated code is a little inefficient because it would search the given key twice. // aa[1] = S(1); is lowered to: 1 in aa ? aa[1].opAssign(S(1)) : aa[1].__ctor(1); // --> 1 in aa is the first key search. // --> aa[1] is the second key search. To fix the issue, we need to add a new internal function in druntime, and compiler should generate code which uses the function. The new function's spec is: - it takes at least two arguments, the AA and assigned value. - it should return two values, one is the allocated/found slot, and the other is a boolean flag which the returned slot is newly allocated or not. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------