I just got it! (invariant/const)

Janice Caron caron800 at googlemail.com
Wed Apr 9 11:04:07 PDT 2008


On 09/04/2008, Steven Schveighoffer <schveiguy at yahoo.com> wrote:
>  It's the
>  same reason you will be able to pass strings to a pure function.  A string
>  is mutable, but the data it points to is not.

No, that's because of Andrei's

    RULE 3:
    T implicitly converts to and from invariant(T) iff T refers to no
mutable memory

(from accu-functional.pdf)
Therefore, string implicitly casts to invariant(string).

Perhaps then, we may say that the parameters of a pure function should
be invariant, or implicitly castable to invariant?

Of course, it's /possible/ to write a pure function that takes mutable
pointers, e.g.

    int f(char[] s) pure?
    {
        return 42;
    }

but do we care? Wouldn't it just be easier to make that illegal and
insist that the programmer rewrite the function more sensibly?



More information about the Digitalmars-d mailing list