Using closure in function scope to make "real" private class members
forkit
forkit at gmail.com
Sat Jun 4 11:15:13 UTC 2022
On Saturday, 4 June 2022 at 07:04:35 UTC, Ali Çehreli wrote:
>
> ...
> I think the reason is there is no strong argument for one way
> or the other. There are two options:
>
> a) 'private' means "private to the class", which necessitates
> the equivalent of the keyword 'friend'. This option is what C++
> chose.
>
> b) 'private' means "private to the module", which frees
> 'friend' as a user symbol. This option is what D chose.
>
> > I really do think there is idealogical resistance to such a
> change, and
> > it's this that brings about these strong reactions.
>
> Since D came after C++, it is clear that option b was seen to
> be superior. Let's hear arguments why option a is better than b.
It's interesting that whenever this topic is brought up, that
people in the D community (like you, for example), try to
rephrase it as if we're all being forced to make a choice between
A *or* B.
I'd like to have A *and* B.
You normally come up with ideas to issues that people raise (even
ideas that to me see pretty ordinary), except, when it is this
issue??
Why this idea encounters sooo.. much resistance, is..well.
interesting.
The rest of your response I couldn't make any sense of.. so I'll
ignore it.
In the end though, encapsulation of a class, in D, is broken, and
cannot be statically verified by the compiler, unless you put
that class in it's own file (which is what you're expected to do
anyway, based on the reponses this idea always provoke).
Since there is no option B, to do otherwise, is what I would
consider unsound programming, as it is not possible to reason
about the code of the class contained within a module, without
understanding ALL the code in that module.
It's also not possible to prove (again, without human
intervention) that other code in the module does not violate the
modular requirements of the class.
A possible counter agrument to the above, is that there is no
encapsulation of a class in D. The module provides all the
encapsulation anyone will ever need.
I'm not sure I'd want to be on that side of the argument ;-)
More information about the Digitalmars-d
mailing list