Open Christopher-Chianelli opened 1 year ago
IMO, this is changing way too fast to be documented here. The devguide is too version-independent.
AFAIK the stack effect info is nowadays in bytecodes.c, as (inputs -- outputs)
, as documented with the code.
Might this belong instead in the bytecode instructions section of the dis
section in the main CPython docs? That's where the opcodes are currently documented (e.g. SEND
) and is version-dependent.
Should this be moved to the CPython repo? Closed? Or what are the next steps here?
I considered adding it to the documentation section of dis
, but decided to create the issue here since the documentation can quickly become out of date if a bytecode developer forgets to update the documentation. In my opinion, the only thing worse than not having a specification, is having an incorrect specification. If the documentation is here, then the problem of it being out of date is not as impactful since it would only affect CPython bytecode developers (versus, all dis
users), who are hopefully familiar enough with bytecode changes to recognize when something goes out of date.
I don't have a problem moving this issue to the CPython repo so it can be discussed if dis
doucmentation should have a full specification.
Parts of the documentation can be auto-generated. I don't know if the source format is stable enough to maintain another consumer for it, though.
Describe the enhancement or feature you'd like The documentation for the
dis
module provide a summary of what each opcode does. However, the summary is not enough to fully understand what each opcode actually does. For instance, the documentation for SEND:(https://docs.python.org/3/library/dis.html#opcode-SEND)
yield from
(i.e. the context in which SEND is used).I propose a full spec be given in a format that looks like this:
For the SEND opcode, it would look like this:
This is similar to how the Java virtual machine documents its opcodes (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html), with an additional section describing sources where the opcode are emitted.
Describe alternatives you've considered
dis
instead. Arguably, since a full specification need to dive deep into specific details, some CPython internals would leak into an otherwise user readable doc. Additionally, it increases the maintenance burden ondis
's documentation (which currently only need to list each opcode with a brief description).Additional context For the majority of CPython 3.11 bytecodes, I have already written documentation for them using the above format (in Asciidoc): https://github.com/Christopher-Chianelli/optapy/blob/jpyinterpreter-docs/jpyinterpreter-docs/src/modules/ROOT/pages/opcodes/opcodes.adoc . I can convert the documentation to reStructuredText and create a PR to this repo if this issue is accepted.