Does D have too many features?

David Nadlinger see at klickverbot.at
Sun Apr 29 21:58:18 PDT 2012


On Monday, 30 April 2012 at 01:08:28 UTC, Jonathan M Davis wrote:
> On Sunday, April 29, 2012 17:50:48 Don wrote:
>> * package. I have no idea how a failed Java experiment got 
>> incorporated
>> into D.
>
> Really? In some cases, it's indispensable. For instance, once 
> std.datetime has
> been split up, it will require it, or it would have duplicate a 
> bunch of
> implementation-specific stuff which has no business in the 
> public API.

But what happens if std.datetime grows so large that you want to 
have e.g. a std.datetime.system package, the content of which is 
accessible from std.datetime.*, but not the rest of the world?

This is not an artificial problem, e.g. consider Thrift, where I 
have e.g. thrift.internal.endian (predating endian stuff in 
Phobos) which is used from modules in thrift.async, 
thrift.server, and thrift.protocol, or thrift.internal.socket 
(containing some more OS abstractions than std.socket does), 
which is used from modules in thrift.async, thrift.server, and 
thrift.transport, but both are not part of the public API.

The logical »package« to restrict access to would be 
»thrift.*« here, but there is no way to restrict access to 
that, I have to resort to hoping users understand that they 
should not use »thrift.internal.xyz« directly. Phobos has the 
same problem with std.internal.

I think in Java this problem was the reason for »super 
packages« to be discussed which (I think, haven't followed it 
the developments closely) ended up being incorporated in the 
upcoming Module System feature.

David


More information about the Digitalmars-d mailing list