digitalmars.D.bugs - [Issue 9139] New: `destroy` is dangerous and inconsistent
- d-bugmail puremagic.com (43/43) Dec 10 2012 http://d.puremagic.com/issues/show_bug.cgi?id=9139
- d-bugmail puremagic.com (12/12) Dec 10 2012 http://d.puremagic.com/issues/show_bug.cgi?id=9139
http://d.puremagic.com/issues/show_bug.cgi?id=9139 Summary: `destroy` is dangerous and inconsistent Product: D Version: D2 Platform: All OS/Version: All Status: NEW Keywords: wrong-code Severity: critical Priority: P2 Component: druntime AssignedTo: nobody puremagic.com ReportedBy: verylonglogin.reg gmail.com 22:40:28 MSK --- In our root `object` module we have a function "to reclaim non-memory resources without compromising memory safety" (yes, its a correct definition as it is what Andrei said and what it really do). The problem is that it works not only for classes but also for all other types and behaves differently for each type. As an example of the current situation danger consider the following code (an `std.algorithm.move` implementation): --- void move(T)(ref T source, ref T target) in { assert(&source == &target || !pointsTo(source, source)); } body { if (&source == &target) return; static if (hasElaborateDestructor!T) destroy(target); static if (hasElaborateAssign!T || !isAssignable!T) memcpy(cast(void*) &target, cast(const void*) &source, T.sizeof); else target = source; static if (hasElaborateCopyConstructor!T || hasElaborateDestructor!T) ... // set `source` to its `init` state here } --- This code compiles fine. And it looks fine not only for D newbies but also for rather skilled programmers. It also behaves fine in some cases. But it will do unpredictable things in other cases. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 10 2012
http://d.puremagic.com/issues/show_bug.cgi?id=9139 22:46:08 MSK --- A proposal how to fix this: 1. Create a function that equals to "out of scope" action as proposed in Issue 9137. 2. Remove any "out of scope" behavior from `destroy`. 3. Note in `destroy` documentation that it doesn't do any "out of scope like" actions and one have to use other function for such manual lifetime implementation. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 10 2012