Aliasing immutable and mutable data

Denis Koroskin 2korden at gmail.com
Wed Mar 11 06:29:59 PDT 2009


On Wed, 11 Mar 2009 16:18:17 +0300, dsimcha <dsimcha at yahoo.com> wrote:

> Is doing something like:
>
> auto someInstance = new immutable(SomeClass);
>
> considered to be casting, where all bets are off, or is it supposed to be
> safe?  If it's supposed to be safe,  below is an example of where it's  
> not.
> If it's supposed to be like casting, then what's a safe way of creating
> immutable class instances?
>
> import std.stdio;
>
> uint[] array;
>
> class A {
>     uint[] AArray;
>
>     this(uint[] inArray) {
>         AArray = inArray;
>     }
> }
>
> void main() {
>     array = new uint[10];
>     auto bar = new immutable(A)(array);
>     writeln(bar.AArray);
>     array[0] = 1;
>     writeln(bar.AArray);
> }

http://www.digitalmars.com/d/2.0/accu-functional.pdf

IIRC, the following syntax was proposed:

auto foo = new invariant Foo(arg1, arg2);

class Foo
{
    this()
    {
        // mutable version
    }

    this() invariant
    {
        // invariant version (with check and stuff, not implemented yet)
    }
}




More information about the Digitalmars-d mailing list