Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
October 12, 2010 mutable reference to const object | ||||
---|---|---|---|---|
| ||||
I want to have a mutable reference to a const object. So that I can reasign the reference but can not modifiy the object. Is this possible in D 2.0? I found tailconst in the const FAQ but as it is not implemented in D 2.0 I'm clueless how to realize this.
--
Kind Regards
Benjamin Thaut
|
October 12, 2010 Re: mutable reference to const object | ||||
---|---|---|---|---|
| ||||
Posted in reply to Benjamin Thaut | On Tue, 12 Oct 2010 13:07:59 +0400, Benjamin Thaut <code@benjamin-thaut.de> wrote:
> I want to have a mutable reference to a const object. So that I can reasign the reference but can not modifiy the object. Is this possible in D 2.0? I found tailconst in the const FAQ but as it is not implemented in D 2.0 I'm clueless how to realize this.
>
For pointers:
const(int)* c = new int();
c = new int(); // reassign
For references:
import std.typecons;
Rebindable!(Object) o = new Object();
o = new Object();
|
October 12, 2010 Re: mutable reference to const object | ||||
---|---|---|---|---|
| ||||
Posted in reply to Benjamin Thaut | On Tuesday 12 October 2010 02:07:59 Benjamin Thaut wrote:
> I want to have a mutable reference to a const object. So that I can reasign the reference but can not modifiy the object. Is this possible in D 2.0? I found tailconst in the const FAQ but as it is not implemented in D 2.0 I'm clueless how to realize this.
Use Rebindable!() in std.typecons. It's a struct which can hold a const or immutable object. When you want to reassign it, you merely assign it the new reference and a new struct is created to replace it.
Unfortunately, at this point, tail const has pretty much been decided to be too difficult implement and/or too difficult to do cleanly, so it's not in D and likely never will be. If it's mentioned in the online docs, the docs need to be updated. It's been a long time since there was any kind of tail const in D.
- Jonathan M Davis
|
October 12, 2010 Re: mutable reference to const object | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Jonathan M Davis Wrote:
> Unfortunately, at this point, tail const has pretty much been decided to be too difficult implement and/or too difficult to do cleanly, so it's not in D and likely never will be. If it's mentioned in the online docs, the docs need to be updated. It's been a long time since there was any kind of tail const in D.
>
> - Jonathan M Davis
What I have heard is that it can't be done syntactically for references. As Denis shows you can do it with points (and arrays) but not object references.
There are many syntax suggestion threads so I suggest search for them before bring it up again.
|
October 12, 2010 Re: mutable reference to const object | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jesse Phillips | On Tuesday, October 12, 2010 15:27:41 Jesse Phillips wrote:
> Jonathan M Davis Wrote:
> > Unfortunately, at this point, tail const has pretty much been decided to be too difficult implement and/or too difficult to do cleanly, so it's not in D and likely never will be. If it's mentioned in the online docs, the docs need to be updated. It's been a long time since there was any kind of tail const in D.
> >
> > - Jonathan M Davis
>
> What I have heard is that it can't be done syntactically for references. As Denis shows you can do it with points (and arrays) but not object references.
>
> There are many syntax suggestion threads so I suggest search for them before bring it up again.
Yes, you can do it with pointers, but not with references, and it causes problems for stuff like ranges. There have been several discussions on it over time, and Walter has pretty much said that it's not a feature that's going to happen. He spent too much time on it before without success to want to try at it again.
- Jonathan M Davis
|
October 14, 2010 Re: mutable reference to const object | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Tue, 12 Oct 2010 18:54:49 -0400, Jonathan M Davis <jmdavisProg@gmx.com> wrote:
> On Tuesday, October 12, 2010 15:27:41 Jesse Phillips wrote:
>> Jonathan M Davis Wrote:
>> > Unfortunately, at this point, tail const has pretty much been decided
>> to
>> > be too difficult implement and/or too difficult to do cleanly, so it's
>> > not in D and likely never will be. If it's mentioned in the online
>> docs,
>> > the docs need to be updated. It's been a long time since there was any
>> > kind of tail const in D.
>> >
>> > - Jonathan M Davis
>>
>> What I have heard is that it can't be done syntactically for references. As
>> Denis shows you can do it with points (and arrays) but not object
>> references.
>>
>> There are many syntax suggestion threads so I suggest search for them
>> before bring it up again.
>
> Yes, you can do it with pointers, but not with references, and it causes
> problems for stuff like ranges. There have been several discussions on it over
> time, and Walter has pretty much said that it's not a feature that's going to
> happen. He spent too much time on it before without success to want to try at it
> again.
If someone were to do the work, and the syntax was bearable, it might be considered. I think Walter no longer wants to accept any ideas without proof that they will work -- he's already worked enough on trying to implement tail-const.
I personally think tail const is going to be a very important feature that will not be solvable via the library. Tail-const ranges are going to be very important when it comes to things like collections.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation