How to make a slow compile

evilrat evilrat666 at gmail.com
Thu Aug 21 14:59:45 UTC 2025


On Thursday, 21 August 2025 at 13:52:32 UTC, Monkyyy wrote:
> On Thursday, 21 August 2025 at 05:38:08 UTC, evilrat wrote:
>> On Wednesday, 20 August 2025 at 15:33:45 UTC, monkyyy wrote:
>>> once again dconf contains people who talk about compile speed 
>>> as if it can be slow
>>>
>>> What are they doing? Even my worse compile time abstraction 
>>> was O(n^2) or maybe some awful string concatenation of an 
>>> entire file; still effectively instant
>>>
>>> Wheres a 1000 line file that does something meta 
>>> programmingly useful that takes 5 minutes?
>>>
>>> Do they lose track of what the compiler is even doing? Do 
>>> they turn off the template recursion depth limit?
>>
>> I have godot-dlang builds (with dub/LDC) compiling for about 3 
>> minutes on top hardware. But this is more of a config issues 
>> and how LDC handles all that code symbols(functions, etc...), 
>> having to build a spaghetti templates for over 1k classes is 
>> no joke. This is something i am planning to look into, having 
>> a tiny WASM game scripts for 30 Mb shared library is no fun. 
>> This is mainly because it uses dub import-paths AND 
>> source-paths together for usability simplicity reasons. Would 
>> be much faster to remove source-paths and properly configure 
>> D's -i include pattern, that requires figuring dub 
>> configuration that properly uses predefined env variables.
>
>> spaghetti template
>
> Can you post what you believe is slow?
>
> Can dub cause 3 minute compiles, I would've thought it would 
> O() based on file count (reading json badily into concat a 
> unnesserily complex compile commmand) is dub some how worse 
> then I thought possible?

Like i've said it is from the fact that the project tries to 
build over 1k classes, an entire godot API.
It does templated binding calls, parameter conversions, class 
registration, etc...
This is also related to LDC's way of managing symbol visibility 
for shared libraries, it simply does not knows what needed, 
except maybe the simplest cases, can be partially solved with 
doing `dub --build-mode=allAtOnce`.
DMD on the other hand does all this in just seconds.
here is a cold full rebuild using DMD on windows
`godot-dlang> measure-command { dub build :test }`
`TotalSeconds      : 13,9210259`
and a build after minor change
`TotalSeconds      : 1,7115313`




More information about the Digitalmars-d-learn mailing list