On Wednesday, 18 December 2013 at 21:11:10 UTC, Joseph Rushton Wakeling wrote:
On 18/12/13 21:11, ilya-stromberg wrote:
Sorry if I miss something, but I don't understand this analogy.

`const` means that original type can be `mutable` or `immutable`, so both `mutable` and `immutable` types can be implicitly converted to the `const` type.

If I understand DIP correctly, unique postblit/constructor returns `unique` type that can be implicitly converted to the all of `mutable`, `immutable` and `const` types. So, this behavior is the opposite of current `const` behavior.

So, where is analogy here?

Well, as far as I understand it (happy to be corrected if wrong), the point of this DIP is to offer a way to _easily_ create immutable and const instances of objects (which as I recall from the last time I tried to do it, is a real PITA).

So, you have your regular mutable constructor -- 'this' with no qualifications -- which can be used to construct mutable instances.

You have this(...) immutable, which can be used to construct immutable instances.

And you have this(...) const (aka "unique"), which can be used to construct both immutable and mutable instances.

It seems to me that this is a very natural relation to the existing interpretation of mutable, immutable and const variables by the language, and e.g. the way that immutable, mutable and const function parameters are addressed.

I understood your position, but it's bad analogy because we can have both `const` and `unique` postblits/constructors (at least in theory).

I want to say that compiler can implicitly convert `mutable` and `immutable` types to the `const` type, but we can add `const` postblit/constructor for better control this cast (of course, only if we decide that it's really need).

In other hand, `unique` postblit/constructor creates `unique` type that can be implicitly convert to the `mutable` and `immutable` types. It's different things.

So, theoretically we can have both `const` and `unique` postblits/constructors. We shouldn't mix 2 different semantics.

I think the main problem with this DIP is `unique` postblit/constructor because we don't know what exactly means `unique`. Maybe we should write another DIP with this description or don't implement `unique` postblit/constructor (for now, I hope).

Reply via email to