[Python-3000] symbols?

"Martin v. Löwis" martin at v.loewis.de
Tue Apr 11 20:18:30 CEST 2006


Barry Warsaw wrote:
> To be fair, I think Ruby stole the idea and syntax from Lisp.  It's an
> interesting idea, but I'd like to understand exactly what you mean by "a
> Python symbol".  Can you give more detail about your idea, perhaps as a
> pseudo-PEP?

I think it's as simple as the the LISP symbols, except when it comes
to name binding. What the OP apparently wants is this:

class Symbol(object):
  def __init__(self, str):
    self.name = name

symbols = {}
def make_symbol(str):
    try:
        return symbols[str]
    except KeyError:
        symbols[str] = result = Symbol(str)

In addition, he wants literals for the symbol type, namely

  :[A-Za-z_][A-Za-z0-9_]

As you can put them into source code, you also need support
for marshalling them.

That's about all that he has specified so far. Open issues
then are:

- does .name include the colon or not?
- can you pass them to getattr, instead of strings?

Everything else follows from this spec (I hope). Symbols
compare for identity, are hashable, meant to be immutable
(Bug: the specification allows for mutation; the implementation
shouldn't).

Regards,
Martin


More information about the Python-3000 mailing list