DIP10005: Dependency-Carrying Declarations is now available for community feedback
Chris Wright via Digitalmars-d
digitalmars-d at puremagic.com
Sat Dec 24 14:35:00 PST 2016
On Fri, 23 Dec 2016 23:41:46 -0500, Andrei Alexandrescu wrote:
> On 12/23/16 9:23 PM, Chris Wright wrote:
>> The comparison to mach.d is a strawman.
>
> The mach.d is given as an example of the approach of breaking code into
> fine-grained module. No comparison is made or implied.
"Assuming module size is a project invariant, the number of files scales
roughly with project size. This means mach.d would need 2000 files to
scale up to the same size as the D standard library"
That's a direct comparison that you made. You might want to remove that
from the proposal if you don't want to compare them.
> Could you please give more detail about the method you used?
An insufficient one.
(I would think this sort of analysis would generally be the burden of the
proposer, generally.)
https://gist.github.com/dhasenan/681b5178672556aa0e5ec8fb4c9eae7e uses
dmd's json output instead of regular expressions and should be rather
better.
This shows a total of 35 templates used in template constraints, 124
usages in total.
The quick usage breakdown:
1 std.experimental.ndslice.internal
1 std.experimental.ndslice.slice
24 std.meta
31 std.range.primitives
66 std.traits
1 std.typecons
Notable mentions: the ndslice templates are used only in other ndslice
modules, and the std.typecons reference is from
std.experimental.typecons. So it's still ~10ms of overhead, by both our
measurements.
> And again the
> feature's benefits go well beyond making general projects faster to
> build.
You may as well remove the parts about compilation efficiency from the
proposal entirely, then.
The DIP's points here aren't invalid. However, static and selective
imports work nearly as well. A doc generator that turns referenced
identifiers into links (like dpldocs.info) works nearly as well for
reading. For moving files between modules, that's relatively rare, and
fixing imports is a small part of it. (In the worst case, I can copy all
imports over and use dustmite to reduce them. Or just leave them.)
It provides small occasional benefits for a nontrivial maintenance cost.
At least it doesn't mandate that I use it.
> A simple way to look at things is - local imports are The Right Thing,
> for many reasons beyond compilation speed. There needs to be a way to do
> the right thing for the declaration part as well.
Function-scoped imports are a good way to hide implementation details
from people who don't need them.
More information about the Digitalmars-d
mailing list