Phobos' std.conv.to-conversion from enum to string doesn't scale beyond hundreds of enumerators
Steven Schveighoffer
schveiguy at yahoo.com
Sun Jun 24 17:23:54 UTC 2018
On 6/24/18 11:46 AM, Per Nordlöw wrote:
> On Friday, 22 June 2018 at 00:50:05 UTC, Steven Schveighoffer wrote:
>> The sucky thing is, the compiler is *already* doing a sort on the
>> items in the switch, and *already* doing the duplicate check. It would
>> be cool to be able to leverage this mechanism to avoid the library
>> solution, but I don't know how we can do that, as the semantics for
>> switch are well defined, and there's no other way to hook this builtin
>> functionality.
>
> I would like to see a new trait named, say, `primaryMembers` or
> `nonAliasMembers` that returns exactly what the switch needs. I believe
> this is motivated by the fact that this is a serious issue; Without the
> user notices, the use of enums combined with ..to!string or io sucks up
> more and more RAM in the compiler as new members are added.
>
> If enough (hundreds) of members are added you can get out of RAM, which
> is what happened to me. What do you think about that idea?
>
> We should plot compilation time and memory usage with enumerator count
> so we can reason about the severity of this issue.
Hm... just had another thought.
Many times, the enum has no repeating members, so your mechanism just
works. So just use that if it works!
static if(__traits(compiles, fastEnumToString(val)))
return fastEnumToString(val);
else
return slowEnumToString(val); // checks for duplicates
Should eliminate the issues, because it's not going to compile the slow
version if the fast version can work.
-Steve
More information about the Digitalmars-d
mailing list