Dicebot on leaving D: It is anarchy driven development in all its glory.
Eugene Wissner
belka at caraus.de
Tue Aug 28 08:18:57 UTC 2018
On Tuesday, 28 August 2018 at 07:53:34 UTC, Walter Bright wrote:
> Let's take the much-maligned D const. It isn't C++ const (let's
> call that "head-const", because that's what it is). Head-const
> for a function parameter tells us very little about what may
> happen to it in the function. You can pass a head-const
> reference to a container, and have the function
> add/change/delete every element of that container, all without
> a peep from any C++ tool. Looking at the function signature,
> you've really got no clue whatsoever.
>
> The reason people have trouble with transitive-const is that
> they are still programming in C++, where they *do*
> add/change/delete every member of the "const" container.
>
> That includes me. I try to add transitive-const, and it won't
> compile, because I as well am used to replacing the engine and
> tail lights in my head-const car. In order to use
> transitive-const, it's forcing me to fundamentally re-think how
> I organize code into functions.
>
> For example, dmd is full of functions that combine
> data-gathering with taking-action. I've been reorganizing to
> separate data-gathering and taking-action into separate
> functions. The former can be transitive-const, maybe even pure.
> And I like the results, the code becomes much easier to
> understand.
There are still valid use cases where const should be "broken".
One of them is mutex (another one caching). I have very little
experiance in multi-threaded programming, but what do you think
about "mutable" members, despite the object is const?
More information about the Digitalmars-d
mailing list