Who can make Phobos faster to import?

Joakim dlang at joakim.fea.st
Wed Dec 27 15:12:28 UTC 2017


On Wednesday, 27 December 2017 at 10:40:38 UTC, RazvanN wrote:
> On Tuesday, 26 December 2017 at 15:38:14 UTC, Joakim wrote:
>> On Tuesday, 26 December 2017 at 13:27:38 UTC, RazvanN wrote:
>>> 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:
>>>>> 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.
>>
>> I doubt that's it, as I noted I was running the standard dmd 
>> main from mars.d.  More likely it tries to run asmSemantic on 
>> an asm block in core.atomic and asserts because that 
>> function's stubbed out when there's no backend.
>>
>>> Anyway I am working on this sort of tool also, so maybe we 
>>> can unite our efforts.
>>
>> As in the `depend` import-scoping tool that Andrei wanted 
>> above?  If so, that'd be great, as you know the frontend much 
>> better than me.  I've been meaning to investigate how to 
>> extract a scope tree from the frontend, as I've never done 
>> much with dmd.
>>
>> Let me know how far you've gotten and what you want it to do 
>> initially, and maybe I can pitch in with your effort.
>
> Yes, that was the tool I was talking about. I was thinking that 
> the first
> version of the tool just outputs for each import what the used 
> symbols are;
> for example : if you import std.stdio and use 3 symbols from 
> it, the tool will output "std.stdio: sym1, sym2, sym2" and then 
> the programmer can update the code accordingly. After 
> developing this initial version we can think on how to improve 
> it.
>
> For now, my tool only identifies imported non-templated 
> functions, but I plan on adding support variables, types etc.

I think I did all this with a dead-simple patch to dmd three 
years ago:

http://forum.dlang.org/thread/pbpckzwmfglzgwqveoza@forum.dlang.org

I used that tweaked dmd to scope imports for some modules in 
phobos last summer:

https://github.com/dlang/phobos/pulls?utf8=✓&q=is%3Apr+author%3Ajoakim-noah+is%3Aclosed+"selective+imports"

That's much better than the alternative of tracking the imported 
symbols down yourself, but it's still a pain to edit the files 
manually.  I'd rather it were integrated with Brian's libdparse 
to modify the source for you:

https://github.com/dlang-community/libdparse/

> We can chat on slack more about this if you are interested.

I don't use slack or any other chat platform.  Probably best to 
stick to the forum or github, so that anyone else who's 
interested can follow along.


More information about the Digitalmars-d mailing list