Neil Toronto <[EMAIL PROTECTED]> wrote: > Fredrik Lundh wrote: > > Neil Toronto wrote: > >> Heck no. An assignment would modify an existing variable only. > >> > > > > what's an "existing variable"? how would STORE_GLOBAL work under your > > proposal? > > I haven't got a clue what STORE_GLOBAL is, apart from the fact that it > looks like it has something to do with Python's bytecode. > > If it's what I think it is (so don't hold me to this), it'd raise an > exception if you used on something that hadn't been created yet. > Probably need a MAKE_GLOBAL in addition to it, or keep STORE_GLOBAL as > it is (for "var x = 0") and add MODIFY_GLOBAL that raises an exception > on uncreated variables. > > Or something. Again, I'm guessing, and you have me at a disadvantage. > Can we keep the discussion above the bytecode level for now?
Ok, but you need to understand a few things about how Python handles things "under the covers". Function-level scopes are not implemented as dictionaries. They are implemented as arrays, and the compiler maps local names to positions in the in the array that stores locals. The module-level namespace (which can be accessed as a dictionary via globals()) is a dictionary, but this is because anyone can insert or remove names arbitrarily, which is not the case for function locals. Also, Python's use of an array for locals allows for a significant improvement in execution speed. When Fredrik brought up the STORE_GLOBAL opcode, it was applicable because the compiler needs to know at compile time whether a variable is global (for the various *_GLOBAL opcodes) or local (for the various *_FAST opcodes). >From what I can tell, the only thing that your 'var' keyword does is ambiguate the global vs. local case, nevermind breaking 99% of currently working Python code. I'd save my time and get used to the way scopes are working now, because I doubt they are going to change (none of the core developers (I'm not one) who have chimed in have been positive). - Josiah _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
