Head Const

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 18 04:16:30 PST 2016


On Thursday, 18 February 2016 at 12:03:00 UTC, Walter Bright 
wrote:
> On 2/18/2016 2:47 AM, Timon Gehr wrote:
>> On 18.02.2016 10:24, Walter Bright wrote:
>>> On 2/17/2016 11:58 PM, Timon Gehr wrote:
>>>> const(headconst(T)) is the same as const(T), no?
>>>
>>> Er, yes?
>>
>> Jonathan wanted to embed a mutable reference count within a 
>> const object.
>> Contrary to your suggestion, headconst won't help with that.
>
>
> Of course it will:
>
> headconst pointer -> pointer -> refcount
>                   -> const pointer -> ... constant stuff ...

Sure, until you need to put that headconst pointer in a const 
object or pass it to a function that takes const. Then the whole 
thing is const, and the refcount doesn't work. Remember that C++ 
has headconst, and it still needs the mutable keyword in order to 
solve these problems. Also, adding headconst is suddenly going to 
create this dichotomy between const and headconst where you have 
to figure out which to use and where they really don't interact 
nicely, because you can't pass a const object to something that 
takes headconst, and if you do pass a headconst object to 
something that takes const, then all of the stuff like 
ref-counting stops working. In a way, we'd be forking D between 
const and headconst. Some code would use one, and some code would 
use the other. And neither of them really solves the problem that 
the mutable keyword solves. Neither of them allows for any kind 
of logical const, and _that_ really is the problem that people 
keep complaining about and want solved.

headconst may solve the extern(C++) problem, but it really 
doesn't solve the problems we have with const. At best, it 
reduces them slightly while introducing a whole extra set of 
complications to an already complicated language.

- Jonathan M Davis


More information about the Digitalmars-d mailing list