00:08
<Mathieu Hofman>
I still don't understand why engines do not implement registered symbols as a wrapper around strings. No need for special GC except what already exists for strings. Isn't it simpler than implementing a weak registry and collect entries?
02:37
<kriskowal>

It’s a neat idea. We’ve got three flavors of symbol and if a VM can stomach implementing each of those cases very differently, I imagine it could be that easy.

  1. well-known symbols distinguished by an enum such that they are identical even across realms
  2. registered symbols distinguished by string value + realm such that they are not identical across realms but strcmp locally
  3. other symbols distinguished by heap pointer
17:08
<Mathieu Hofman>
Aren't well known symbols just unique symbols that are anchored in the implementation, and thus just never collected?
17:13
<Mathieu Hofman>
Also according to the spec: > The GlobalSymbolRegistry List is an append-only List that is globally available. It is shared by all realms. So there is no need to key by realm, registered symbols are equal across realms
20:09
<snek>
I think it's just generally more convenient to implement both kinds of symbols in the same object hierarchy, even if it makes the GC stuff a bit weirder
20:10
<snek>
also increasing the number of things that can be gc'd is probably not a bad thing in engines that execute arbitrarily bad code
20:10
<kriskowal>
because it’s a primitive, the GC at least would not be observable and mathieu’s proposal would obviate needing a GC, but would make === O(length) for registered symbols
20:11
<kriskowal>
for the moment, i’m more curious about the status quo than changing the status.