Head Const

ZombineDev via Digitalmars-d digitalmars-d at puremagic.com
Tue Feb 16 02:06:12 PST 2016


On Tuesday, 16 February 2016 at 09:39:31 UTC, Sönke Ludwig wrote:
> Am 16.02.2016 um 08:20 schrieb Ola Fosheim Grøstad:
>> On Monday, 15 February 2016 at 22:48:16 UTC, Walter Bright 
>> wrote:
>>> rears its head again :-)
>>>
>>> Head Const is what C++ has for const, i.e. it is not 
>>> transitive,
>>> applies to one level only. D has transitive const.
>>>
>>> What head const will do for us:
>>>
>>> 1. make it easy to interface to C++ code that uses const, as 
>>> currently
>>> it is not very practical to do so, you have to resort to 
>>> pragma(mangle)
>>>
>>> 2. supports single assignment style of programming, even if 
>>> the data
>>> is otherwise mutable
>>>
>>> The downside is, of course, language complexity.
>>
>> Maybe you can get away with adding "mutable", which is needed 
>> for
>> intrusive ref counting as well:
>>
>> C++:
>> Type * const ptr;
>>
>> struct ConstType {
>> mutable int rc;
>> }
>>
>>
>> D:
>> const mutable(Type)* ptr;
>>
>> struct ConstType {
>> mutable(int) rc;
>> }
>
> As a bonus, this would also provide a natural syntax to define 
> tail-const class references:
>
> mutable const(C) something;

Another bonus to introducing the mutable keyword is the option to 
make everything immutable by default (in a future version of D) 
and allow the users to have mutable objects only if they use the 
mutable keyword.



More information about the Digitalmars-d mailing list