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

Reply via email to