Veek M wrote: > I was reading the wiki on 'Call stack' because I wanted to understand > what a traceback object was. My C/C++ isn't good enough to deal with > raw python source since I have no background in CS. Also, you just > can't dive into the python src - it takes a good deal of reading and > background.. (the types will be confusing for a start) > > https://en.wikipedia.org/wiki/Call_stack > > 'Programming languages that support nested subroutines also have a > field in the call frame that points to the stack frame of the latest > activation of the procedure that most closely encapsulates the callee, > i.e. the immediate scope of the callee. This is called an access link > or static link (as it keeps track of static nesting during dynamic and > recursive calls) and provides the routine (as well as any other > routines it may invoke) access to the local data of its encapsulating > routines at every nesting level. > > Some architectures, compilers, or optimization cases store one link > for each enclosing level (not just the immediately enclosing), so that > deeply nested routines that access shallow data do not have to > traverse several links; this strategy is often called a "display".' > > 1. What is the difference between a 'call frame' and a 'stack frame' > in the above context? I know that a stack frame is all the data > related to one - CALL foo; > > 2. He's saying that within the 'call frame' (whatever that is) there's > an address to one of the previous stack frames of the wrapper function > ? What does all that mean in terms of nested functions? Access link? > How are nested function stacks setup.. > > 3. What exactly is a traceback object - we know that an instance > object is a dictionary and some glue logic that allows you to pretend > that methods are stored within the instance and call using x.sin(self) > etc. But I was reading: pydoc traceback AND: > http://effbot.org/librarybook/traceback.htm > > 'Extract the raw traceback from the current stack frame' > A stack frame contains (from wiki) the parameters, local variables, > next instruction address so.. what's a raw traceback - does the > default exception handler realize 'okay error' and then walk the stack > and extract data and prettify it for display and build a magical > traceback object? Is this documented for dummies what exactly it does? > (i know that's what it's doing but I HAVE NO CLUE so.. are there books > on this) > > How exactly does an exception fit in with tracebacks? How does all > this fit in with nested functions? > > 4. When you call a nested function (decorator), it generally returns a > wrapper function but I thought he was just returning a reference to a > function object but obviously since it can see it's environment, how > is the stack being setup?
found this: http://www.drdobbs.com/cpp/how-nested-functions-work-part-1/228701476 (still reading it) -- https://mail.python.org/mailman/listinfo/python-list