Thoughts about std.experimental.all?

Seb seb at wilzba.ch
Fri Mar 22 09:21:40 UTC 2019


On Thursday, 21 March 2019 at 13:54:44 UTC, jmh530 wrote:
> On Thursday, 21 March 2019 at 12:12:00 UTC, Seb wrote:
>> [snip]
>>
>> OK. Thanks a lot for your support!
>> This is now in master and coming to your nearest DMD nightly 
>> and DMD 2.086:
>>
>>
>> https://dlang.org/changelog/pending.html#std-all
>
> Nice.
>
> Where it says
> "The baseline cost for import std; is less than half a second 
> (varying from system to system) and work is in progress to 
> reduce this overhead even further."

That's just a very negative estimate. On my machine it's less 
than 0.2s and the released DMD is still compiled with DMD - just 
imagine how fast it would be when we finally start shipping a DMD 
compiled with LDC.

> It would be interesting if there was a way to speed it up 
> specifically for something like run.dlang.org as well.

- compile DMD with LDC
- instantiate more modules lazily in Phobos

At the moment the entire std.uni trie is loaded and parsed, 
because IIRC std.net.curl has a struct that somewhere uses a type 
which through multiple layer's of inference depends on an 
instantiated std.uni. Potential fixes:

- make struct instantiation lazy (pretty hard as it touches a lot 
of DMD)
- make std.uni's table lazy (building them at CTFE is still 
pretty expensive)

Other ideas:
- fully lazy imports (this can work for selective and static 
imports)
- CTFE caching

I presume that's what you were thinking about. In theory, there's 
no need for the compiler to re-instantiate all the Phobos if it 
already has done so. There was quite a bit of work by Dmitry on 
this one, but somehow it died:

https://github.com/dlang/dmd/pull/7843

- do sth. like Vladimir's forking DMD compiler (i.e. serialize 
the compiler's state to disk)

https://blog.thecybershadow.net/2018/11/18/d-compilation-is-too-slow-and-i-am-forking-the-compiler

tl;dr: for now the easiest and still low-hanging fruit is to 
improve the compilation time of Phobos further.

Vladimir has written a great tool which helps with this:

https://github.com/CyberShadow/dmdprof


More information about the Digitalmars-d mailing list