Congratulations to the D Team!

David Piepgrass qwertie256 at gmail.com
Wed Jul 11 17:10:23 PDT 2012


On Wednesday, 11 July 2012 at 18:21:24 UTC, Steven Schveighoffer 
wrote:
> On Wed, 11 Jul 2012 14:01:44 -0400, deadalnix 
> <deadalnix at gmail.com> wrote:
>
>> On 11/07/2012 19:49, Andrei Alexandrescu wrote:
>>> On 7/11/12 1:40 PM, Jakob Ovrum wrote:
>>>> Some classes don't lend themselves to immutability. Let's 
>>>> take something
>>>> obvious like a class object representing a dataset in a 
>>>> database. How is
>>>> an immutable instance of such a class useful?
>>>
>>> This is a good point. It seems we're subjecting all classes 
>>> to certain
>>> limitations for the benefit of a subset of those classes.
>>>
>>> Andrei
>>
>> Did you saw the proposal of feep/tgehr on #d ?
>>
>> It basically state that you can overload a const method with a 
>> non const one if :
>>  - You don't mutate any data that belong to the parent.
>>  - You are prevented to create any immutable instance of that 
>> classe or any subclasse.
>
> I don't like this idea.  It means you could not use pure 
> functions to implicitly convert mutable class instances to 
> immutable (something that should be possible today).

I do like the idea. Please explain by example why a pure function 
could no longer convert mutable class instances to immutable? The 
proposal to restrict the use of immutable is only supposed to 
affect classes that specifically request it.

> It also seems to allow abuses.  For example:
>
> class A
> {
>    private int _x;
>    public @property x() const { return _x; }
> }
>
> class B : A
> {
>    private int _x2;
>    public @property x() { return _x2++; }
> }

I think you would have to mark B somehow to indicate that 
immutable(B) is now illegal, e.g.

@mutating class B : A
{
    private int _x2;
    public @property override x() { return _x2++; }
}

> Now I've completely changed the logistics of the x property so 
> that it's essentially become mutable.

This kind of perversion is already possible when x() is const. 
x() is allowed to mutate and return a static or global variable.


More information about the Digitalmars-d mailing list