On Wed, Jul 24, 2019 at 8:34 AM Lassi Kortela <xxxxxx@lassi.io> wrote:

If it turns out that #: would be a good prefix for keywords, how hard 
would it be to change the uninterned symbol prefix in Gambit and Gauche?
Do users rely on the semantics of #: symbols being inequal when read
back in, considering that they probably can't do much with those symbols
if equality of references to the same gensym within the same data
structure are not preserved?

Uninterned symbols are distinguished from ordinary symbols in three ways:

1) You can create as many of them as memory will hold, none of which are eq? to another symbol.

2)  They break read-print invariance.

3) In CL, they can be garbage collected freely, whereas there are many restrictions on garbage collecting ordinary symbols, and in some cases it cannot be done at all.

Property 1 is achievable probabilistically by using a large random string as the name of an ordinary symbol: you can make the probability of collisions as small as you like.  You only need statistical randomness, not cryptographic randomness, assuming you are not reading and acting on untrusted S-expressions.  You might want to make `display` print just part of the name if it's too long.

I don't think anyone *depends* on property 2; it's just a consequence of property 1.

Property 3 is irrelevant in Scheme: garbage symbols can be collected freely.