On Tuesday, 15 May 2018 at 05:59:44 UTC, Mike Parker wrote:

Jonathan's right. We're just not going to agree on this.

The purpose of discussion is not necessarly to get one side to agree with other side.

You can keep your grouping and get your strict encapsulation like so:

// foo/bar/baz/package.d
module foo.bar.baz;
public import
    foo.bar.baz.a,
    foo.bar.baz.b,
    foo.bar.baz.c,
    foo.bar.baz.funcs;

The client need neither know nor care that everything is in separate modules and you get your strict encapsulation. You can still share items between modules via package protection, and within specific package hierarchies via package(packageName). And even better, you now have less code per module to reason about (re: one of your earlier arguments against the current behavior).

Fine. If I take your solution above, and ensure that every class, goes into it's own module, and that a module containing a class, contains nothing other than a single class (i.e no free functions), then sure, I end up where I am now, with C++/Java/C# - i.e a good place, where I feel comfortable. My declared interface is respected.

Why do I need D then? i.e. under what circumstances, would I want to put something extra into the module, so that it can abuse the declared interface of my class?

Can you give me some examples?

Reply via email to