digitalmars.D.bugs - [Issue 10012] New: [2.063 beta] pure constructors taking POD structs should be allowed for shared/immutable construction
- d-bugmail puremagic.com (43/43) Apr 30 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10012
- d-bugmail puremagic.com (8/9) Apr 30 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10012
- d-bugmail puremagic.com (17/17) Apr 30 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10012
- d-bugmail puremagic.com (12/27) May 04 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10012
http://d.puremagic.com/issues/show_bug.cgi?id=10012 Summary: [2.063 beta] pure constructors taking POD structs should be allowed for shared/immutable construction Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: sludwig outerproduct.org PDT --- The following snippet errors out: --- struct S { } class Test2 { this(S) pure {} } void main() { auto test2 = new shared Test2(S()); auto test3 = new immutable Test2/(S()); } --- test_shared.d(7): Error: mutable method test_shared.Test2.this is not callable u sing a immutable object test_shared.d(7): Error: incompatible types for ((new immutable(Test2)) / (S())) : 'immutable(Test2)' and 'S' However, since any instance of S is an independent copy, the resulting object is still unique and thus should be liable for immutable or shared object construction. Also, in addition to POD types, types containing only immutable references should be allowed. Finally, shared references can also be allowed when constructing a shared object, but this is a different kind of "unique" or "isolated" concept - I call it "weakly isolated" in my library implementation [1] following the "weakly pure" nomenclature - so this may need some bigger changes. [1] https://github.com/rejectedsoftware/vibe.d/blob/6c9efa2fdcef1797c84e58483410f262a2a82d67/source/vibe/core/concurrency.d#L958 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 30 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10012auto test3 = new immutable Test2 / (S()); // unnecessary '/'auto test3 = new immutable Test2(S()); After the fix, the code would work. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 30 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10012 PDT --- Sorry, I was blind while preparing the test case. This is the correct one: --- struct S { string str; } class Test { S _s; this(S s) pure { _s = s; } } void main() { auto test2 = new shared Test(S()); auto test3 = new immutable Test(S()); } --- So POD indeed works right, but immutable (and shared) references are seemingly disallowed. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 30 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10012 Kenji Hara <k.hara.pg gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |rejects-validSorry, I was blind while preparing the test case. This is the correct one: --- struct S { string str; } class Test { S _s; this(S s) pure { _s = s; } } void main() { auto test2 = new shared Test(S()); auto test3 = new immutable Test(S()); } --- So POD indeed works right, but immutable (and shared) references are seemingly disallowed.This is current dmd implementation limitation. In complex cases dmd cannot detect that the constructor generates unique object. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 04 2013