Code That Says Exactly What It Means
Peter C
peterc at gmail.com
Tue Oct 28 20:59:06 UTC 2025
On Tuesday, 28 October 2025 at 08:37:46 UTC, Walter Bright wrote:
> On 10/27/2025 11:47 PM, Peter C wrote:
>> The internal state of this type, in D, 'automatically' leaks
>> into the rest of the module.
>
> Yes. If you want to hide the internals of a class, put it in
> its own module. The "friends" then can no longer access the
> internals.
>
>
> > So what's the problem then?
>
> Every feature adds complexity. At some point, the language
> becomes unwieldy, where nobody knows the entire language, and
> people use only islands of it (see C++). Maintaining a language
> is always a battle with complexity. Having too many ways to
> accomplish the same goal is not very desirable.
>
> Your proposal does indeed have merit. But is it a big enough to
> justify a new keyword, and more documentation? The more pages a
> language spec has, the fewer people will read it. People love
> languages that can do a lot with very few pages. You could
> learn C in an hour reading K+R. I remember when Go was
> introduced and people loved that they could learn Go in just
> one lecture.
>
> It needs more to justify it.
>
> P.S. The major driver of the new "editions" feature is to
> enable us to remove features that do not carry their weight,
> and that have easy alternatives. It's not that they are useless
> features. It's just that features should have a big impact. For
> example, Manu and Timon convinced me that placement new would
> have a substantial impact on what could be done with D.
>
> P.P.S. I do appreciate the time you took to present your
> proposal. You've thought it out well. Thank you!
Your position is clear, and I won't push it further.
When a programming language actively and intentionally prevents
me from being explicit about how the members of my class can be
accessed, the programming language becomes irrelevant to me.
Taking away a tool that millions of programmers use, it not going
to get D the audience it 'supposedly' desires.
I can't even do this in D!
// Compile-time visibility tests
unittest
{
auto acc = new Account(5, "Eve", 400.0, "tok5");
// Allowed:
static assert(__traits(compiles, acc.getBalance()));
// Forbidden (scopeprivate):
static assert(!__traits(compiles, acc.balance));
static assert(!__traits(compiles, acc.authToken));
}
I am very fortunate being a C# programmer, as I do not need to
seek a successor language ;-)
Good luck with the future of your language.
More information about the Digitalmars-d
mailing list