I use `hasUDA`, `getUDAs` and `getSymbolsByUDA` fairly heavily in
my project. dmd requires some 3.2Gb to compile it, a dub
recompilation taking somewhere around 8-14 seconds, depending on
the phase of the moon. It's not too bad, admittedly.
Stuff like this, naturally taken out of all context:
```
static if (isSerialisable!member)
{
import std.path : buildNormalizedPath;
static if (hasUDA!(this.tupleof[i], Resource))
{
member =
buildNormalizedPath(state.settings.resourceDirectory, member);
}
else static if (hasUDA!(this.tupleof[i], Configuration))
{
member =
buildNormalizedPath(state.settings.configDirectory, member);
}
}
```
```
private alias allEventHandlerFunctionsInModule =
Filter!(isSomeFunction, getSymbolsByUDA!(thisModule,
IRCEventHandler));
```
```
enum isSetupFun(alias T) = (getUDAs!(T, IRCEventHandler)[0]._when
== Timing.setup);
enum isEarlyFun(alias T) = (getUDAs!(T, IRCEventHandler)[0]._when
== Timing.early);
enum isLateFun(alias T) = (getUDAs!(T, IRCEventHandler)[0]._when
== Timing.late);
enum isCleanupFun(alias T) = (getUDAs!(T,
IRCEventHandler)[0]._when == Timing.cleanup);
alias hasSpecialTiming = templateOr!(isSetupFun, isEarlyFun,
isLateFun, isCleanupFun);
alias isNormalEventHandler = templateNot!hasSpecialTiming;
alias setupFuns = Filter!(isSetupFun,
this.allEventHandlerFunctionsInModule);
alias earlyFuns = Filter!(isEarlyFun,
this.allEventHandlerFunctionsInModule);
alias lateFuns = Filter!(isLateFun,
this.allEventHandlerFunctionsInModule);
alias cleanupFuns = Filter!(isCleanupFun,
this.allEventHandlerFunctionsInModule);
alias pluginFuns = Filter!(isNormalEventHandler,
this.allEventHandlerFunctionsInModule);
```
If `hasUDA` and friends are so bad[1] [2] [3], what can I use
instead?
I need them to work at compile-time. `hasUDA` just needs to
evaluate to true or false, but for `getUDAs` and
`getSymbolsByUDA` I need them to resolve to symbols (and not
string names of symbols).
Do I have any alternatives?
[1]:
https://forum.dlang.org/post/bwekufskjmknllapz...@forum.dlang.org
[2]: https://forum.dlang.org/post/tm02a6$nk3$1...@digitalmars.com
[3]:
https://forum.dlang.org/post/nzlnwbcezwyopjfia...@forum.dlang.org