On Friday, September 11, 2015 at 9:27:46 PM UTC+5:30, rand...@fastmail.us wrote: > On Fri, Sep 11, 2015, at 11:55, Chris Angelico wrote: > > On Sat, Sep 12, 2015 at 1:49 AM, Ian Kelly wrote: > > > Ah, that makes sense. It's writing into the dict that is created and > > > returned by locals(), but not actually updating the frame locals which > > > are the source of truth. > > > > Yeah... but it only makes sense to people who understand the > > implementation. It's certainly not a logical and sane behaviour that > > would be worth documenting and using. > > What else would you document? Reading from them is a reasonable thing to > do, and works. Writing to them is a reasonable thing to want to do, but > won't work, so you need to document that it doesn't work.
This is actually an old elusive holy grail -- first class environments. In denotational semantics the two tools used to model variables and control-flow respectively are environments and continuations. The Scheme inventors were brave enough to mandate first-class continuations but could not make the courage for first-class environments. So every Scheme dialect introduces 1½ class envs in a ½-assed inconsistent way Likewise python's locals-dicts and (I am guessing) most languages with some commitment to first-classness -- https://mail.python.org/mailman/listinfo/python-list