PaddleSOT
PaddleSOT copied to clipboard
๐๏ธ Python ๅ็ๆฌๅญ่็ ๅทฎๅผ่กจๆ ผ
Note
โ ๆฏๅฏไปฅ็น็๏ผๅฏไปฅ็ด่พพๆๆกฃ๏ฝ
| Python 3.8 | Python 3.9 | Python 3.10 | Python 3.11 | Python 3.12 | |
|---|---|---|---|---|---|
NOP |
โ | โ | โ | โ | โ |
POP_TOP |
โ | โ | โ | โ | โ |
ROT_TWO |
โ | โ | โ | โ | โ |
ROT_THREE |
โ | โ | โ | โ | โ |
ROT_FOUR |
โ ๐ | โ | โ | โ | โ |
DUP_TOP |
โ | โ | โ | โ | โ |
DUP_TOP_TWO |
โ | โ | โ | โ | โ |
UNARY_POSITIVE |
โ | โ | โ | โ | โ |
UNARY_NEGATIVE |
โ | โ | โ | โ | โ |
UNARY_NOT |
โ | โ | โ | โ | โ |
UNARY_INVERT |
โ | โ | โ | โ | โ |
GET_ITER |
โ | โ | โ | โ | โ |
GET_YIELD_FROM_ITER |
โ | โ | โ | โ | โ |
BINARY_POWER |
โ | โ | โ | โ | โ |
BINARY_MULTIPLY |
โ | โ | โ | โ | โ |
BINARY_MATRIX_MULTIPLY |
โ | โ | โ | โ | โ |
BINARY_FLOOR_DIVIDE |
โ | โ | โ | โ | โ |
BINARY_TRUE_DIVIDE |
โ | โ | โ | โ | โ |
BINARY_MODULO |
โ | โ | โ | โ | โ |
BINARY_ADD |
โ | โ | โ | โ | โ |
BINARY_SUBTRACT |
โ | โ | โ | โ | โ |
BINARY_SUBSCR |
โ | โ | โ | โ | โ |
BINARY_LSHIFT |
โ | โ | โ | โ | โ |
BINARY_RSHIFT |
โ | โ | โ | โ | โ |
BINARY_AND |
โ | โ | โ | โ | โ |
BINARY_XOR |
โ | โ | โ | โ | โ |
BINARY_OR |
โ | โ | โ | โ | โ |
INPLACE_POWER |
โ | โ | โ | โ | โ |
INPLACE_MULTIPLY |
โ | โ | โ | โ | โ |
INPLACE_MATRIX_MULTIPLY |
โ | โ | โ | โ | โ |
INPLACE_FLOOR_DIVIDE |
โ | โ | โ | โ | โ |
INPLACE_TRUE_DIVIDE |
โ | โ | โ | โ | โ |
INPLACE_MODULO |
โ | โ | โ | โ | โ |
INPLACE_ADD |
โ | โ | โ | โ | โ |
INPLACE_SUBTRACT |
โ | โ | โ | โ | โ |
INPLACE_LSHIFT |
โ | โ | โ | โ | โ |
INPLACE_RSHIFT |
โ | โ | โ | โ | โ |
INPLACE_AND |
โ | โ | โ | โ | โ |
INPLACE_XOR |
โ | โ | โ | โ | โ |
INPLACE_OR |
โ | โ | โ | โ | โ |
STORE_SUBSCR |
โ | โ | โ | โ | โ |
DELETE_SUBSCR |
โ | โ | โ | โ | โ |
GET_AWAITABLE |
โ | โ | โ | โ
Changed in version 3.11: Previously, this instruction did not have an oparg. |
โ |
GET_AITER |
โ | โ | โ | โ | โ |
GET_ANEXT |
โ | โ | โ | โ | โ |
END_ASYNC_FOR |
โ ๐ | โ | โ | โ
Changed in version 3.11: Exception representation on the stack now consist of one, not three, items. |
โ |
BEFORE_ASYNC_WITH |
โ | โ | โ | โ | โ |
SETUP_ASYNC_WITH |
โ | โ | โ | โ | โ |
PRINT_EXPR |
โ | โ | โ | โ | โ |
SET_ADD |
โ | โ | โ | โ | โ |
LIST_APPEND |
โ | โ | โ | โ | โ |
MAP_ADD |
โ
Changed in version 3.8: Map value is TOS and map key is TOS1. Before, those were reversed. |
โ | โ | โ | โ |
RETURN_VALUE |
โ | โ | โ | โ | โ |
YIELD_VALUE |
โ | โ | โ | โ | โ
Changed in version 3.12: oparg set to be the exception block depth, for efficient closing of generators. |
YIELD_FROM |
โ | โ | โ | โ | โ |
SETUP_ANNOTATIONS |
โ | โ | โ | โ | โ |
IMPORT_STAR |
โ | โ | โ | โ | โ |
POP_BLOCK |
โ | โ | โ | โ | โ |
POP_EXCEPT |
โ | โ | โ | โ
Changed in version 3.11: Exception representation on the stack now consist of one, not three, items. |
โ |
POP_FINALLY |
โ ๐ | โ | โ | โ | โ |
BEGIN_FINALLY |
โ ๐ | โ | โ | โ | โ |
END_FINALLY |
โ | โ | โ | โ | โ |
LOAD_BUILD_CLASS |
โ | โ | โ | โ | โ |
SETUP_WITH |
โ | โ | โ | โ | โ |
WITH_CLEANUP_START |
โ | โ | โ | โ | โ |
WITH_CLEANUP_FINISH |
โ | โ | โ | โ | โ |
STORE_NAME |
โ | โ | โ | โ | โ |
DELETE_NAME |
โ | โ | โ | โ | โ |
UNPACK_SEQUENCE |
โ | โ | โ | โ | โ |
UNPACK_EX |
โ | โ | โ | โ | โ |
STORE_ATTR |
โ | โ | โ | โ | โ |
DELETE_ATTR |
โ | โ | โ | โ | โ |
STORE_GLOBAL |
โ | โ | โ | โ | โ |
DELETE_GLOBAL |
โ | โ | โ | โ | โ |
LOAD_CONST |
โ | โ | โ | โ | โ |
LOAD_NAME |
โ | โ | โ | โ | โ |
BUILD_TUPLE |
โ | โ | โ | โ | โ |
BUILD_LIST |
โ | โ | โ | โ | โ |
BUILD_SET |
โ | โ | โ | โ | โ |
BUILD_MAP |
โ | โ | โ | โ | โ |
BUILD_CONST_KEY_MAP |
โ | โ | โ | โ | โ |
BUILD_STRING |
โ | โ | โ | โ | โ |
BUILD_TUPLE_UNPACK |
โ | โ | โ | โ | โ |
BUILD_TUPLE_UNPACK_WITH_CALL |
โ | โ | โ | โ | โ |
BUILD_LIST_UNPACK |
โ | โ | โ | โ | โ |
BUILD_SET_UNPACK |
โ | โ | โ | โ | โ |
BUILD_MAP_UNPACK |
โ | โ | โ | โ | โ |
BUILD_MAP_UNPACK_WITH_CALL |
โ | โ | โ | โ | โ |
LOAD_ATTR |
โ | โ | โ | โ | โ
Changed in version 3.12: If the low bit of namei is set, then a NULL or self is pushed to the stack before the attribute or unbound method respectively. |
COMPARE_OP |
โ | โ | โ | โ | โ |
IMPORT_NAME |
โ | โ | โ | โ | โ |
IMPORT_FROM |
โ | โ | โ | โ | โ |
JUMP_FORWARD |
โ | โ | โ | โ | โ |
POP_JUMP_IF_TRUE |
โ | โ | โ | โ | โ
Changed in version 3.12: This is no longer a pseudo-instruction. |
POP_JUMP_IF_FALSE |
โ | โ | โ | โ | โ
Changed in version 3.12: This is no longer a pseudo-instruction. |
JUMP_IF_TRUE_OR_POP |
โ | โ | โ | โ
Changed in version 3.11: The oparg is now a relative delta rather than an absolute target. |
โ |
JUMP_IF_FALSE_OR_POP |
โ | โ | โ | โ
Changed in version 3.11: The oparg is now a relative delta rather than an absolute target. |
โ |
JUMP_ABSOLUTE |
โ | โ | โ | โ | โ |
FOR_ITER |
โ | โ | โ | โ | โ
Changed in version 3.12: Up until 3.11 the iterator was popped when it was exhausted. |
LOAD_GLOBAL |
โ | โ | โ | โ
Changed in version 3.11: If the low bit of namei is set, then a NULL is pushed to the stack before the global variable. |
โ |
SETUP_FINALLY |
โ | โ | โ | โ | โ |
CALL_FINALLY |
โ ๐ | โ | โ | โ | โ |
LOAD_FAST |
โ | โ | โ | โ | โ
Changed in version 3.12: This opcode is now only used in situations where the local variable is guaranteed to be initialized. It cannot raise UnboundLocalError. |
STORE_FAST |
โ | โ | โ | โ | โ |
DELETE_FAST |
โ | โ | โ | โ | โ |
LOAD_CLOSURE |
โ | โ | โ | โ
Changed in version 3.11: i is no longer offset by the length of co_varnames. |
โ |
LOAD_DEREF |
โ | โ | โ | โ
Changed in version 3.11: i is no longer offset by the length of co_varnames. |
โ |
LOAD_CLASSDEREF |
โ | โ | โ | โ
Changed in version 3.11: i is no longer offset by the length of co_varnames. |
โ |
STORE_DEREF |
โ | โ | โ | โ
Changed in version 3.11: i is no longer offset by the length of co_varnames. |
โ |
DELETE_DEREF |
โ | โ | โ | โ
Changed in version 3.11: i is no longer offset by the length of co_varnames. |
โ |
RAISE_VARARGS |
โ | โ | โ | โ | โ |
CALL_FUNCTION |
โ | โ | โ | โ | โ |
CALL_FUNCTION_KW |
โ | โ | โ | โ | โ |
CALL_FUNCTION_EX |
โ | โ | โ | โ | โ |
LOAD_METHOD |
โ | โ | โ | โ | โ |
CALL_METHOD |
โ | โ | โ | โ | โ |
MAKE_FUNCTION |
โ | โ | โ
Changed in version 3.10: Flag value 0x04 is a tuple of strings instead of dictionary |
โ
Changed in version 3.11: Qualified name at TOS was removed. |
โ |
BUILD_SLICE |
โ | โ | โ | โ | โ |
EXTENDED_ARG |
โ | โ | โ | โ | โ |
FORMAT_VALUE |
โ | โ | โ | โ | โ |
HAVE_ARGUMENT |
โ | โ | โ | โ | โ
Changed in version 3.12: Pseudo instructions were added to the dis module, and for them it is not true that comparison with HAVE_ARGUMENT indicates whether they use their arg. |
RERAISE |
โ | โ ๐ | โ | โ
Changed in version 3.11: Exception representation on the stack now consist of one, not three, items. |
โ |
WITH_EXCEPT_START |
โ | โ ๐ | โ | โ
Changed in version 3.11: The __exit__ function is in position 4 of the stack rather than 7. Exception representation on the stack now consist of one, not three, items. |
โ |
LOAD_ASSERTION_ERROR |
โ | โ ๐ | โ | โ | โ |
LIST_TO_TUPLE |
โ | โ ๐ | โ | โ | โ |
LIST_EXTEND |
โ | โ ๐ | โ | โ | โ |
SET_UPDATE |
โ | โ ๐ | โ | โ | โ |
DICT_UPDATE |
โ | โ ๐ | โ | โ | โ |
DICT_MERGE |
โ | โ ๐ | โ | โ | โ |
IS_OP |
โ | โ ๐ | โ | โ | โ |
CONTAINS_OP |
โ | โ ๐ | โ | โ | โ |
JUMP_IF_NOT_EXC_MATCH |
โ | โ ๐ | โ | โ | โ |
COPY_DICT_WITHOUT_KEYS |
โ | โ | โ ๐ | โ | โ |
GET_LEN |
โ | โ | โ ๐ | โ | โ |
MATCH_MAPPING |
โ | โ | โ ๐ | โ | โ |
MATCH_SEQUENCE |
โ | โ | โ ๐ | โ | โ |
MATCH_KEYS |
โ | โ | โ ๐ | โ
Changed in version 3.11: Previously, this instruction also pushed a boolean value indicating success (True) or failure (False). |
โ |
MATCH_CLASS |
โ | โ | โ ๐ | โ
Changed in version 3.11: Previously, this instruction also pushed a boolean value indicating success (True) or failure (False). |
โ |
GEN_START |
โ | โ | โ ๐ | โ | โ |
ROT_N |
โ | โ | โ ๐ | โ | โ |
COPY |
โ | โ | โ | โ ๐ | โ |
SWAP |
โ | โ | โ | โ ๐ | โ |
CACHE |
โ | โ | โ | โ ๐ | โ |
BINARY_OP |
โ | โ | โ | โ ๐ | โ |
PUSH_EXC_INFO |
โ | โ | โ | โ ๐ | โ |
CHECK_EXC_MATCH |
โ | โ | โ | โ ๐ | โ |
CHECK_EG_MATCH |
โ | โ | โ | โ ๐ | โ |
PREP_RERAISE_STAR |
โ | โ | โ | โ ๐ | โ |
BEFORE_WITH |
โ | โ | โ | โ ๐ | โ |
JUMP_BACKWARD |
โ | โ | โ | โ ๐ | โ |
JUMP_BACKWARD_NO_INTERRUPT |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_FORWARD_IF_TRUE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_BACKWARD_IF_TRUE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_FORWARD_IF_FALSE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_BACKWARD_IF_FALSE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_FORWARD_IF_NOT_NONE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_BACKWARD_IF_NOT_NONE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_FORWARD_IF_NONE |
โ | โ | โ | โ ๐ | โ |
POP_JUMP_BACKWARD_IF_NONE |
โ | โ | โ | โ ๐ | โ |
MAKE_CELL |
โ | โ | โ | โ ๐ | โ |
COPY_FREE_VARS |
โ | โ | โ | โ ๐ | โ |
CALL |
โ | โ | โ | โ ๐ | โ |
PRECALL |
โ | โ | โ | โ ๐ | โ |
PUSH_NULL |
โ | โ | โ | โ ๐ | โ |
KW_NAMES |
โ | โ | โ | โ ๐ | โ |
RESUME |
โ | โ | โ | โ ๐ | โ |
RETURN_GENERATOR |
โ | โ | โ | โ ๐ | โ |
SEND |
โ | โ | โ | โ ๐ | โ |
ASYNC_GEN_WRAP |
โ | โ | โ | โ ๐ | โ |
END_FOR |
โ | โ | โ | โ | โ ๐ |
BINARY_SLICE |
โ | โ | โ | โ | โ ๐ |
STORE_SLICE |
โ | โ | โ | โ | โ ๐ |
CLEANUP_THROW |
โ | โ | โ | โ | โ ๐ |
RETURN_CONST |
โ | โ | โ | โ | โ ๐ |
LOAD_LOCALS |
โ | โ | โ | โ | โ ๐ |
LOAD_FROM_DICT_OR_GLOBALS |
โ | โ | โ | โ | โ ๐ |
LOAD_SUPER_ATTR |
โ | โ | โ | โ | โ ๐ |
POP_JUMP_IF_NOT_NONE |
โ | โ | โ | โ | โ
Changed in version 3.12: This is no longer a pseudo-instruction. |
POP_JUMP_IF_NONE |
โ | โ | โ | โ | โ
Changed in version 3.12: This is no longer a pseudo-instruction. |
LOAD_FAST_CHECK |
โ | โ | โ | โ | โ ๐ |
LOAD_FAST_AND_CLEAR |
โ | โ | โ | โ | โ ๐ |
LOAD_FROM_DICT_OR_DEREF |
โ | โ | โ | โ | โ ๐ |
CALL_INTRINSIC_1 |
โ | โ | โ | โ | โ ๐ |
CALL_INTRINSIC_2 |
โ | โ | โ | โ | โ ๐ |
SETUP_CLEANUP |
โ | โ | โ | โ | โ |
JUMP |
โ | โ | โ | โ | โ |
JUMP_NO_INTERRUPT |
โ | โ | โ | โ | โ |
่ดดไธไธ่กจๆ ผ็ๆ็ไปฃ็ ๏ผๆนไพฟไปฅๅ็ป่ฎก Python 3.13 ็ญๆฐ็ๆฌ็ไฟกๆฏ
ๆๅๅญ่็ ไฟกๆฏ
ๅจไธๅ็ๆฌ็ dis ๆๆกฃๆต่งๅจๆงๅถๅฐไธญ่ฟ่กๅฆไธ่ๆฌ๏ผไปฅๆๅ้่ฆ็ไฟกๆฏ
JSON.stringify([...document.querySelectorAll(".opcode")].map(dl => [dl.querySelector(".sig-name").innerText, dl.querySelector(".headerlink").href, dl.querySelector(".versionmodified.added")?.innerText.match(/New in version (\d\.\d+)/)[1], [...dl.querySelectorAll(".versionmodified.changed")].map(change => [change.innerText.match(/Changed in version (\d\.\d+):/)[1], change.parentElement.innerText])]))
็ป่ฎกไฟกๆฏ
ๅฐๆๅๅพๅฐ็ๅญ่็ ็ฒ่ดดๅฐไธ้ข็่ๆฌไธญไปฅ็ป่ฎกไฟกๆฏ๏ผๅนถ็ๆ Markdown ่กจๆ ผ
from __future__ import annotations
import json
from typing import Dict, TypedDict
py37_code_info = ${py37_code_info ...} # ๅจ่ฟ้็ฒ่ดดๆๅๅฐ็ไฟกๆฏ
py38_code_info = ${py38_code_info ...}
py39_code_info = ${py39_code_info ...}
py310_code_info = ${py310_code_info ...}
py311_code_info = ${py311_code_info ...}
code_info_map = {
"3.7": json.loads(py37_code_info),
"3.8": json.loads(py38_code_info),
"3.9": json.loads(py39_code_info),
"3.10": json.loads(py310_code_info),
"3.11": json.loads(py311_code_info),
}
py_versions = list(code_info_map.keys())
class InfoItem(TypedDict):
link: str
is_new: bool
change: str | None
InfoTable = Dict[str, Dict[str, InfoItem]]
def gen_info_table(code_info_map) -> InfoTable:
info_table: InfoTable = {}
for py_version, code_info in code_info_map.items():
for code, link, added_version, changes in code_info:
if code not in info_table:
info_table[code] = {}
if py_version not in info_table[code]:
info_table[code][py_version] = {}
current_cell = info_table[code][py_version]
current_cell["link"] = link
current_cell["is_new"] = added_version == py_version
current_cell["change"] = None
for change in changes:
changed_version, changed_description = change
if changed_version == py_version:
current_cell["change"] = changed_description
return info_table
def codegen(info_table):
markdown_output = ""
markdown_output += "| |"
for py_version in py_versions:
markdown_output += f" Python {py_version} |"
markdown_output += "\n"
markdown_output += "| :-: |"
for _ in py_versions:
markdown_output += f" :-: |"
markdown_output += "\n"
for code, code_info in info_table.items():
line = f"| `{code}` | "
for py_version in py_versions:
if py_version in code_info:
cell = code_info[py_version]
line += f"[โ
]({cell['link']})"
if cell["is_new"]:
line += "๐"
if cell["change"] is not None:
line += f"<br/>{cell['change']}"
line += " |"
else:
line += " โ |"
markdown_output += line + "\n"
return markdown_output
if __name__ == "__main__":
info_table = gen_info_table(code_info_map)
markdown_output = codegen(info_table)
with open("bytecode.md", "w") as f:
f.write(markdown_output)
ๆฏไธช็ๆฌๅๅ็่ฏดๆ๏ผ
- 3.8: https://docs.python.org/3.8/whatsnew/3.8.html#cpython-bytecode-changes
- 3.9: https://docs.python.org/3.9/whatsnew/3.9.html#cpython-bytecode-changes
- 3.10: https://docs.python.org/3.10/whatsnew/3.10.html#cpython-bytecode-changes
- 3.11: https://docs.python.org/3.11/whatsnew/3.11.html#cpython-bytecode-changes
- 3.12: https://docs.python.org/3.12/whatsnew/3.12.html#cpython-bytecode-changes