Weird template instantiation speed?
IchorDev
zxinsworld at gmail.com
Sun Jul 9 15:36:14 UTC 2023
On Sunday, 9 July 2023 at 14:49:39 UTC, Steven Schveighoffer
wrote:
>
> This is probably a bug somewhere, 4 seconds is too much. A
> reduced test case would be helpful.
>
> But I wanted to note, inside a struct template, the template
> name (by itself) is equivalent to the current instantiation. So
> just returning `BindingTempl` would be equivalent, and might
> not trigger this problem.
>
> See if that helps.
>
> -Steve
Thank you for letting me know about being able to use
`BindingTempl`, I had no idea! Unfortunately it doesn't mitigate
the compile times, though.
I forgot to mention, it only happens when specifying `-O` with
DMD. LDC and GDC compile the same thing almost instantly.
Boiling it down to a simple test is tough. If you remove a lot of
components the struct template depends on then the compile time
is too fast for anything to be noticeable. I think the issue is
some kind of snowball-effect.
If anyone wants to try to reproduce this issue:
1. Download [this exact
commit](https://github.com/ichordev/bindbc-imgui/tree/65d02d68e4188250c948147a04a5820de3479a44) of the WIP BindBC-ImGui repo. (the newer commits won't compile)
2. Edit dub.selections.json to change `"bindbc-common"`'s version
to `"0.0.6"`.
3. Run:
```
dmd -extern-std=c++11 -lib -O -version=BindImGui_Static -Isource/
-I~/.dub/packages/bindbc-common/0.0.6/bindbc-common/source/
source/bindbc/imgui/config.d source/bindbc/imgui/package.d
source/imgui/impl.d source/imgui/package.d -v
```
4. Now, remove `-O` from the dmd command. Blink and you'll miss
it compiling!
More information about the Digitalmars-d-learn
mailing list