Who can make Phobos faster to import?
RazvanN
razvan.nitu1305 at gmail.com
Tue Dec 26 13:27:38 UTC 2017
On Thursday, 21 December 2017 at 03:31:16 UTC, Joakim wrote:
> On Wednesday, 20 December 2017 at 18:21:33 UTC, Andrei
> Alexandrescu wrote:
>> On 12/15/2017 02:10 PM, Seb wrote:
>>> [...]
>>
>> Dmitry wrote a nice PR for that, and I wrote two:
>>
>> https://github.com/dlang/phobos/pull/5942
>> https://github.com/dlang/phobos/pull/5931
>> https://github.com/dlang/phobos/pull/5948
>>
>> My approach has been the following:
>>
>> * First I tried to clarify which module imports what by means
>> of replacing "import std.xxx;" with "import std.xxx : yyy,
>> zzz, ...;" That has been of tremendous help in assessing each
>> module's dependency liability.
>>
>> * Then I tried to figure which imports are most costly. I
>> inserted __EOF__ in the module at different parts and measure
>> how long it takes to just import that module. After a few
>> attempts it becomes clear which imports are heaviest.
>>
>> * Then I pushed those heavy imports down where they're needed.
>> An import placed in a function will not be opened while that
>> function's module gets imported. Same goes about template
>> types, but not structs or classes. (That should be fixed; see
>> Seb's comment in my last PR.)
>>
>> Not only such work reduces import times, but it's illuminating
>> for maintenance because it represents dependencies in a
>> simple, fine-grained matter.
>>
>> A tool (call it depend - heh) to automate that would be
>> awesome. For example, this run would make all imported names
>> explicit:
>>
>> depend --explicit *.d
>>
>> This run would push all imports down to the innermost scope of
>> usage:
>>
>> depend --pushdown *.d
>>
>>
>> Andrei
>
> I'm on it. I tried using a version of Seb's frontend library
> yesterday but with the standard dmd main and tried running it
> on std.stdio, but it asserted in asmSemantic because of an asm
> block somewhere in druntime, so I'm back to using a tweaked
> full dmd with the backend simply disabled again:
I ran into the same issue. The problem was that currently the
frontend
doesn't set the version identifiers. There's a PR which tries to
fix it [1],
but if you want to go back at using the compiler library via
Seb's interface
you just have to call this method [2] in the initialization step.
Anyway I am working on this sort of tool also, so maybe we can
unite our efforts.
Ping me if you wish so,
[1] https://github.com/dlang/dmd/pull/7524
[2] https://github.com/dlang/dmd/blob/master/src/dmd/mars.d#L1314
>
> https://github.com/dlang/dmd/pull/7425
> https://github.com/dlang/dmd/blob/master/src/dmd/gluelayer.d#L47
> https://gist.github.com/joakim-noah/09cf49bee3d82b03a54f
>
> Once I have something basic working, I'll put it up on github,
> so others who are interested can play with it and pitch in to
> make it a real tool.
Best regards,
RazvanN
More information about the Digitalmars-d
mailing list