[Issue 5081] New: Pure functions as initializers for immutable structures

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Oct 19 11:50:25 PDT 2010


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

           Summary: Pure functions as initializers for immutable
                    structures
           Product: D
           Version: D2
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: tomeksowi at gmail.com


--- Comment #0 from Tomasz Sowiński <tomeksowi at gmail.com> 2010-10-19 11:49:42 PDT ---
>From my post on D newsgroup:

Initializing immutable structures is a source of constant grief. Anything
non-trivial requires instancing a mutable structure, initializing it, and then
either casting to immutable (it's up to you to ensure no alias leaked) or, not
to violate the type system, duplicate the whole.

Yet, if there was a situation where the alias leaking is under control, casting
would be safe. Perhaps pure* functions are such a place. They can only touch
the immutable world, whether through globals or through their parameters. So if
one initializes the returned structure with a reference to the outside world,
it will be immutable. And if you stuff the structure with anything mutable, it
must have been created within the function's body, so no alias leaks.

I think it is safe to implicitly convert a pure function's return value to
immutable.

* here by pure I mean either the old pure** when it still had immutable
arguments, or Don's "immutably pure".

Pure functions could be used as follows:

pure T make(Args args) { ... }
unittest {
    T t = make(...); // good
    immutable T t = make(...); // also good
}

Michel Fortin also noticed a nice-to-have: if at the call site you know that
all the arguments you're feeding the function with are immutable, then you can
automatically cast the result to immutable, even if the function can also
accept const arguments.

-- 
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