On Tue, Dec 7, 2021 at 1:28 AM Steven D'Aprano <st...@pearwood.info> wrote:
>
> On Tue, Dec 07, 2021 at 12:53:39AM +1100, Steven D'Aprano wrote:
>
> > If we can't execute the expression without the context existing, we make
> > it exist. Details to follow in another post.
>
> Here is some handwavy pseudo-code for setting up the context prior to
> calling a function "func":
>
>     code = func.__code__
>     locals = [NIL pointer for _ in range(code.co_nlocals)]
>     cells = [cell() for _ in range(len(code.co_cellvars))]
>     assign args, kwargs, early defaults to locals
>     # make a frame
>     frame = Frame()
>     frame.f_back = current frame
>     frame.f_lasti = 0
>     frame.f_locals = locals + cells + list(func.__closure__)
>     frame.f_code = code
>
> and then the interpreter does its funky thang with the frame and the
> function is executed.
>
> But here's the thing... there is nothing that says that the f_code has
> to have come from func.__code__. It just needs to be code that expects
> the same environment (locals, cell, etc) as the frame is set up for.

Okay. So you want to break out a separate code object from the main
body, but it has to expect the exact same environment as the main
body.

Which means you cannot replace it with anything else, you cannot call
it externally without constructing the exact same environment, and
frankly, I cannot for the life of me see what you gain above just
having it part of the body. You keep arguing in favour of having it be
somehow separate, but to what end?

Please. Go make a reference implementation. At least then we'll know
what's possible and what's not.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/CBUWDFIJR2NKVCGXN4SNVE2OPJFNWOWR/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to