Guido just limited the dynamicness of Python in a very sensible way, by declaring that the attributes of objects can only be regular strings. For users this does not change much, but for implementors this has significant benefits, so I like this limitation a lot.
The implementation of attributes in CLPython and other implementations can now be cleaned up and made more efficient by removing hairy corner cases. CLPython can now always represent attributes by Lisp symbols. Also as a result, the five known failures in the CLPython test suite, which tested some hairy corner cases, are now defined to not be failures at all.
The decisions:
- Using non-string keys is undefined behavior; non-empty strings that are not valid as identifier according to the grammar are allowed: http://mail.python.org/pipermail/python-dev/2008-June/080309.html
- String subclasses may be normalized to regular strings: http://mail.python.org/pipermail/python-dev/2008-June/080312.html
- The restriction applies to both class dicts and instance dicts: http://mail.python.org/pipermail/python-dev/2008-June/080313.html
- Frameworks currently using non-string attributes should change their behavior; http://mail.python.org/pipermail/python-dev/2008-June/080319.html
- Willem