On Monday, 5 November 2018 at 09:03:59 UTC, Stanislav Blinov wrote:
On Monday, 5 November 2018 at 05:55:02 UTC, unprotected-entity wrote:
On Saturday, 3 November 2018 at 21:28:22 UTC, Stanislav Blinov wrote:

The only difference is that `func` became a member function. And now what? You can just as easily "forget" what's in your struct/class as in your whole module.

ok. Now, what are your options then (assuming you want an independent type)?

(option 1) define one encapsulated type, per module.
(option 2) have a means for type independence within a module - i.e. selective hiding.

Option 3 - don't access private state unless you intend to. That's literally how you write implementations, in pretty much any language that has access modifiers.

D only gives you one choice here, not two.

Nope. You can have a type spanning several modules. That's what packages do, among other things.

I would say, that your response backs up my argument, that is, a second option might actually be worthwhile. perhaps, something like: __private

No, it really doesn't. Your argument was that the programmer might accidentally forget, and I've shown quite clearly that no keyword is going to protect them from that. If you can forget in module scope, you can forget in class scope. There can be only one solution: don't forget. As in: stop inventing imaginary examples. People, in practice, don't "accidentally" modify the guts of their own types. That horse is quite dead, I'm afraid.

(now __private is everything private already is, but additionally, its private outside the scope of the type declaring it, and now, you'd get a compile time guarantee of correctness - e.g. if you accidently tried to ignore that types independence.

No, you do not. You still have that same "problem" inside the type's definition.

It's call 'type encapsulation' ;-)

If you're afraid of implicit conversions, define your own type that disallows them, problem solved. Has nothing to do with private. That is what's called 'type encapsulation'.

I'm glad you've worked only with excellent programmers, who in solitary write code in a module, knowing it to perfection, until the end of time.

And I'm also glad you did not have to debug inherited code, maybe before the packages existed, tens of thousands of lines, and to make sure you do not start you had to cut and sew classes and private structures, just to check that the intentions of the programmer, who perhaps was not as good as you are.

This your reiterate to every topic, thread, or question post on these forums with a "NO", is simply pathetic, as Manu has expounded a few weeks ago.

Get off your pedestal, and drop into the real life of those who program in D with colleagues not as perfect as you are.

Reply via email to