Compile Imported Modules

Seb via Digitalmars-d digitalmars-d at puremagic.com
Thu Aug 24 09:49:08 PDT 2017


On Thursday, 24 August 2017 at 16:32:32 UTC, Jonathan Marler 
wrote:
> On Thursday, 24 August 2017 at 15:56:32 UTC, H. S. Teoh wrote:
>> On Thu, Aug 24, 2017 at 03:53:05PM +0000, Jonathan Marler via 
>> Digitalmars-d wrote:
>>> Wanted to get peoples thoughts on this.  The idea is to have 
>>> a way to tell the compiler (probably with a command line 
>>> option) that you'd like to "compile imported modules".
>> [...]
>>
>> Isn't this what rdmd already does?
>>
>>
>> T
>
> That is one thing that rdmd does (as I mentioned in the 
> original post).
>
> I just looked through the rdmd code 
> (https://github.com/dlang/tools/blob/master/rdmd.d) and it 
> looks like it invokes the compiler using "dmd -v" to get the 
> list of modules and then invokes the compiler again with the 
> modules it found to perform the full compile.  So my original 
> thought that the logic to find modules is duplicated was 
> incorrect.  Instead we just pay a performance hit to get the 
> correct list of imports since running "dmd -v" seems to take 
> almost as long as the actual compile itself.  So this method 
> comes close to doubling the time it takes to compile than if 
> the feature was implemented in the compiler itself.
>
> In any case, the idea is to allow the compiler to resolve this 
> on it's own without help from rdmd.  This would remove the need 
> to invoke the compiler twice, once to find the imports and once 
> to compile.  It would also allow some projects/applications 
> that don't use rdmd to take advantage of this feature, this may 
> or may not include dub (not sure on that one).

rdmd is really bad in terms of performance. If you call a single 
D file with rdmd, it will always compile it twice. There was an 
attempt to fix this (https://github.com/dlang/tools/pull/194), 
but this has been reverted as it introduced a regression and no 
one had time to look at the regression.
Moving rdmd into DMD has been on the TODO list for quite a while 
and there is a consensus that the performance overhead if rdmd 
isn't nice. However, IIRC there was no clear consensus on how the 
integration should happen. I recall that the plan was to do try 
this with "dmd as a library", but I'm not sure whether that's 
really feasible ATM.



More information about the Digitalmars-d mailing list