Hi Fabio,

On 13/05/2021 7:11 pm, Fabio Zadrozny wrote:

Em qua., 12 de mai. de 2021 às 14:45, Mark Shannon <m...@hotpy.org <mailto:m...@hotpy.org>> escreveu:

    Hi everyone,

    I would like to present PEP 659.

    This is an informational PEP about a key part of our plan to improve
    CPython performance for 3.11 and beyond.

    For those of you aware of the recent releases of Cinder and Pyston,
    PEP 659 might look similar.
    It is similar, but I believe PEP 659 offers better interpreter
    performance and is more suitable to a collaborative, open-source
    development model.

    As always, comments and suggestions are welcome.


Hi Mark,

I think this seems like a nice proposal... I do have some questions related to the PEP though (from the point of view of implementing a debugger over it some things are kind of vague to me):

1. When will the specialization happen? (i.e.: is bytecode expected to be changed while the code is running inside a frame or must it all be done prior to entering a frame on a subsequent call?)

The specialization is adaptive, so it can happen at anytime during execution.


2. When the adaptive specialization happens, will that be reflected on the actual bytecode seen externally in the frame or is that all internal? Will clients be able to make sense of that? -- i.e.: In the debugger right now I have a need on some occasions to detect the structure of the code from the bytecode itself (for instance to detect whether some exception would be handled or unhandled at raise time just given the bytecode).

The bytecode, as externally visible, will be unchanged. All specializations will be internal and should be invisible to all Python tools.


3. Another example: I'm working right now on a feature to step into a method. To do that right now my approach is:     - Compute the function call names and bytecode offsets in a given frame.     - When a frame is called (during a frame.f_trace call), check the parent frame bytecode offset (frame.f_lasti) to detect if the last thing was the expected call (and if it was, break the execution).

This seems reasonable given the current implementation, where bytecodes are all fixed and there's a mapping from the frame.f_lasti ... Will that still work with the specializing adaptive interpreter?

If you are implementing this in Python, then everything should work as it does now.

OOI, would inserting a breakpoint at offset 0 in the callee function
work?


4. Will it still be possible to change the frame.f_code prior to execution from a callback set in `PyThreadState.interp.eval_frame` (which will change the code to add a breakpoint to the bytecode and later call `_PyEval_EvalFrameDefault`)? Note: this is done in the debugger so that Python can run without any tracing until the breakpoint is hit (tracing is set afterwards to actually pause the execution as well as doing step operations).

Since frame.f_code is read-only in Python, I assume you mean in C.

I can make no guarantees about the layout or meaning of fields in the C frame struct, I'm afraid.
But I'm sure we can get something to work for you.

Cheers,
Mark.


Best regards,

Fabio



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

Reply via email to