Gregory Ewing <greg.ew...@canterbury.ac.nz>: > Marko Rauhamaa wrote: >> Seriously, though, it is notable that the high-level programming >> languages pretty unanimously refuse to make variables first-class >> objects. I wonder why. > > That's an interesting question. One reason might be > that in the absence of static type analysis, assigning > to a variable holding a reference to another variable > would be ambiguous. For example, suppose Python had > an & operator that gives you an object referring to > a variable somehow. Then, after > > a = 42 > b = 17 > c = &a > c = &b > > does 'c' now hold a reference to the variable 'b', or > does it still hold a reference to 'a' and 'a' now > holds a reference to 'b'?
If variables were ordinary mutable objects, you'd need a syntax of dereferencing, just like in C. Variable objects would be highly analogous to single-element arrays, little boxes if you will. > Somehow these two operations would have to be spelled different ways, > which means you would need to know whether you were dealing with a > variable reference or not. So they wouldn't really be first-class, in > the sense of being treated on an equal footing with ordinary > variables. It's not that ambiguous. >>> a = 3 >>> c = &a >>> c <global variable a> >>> *c 3 >>> c is a False >>> *c is a True >>> c is &a True >>> a = 4 >>> *c 4 >>> *c is a True >>> c = &c >>> c <global variable c> >>> *c <global variable c> >>> **c <global variable c> Marko -- https://mail.python.org/mailman/listinfo/python-list