Update on the D-to-Jai guy: We have real problems with the language

FeepingCreature feepingcreature at gmail.com
Tue Nov 29 12:43:30 UTC 2022


On Tuesday, 29 November 2022 at 07:15:25 UTC, Walter Bright wrote:
> On 11/27/2022 1:29 AM, FeepingCreature wrote:
>> 3. But also if we're talking about number of instantiations, 
>> `hasUDA` and `getUDA` lead the pack. I think the way these 
>> work is just bad - I've rewritten all my own `hasUDA`/`getUDA` 
>> code to be of the form `udaIndex!(U, __traits(getAttributes, 
>> T))` - instantiating a unique copy for every combination of 
>> field and UDA is borderline quadratic - but that didn't help 
>> much even though `-vtemplates` hinted that it should. 
>> `-vtemplates` needs compiler time attributed to template 
>> recursively.
>
> hasUDA and getUDAs are defined:
>
>
> enum hasUDA(alias symbol, alias attribute) = getUDAs!(symbol, 
> attribute).length != 0;
>
> template getUDAs(alias symbol, alias attribute)
> {
>     import std.meta : Filter;
>
>     alias getUDAs = Filter!(isDesiredUDA!attribute, 
> __traits(getAttributes, symbol));
> }
>
>
> These do look pretty inefficient. Who wants to fix Phobos with 
> FeepingCreature's solution?

Well, in his codebase I ended up just redefining `hasUDA` in 
terms of `udaIndex`, and even though `hasUDA` led the pack in 
`-vtemplates` this didn't actually result in any noticeable 
change in speed. I think even though `hasUDA` gets instantiated a 
lot, it doesn't result in much actual compile time. Unfortunately 
there's no good way to know this without porting everything, 
which is I think the actual problem.


More information about the Digitalmars-d mailing list