Extended Type Design.
kris
foo at bar.com
Fri Mar 16 13:43:08 PDT 2007
Walter Bright wrote:
> Benji Smith wrote:
>
>> I should also add that, in my opinion, any design where "const" means
>> something other than "value resolved at compile time and immutable at
>> runtime" would be a mistake.
>
>
> I hear you. I've always disliked C++'s mutable const.
>
> The most important thing at this stage is not the keyword, however, but
> getting the design right. Andrei, myself and Bartosz have been to hell
> and back several times over this over the last few months, and have
> filled about two notebooks with scribblings. It's a difficult problem.
>
> There are 3 distinct, and very different, flavors of constant:
>
> 1) rebinding of a value to a name
> 2) a read-only view of a data structure
> 3) a value that never changes
>
> C++ tries to do all three with one keyword, and makes a confusing hash
> of it.
>
> For the purposes of discussion, and to avoid confusing ourselves, we
> adopted working names of:
> 1) final
> 2) const
> 3) super const
>
> The hard part is to figure out how these 3 interact, how they look &
> feel, how they work with type deduction, type inference, type combining,
> how do we sidestep the clumsiness in C++'s handling of it, etc.
>
> Once that's all done, picking the right keywords is a whole 'nother
> discussion, with several considerations:
> 1) common use of 'const' in C++, and the expectations and comfort people
> coming from C++ have with it
> 2) your point above, that const should be constant
> 3) keyword minimization
> 4) avoid stepping on commonly used names
> 5) ease and economy of typing
Glad to hear you guys are open to considerations. For purpose of
discussion, you /could/ adopt the following instead:
1) final - rebinding of a value to a name
2) view - a read-only view of a data structure
3) constant - a value that never changes
Not only is that pretty clear, it also dumps the "const" keyword that
may otherwise cause some "adjustment" for C++ people
More information about the Digitalmars-d
mailing list