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

Reply via email to