DIP10005: Dependency-Carrying Declarations is now available for community feedback
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Fri Dec 23 08:25:41 PST 2016
Major update adding an experiment that shows the cost of top-level imports.
https://github.com/dlang/DIPs/pull/51
https://github.com/dlang/DIPs/blob/a3ef4e25cfb9f884fee29edb5553a3a2b840f679/DIPs/DIP1005.md
Relevant added text:
Another matter we investigated is how reducing top-level imports
influences build times and the size of the object files produced. We do
not have an experimental implementation of this DIP, so measuring impact
directly was not possible. We did the converse experiment---adding
top-level imports.
In a separate branch of the standard library code, for each module we
added all nested imports back to the top level. Some hand-editing was
needed after that because of clashes in symbol names. Also, some imports
needed to be removed because of circular dependencies and related
limitations in the language's design and implementation. The resulting
setup can be seen in
[PR4992](https://github.com/dlang/phobos/pull/4992). Then for each
module in the standard library we compiled one file that consists of
exactly one `import` declaration, monitoring compile time and object
file size. Appendix B displays build times and size of object files
produced by this experiment.
|Aggregate|Time (top-level)|Time (nested)|Object size (top-level)|Object
size (nested)|
|---|---|---|---|---|
|Median|320ms|13788|32ms|4296|
|Average|287.6ms|13437.2|64.6ms|5734.1|
As expected, the experiment shows that both build times and object file
sizes were improved by moving imports away from the top level. We
estimate that eliminating the 10.5x slack dependency fan-in will bring
import costs down to negligible and also bring object file size down.
Andrei
More information about the Digitalmars-d
mailing list