ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CPython 3.12.0a1 变更深度解读:从 NEWS 档案看解释器、字节码与标准库的演进

CPython 3.12.0a1 变更深度解读:从 NEWS 档案看解释器、字节码与标准库的演进 CPython 3.12.0a1 变更深度解读从 NEWS 档案看解释器、字节码与标准库的演进【免费下载链接】cpythonThe Python programming language项目地址: https://gitcode.com/GitHub_Trending/cp/cpython本文以 CPython 仓库中的 Misc/NEWS.d/3.12.0a1.rst 为绝对骨架——该文件是 3.12 首个 Alpha 里程碑的完整变更档案2022-10-25 发布逐条记录了 Security、Core and Builtins、Library、C API、Build、Windows、macOS、IDLE、Tools/Demos、Tests、Documentation 共 11 类数百项改动。文章将按档案原有结构重组逐一还原每条变更的技术内涵并辅以仓库现存源码佐证帮助你系统地理解 Python 3.12 时代 CPython 内部的字节码、帧模型、对象布局、GC 与构建体系演进。文档背景与阅读方法这份文件在仓库中扮演什么角色CPython 采用「碎片化新闻」工作流每个合并的 pull request 会在 Misc/NEWS.d/ 目录下新增一个独立的.rst条目历史上由 blurb 工具生成目录中每个版本对应一个汇总文件如 3.11.0a1.rst、3.12.0a1.rst 直至后续所有 Alpha/Beta 里程碑。本文所依托的 3.12.0a1.rst 就是 3.12.0a1 周期内所有提交被按时间与板块聚合后的正式档案也是撰写「Whats New in Python 3.12」的核心素材来源。每个条目携带统一的元数据块.. date: 2022-09-28-17-09-37 # 提交/合入时间 .. gh-issue: 97616 # GitHub issue/PR 编号早期为 .. bpo: .. nonce: K1e3Xs # blurb 生成的唯一随机串 .. release date: 2022-10-25 # 版本发布日期 .. section: Security # 归入板块据此可以精确追踪每一项改动的上游 issue 与归属板块。值得注意的是部分条目标注的是 2017–2020 年的bpo编号如 tarfile 压缩级别可调、asyncio.loop.shutdown_default_executor增加 timeout说明该文件是「长期挂起问题」被合入 3.12 后的真实记录——Alpha 周期并不只是新功能而是把多年技术债集中清算的窗口。需要指出的是本仓库当前主线已演进至 Include/patchlevel.h 所声明的 3.16.0a0 开发版而本档案描述的是 3.12.0a1 这一历史快照文中谈及的功能状态以档案记录的时间点为准读者在 3.16 主线阅读时应注意其后缀补丁与回退。Security五个必须知道的安全修复文件开篇即Security板块几乎每一项都是「能被攻击者利用」级别的修复1.list * int的整数溢出检测gh-97616Fix multiplying a list by an integer (list * int): detect the integer overflow when the new allocated length is close to the maximum size.list * n需要计算len(list) * n作为新分配长度当该乘积逼近PY_SSIZE_T_MAX时会绕过常规长度检查导致分配过小缓冲区后越界写入。修复在Objects/listobject.c的重复逻辑中加入显式溢出探测。触发复现思路# 旧版本中极端 n 可能使内部乘法溢出产生越界风险 huge [0] try: huge * 2**63 - 1 except MemoryError: pass2. forkserver 通信从 Linux 抽象 socket 撤回文件系统 socketgh-97514 / CVE-2022-42919这是 3.12.0a1 最具份量的安全变更。此前multiprocessing的 forkserver 子进程在 Linux 上使用abstract socket namespace地址以\0开头通信而抽象 socket没有权限位同一网络命名空间通常即整台机器内的任何用户都能连接并注入代码到 forkserver 进程形成潜在提权漏洞编号 CVE-2022-42919。修复后恢复使用文件系统路径承载的 Unix domain socket权限被限制为 forkserver 进程所属用户与 3.8 及更早行为一致仅影响主动选用forkserverstart method 的代码。在现仓库的 Lib/multiprocessing/forkserver.py 与 Lib/multiprocessing/connection.py 中仍能看到该体系的痕迹forkserver 通过AF_UNIX监听 socket 接受客户端而connection.py保留了对「Linux abstract socket namespace 无需显式 unlink」的判别逻辑is_abstract_socket_namespace说明安全回归测试需要同时覆盖两类地址语义。3.http.server开放重定向gh-87389URI 路径以//开头时BaseHTTPRequestHandler会把self.path用于构造 Location 跳转可被构造为开放重定向。修复由 Hamza Avvan 发现并提出初始补丁。4. CookieJar 文件权限收紧gh-79096cookiejar.LWPCookieJar与MozillaCookieJar落盘文件权限由 644 收紧为600避免同机他用户读取浏览器级 CookieWindows 不受影响因其无 POSIX 权限模型。5.memoryviewuse-after-freegh-92888在特定访问路径下释放底层缓冲区后被再次访问构成 use-after-free。该修复与 Core and Builtins 板块中对memoryview迭代器未 finalize 造成的内存泄漏修复gh-92804同源呼应。6. mailcap 不再向 shell 注入不安全文本gh-68966已弃用的mailcap模块此前会直接把文件名、MIME 类型、参数拼接进 shell 命令现在遇到不安全文本时发出警告并按「未匹配」处理对测试命令则按测试失败处理杜绝 shell 注入。Core and Builtins3.12 的心脏手术这一板块占据档案约一半篇幅是 3.11 性能工程PEP 659 自适应专用化的延续也是 3.11→3.12 帧与字节码架构演进的过渡地带。可分为几个清晰的子主题。字节码集重构指令增删与跳转方向统一LOAD_METHOD被合并回LOAD_ATTRgh-93429。LOAD_METHOD是 3.11 为了区分「属性访问」与「方法绑定」而拆出的指令但代价是内联缓存与专用化路径重复3.12.0a1 将其撤销合并并随后把LOAD_METHOD内联缓存缩小 2 字节gh-93533使LOAD_ATTR一套专用化机制同时覆盖方法查找。PRECALL指令被移除gh-90690。它原用于辅助 call 专用化收益有限移除后调用序列更简洁。CALL_FUNCTION_EX死代码清理gh-96751。新增BINARY_SLICE与STORE_SLICEgh-94163源码中显式书写切片时改用专用指令为后续切片专用化铺路。条件跳转全部前向化gh-93554条目给出精确示例POP_JUMP_IF_TRUE BACKWARD_TARGET # 被汇编器改写为 POP_JUMP_IF_FALSE NEXT_BLOCK JUMP BACKWARD_TARGET同时删除全部带方向的伪跳转指令POP_JUMP_FORWARD_IF_TRUE、POP_JUMP_BACKWARD_IF_TRUE、POP_JUMP_FORWARD_IF_FALSE、POP_JUMP_BACKWARD_IF_FALSE、POP_JUMP_FORWARD_IF_NONE、POP_JUMP_BACKWARD_IF_NONE、POP_JUMP_FORWARD_IF_NOT_NONE、POP_JUMP_BACKWARD_IF_NOT_NONE无方向版本从此是真指令而非伪指令负责实现前向条件跳转。EXTENDED_ARG_QUICK在未 quicken 字节码中统一替换为基础EXTENDED_ARGgh-95113保证面向dis与非自适应字节码消费者的行为回到 3.10 语义。编译器为寻找应使用LOAD_FAST_CHECK的指令而引入的二次复杂度被消除gh-97912CACHE条目的读写性能在部分平台得到改善gh-90997。巨大序列解包上千元素此前编译失败现可正确编译执行gh-94329。帧模型从「可观察的中间帧」到「完整帧」的彻底收敛3.12.0a1 完成了 3.11 引入的_PyInterpreterFrame内联帧架构的最后收尾档案中大量修复可以归入一条主线——内部帧状态必须在任何可观察路径上保持一致内部字段_PyInterpreterFrame.f_func改名f_funcobj且可持有任意对象f_globals/f_builtin可能含垃圾值官方建议将整个 struct 视为不透明gh-96237。确保所有 PyFrame 对象都由「完整」帧支撑gh-97779不为不完整帧创建帧对象使生成器/闭包的创建不再可被 Python 与 C 扩展观测恢复 3.10 行为gh-94262。修复多个 frame 对象共享同一 interpreter frame 导致的内存损坏与硬崩溃gh-97002修复新生成器/协程帧上访问f_back的数据损坏gh-97752保证回溯与信号处理器中不会出现非法帧gh-96754PyThreadState_GetFrame跳过不完整帧gh-95818PyEval_GetFrame在顶层帧半初始化时不再崩溃gh-96975tracemalloc 痕迹不再包含不完整帧gh-96612。行追踪与代码对象模块级RESUME指令行号归零以符合 PEP 626gh-94485按需惰性建立「字节码偏移→行号」映射并缓存首个可追踪指令的偏移显著加速 tracing 场景的行号计算gh-93516f_lineno赋值时正确计算含扩展参数与条件 pop 的合法跳转目标gh-94438。追踪机制本身sys.settrace()/sys.setprofile()在__del__或中断中打开时立即生效gh-96636tracer/profiler 内运行的 Python 代码恢复全速gh-90081移除生成器/协程启动时多余的 LINE 事件gh-92236C 扩展也可通过PyErr_CheckSignals周期性触发 GCgh-97922。异常处理字节码布局异常处理器代码移到代码单元末尾无异常时省一次跳转gh-93356重排with/async with的字节码顺序以缩减异常表条目gh-93621YIELD_VALUE操作数改为栈深度辅助帧处理与调试器gh-89914。内存与对象布局普通对象从 8 word 减到 6 word把 weakreflist 指针移入对象pre-header紧邻 dict/values 指针之前使「简单」对象占用从 8 个 word 降到 6 个gh-95245。再把 managed dict 与 values 指针合并为单一带标签指针pre-header 再省 1 个 wordgh-95245 续gh-95355 周边工作。C API 侧配套暴露Py_TPFLAGS_MANAGED_DICT与Py_TPFLAGS_MANAGED_WEAKREF设置tp_dictoffset/tp_weaklistoffset的扩展类将失去多重继承支持但换来安全gh-95589恢复 3.10 下「dict 存储在结构体尾部」的扩展类多继承行为gh-92678提供不稳定 API_PyObject_VisitManagedDict/_PyObject_ClearManagedDict让扩展把 dict 托管给 VMgh-92678。自适应专用化adaptive specialization的深化PEP 659 机制在 3.12.0a1 中继续扩展覆盖面LOAD_ATTR针对property()、自定义__getattribute__对象专用化gh-93911、gh-93955属性查找性能提升gh-93955 的配套优化修复访问 property 时LOAD_ATTR无法正确专用化的问题gh-93911 关联 gh-93554 周边LOAD_METHOD对惰性字典对象专用化gh-92777Ken JinFOR_ITER加入 PEP 659 专用化体系gh-91432专用化计数器改用指数退避显著减少失败专用化次数、避免不适宜部分程序的性能回退gh-93354通过 vectorcall 优化__get__调用gh-95977__get__文本签名修复gh-93021。语法错误与位置信息traceback 质量工程档案反复出现「incorrect/overly-broad column」类修复整体趋势是让每一个字节码、AST 节点都携带精确的 start/end 行列tokenizer 状态新增运行列偏移避免用指针算术推算 AST 列信息tokenizer 直接向 parser 返回设置 AST 位置所需的全部信息gh-97997、gh-97973。修复列表/集合/字典推导式、生成器表达式、assert、链式比较作分支条件、布尔表达式子表达式、多行方法调用/属性访问、多行 f-string 表达式等场景的行列位置gh-98461、gh-98398、gh-98390、gh-95921、gh-96268、gh-95605、gh-93662、gh-94869。源码含NUL 字节时 parser 直接抛SyntaxErrorgh-96670含非法 UTF-8 的源文件在正确位置报告坏字符gh-96611、gh-96268。手建 AST 位置被校验非法位置导致ValueError而非崩溃gh-93351无显式 end 位置的自定义 AST 节点仍可编译gh-93359超长表达式如0*1000000由崩溃改为RecursionErrorgh-95185。深层嵌套 match 序列模式不再产生指数级回溯gh-93671f-string 尾部缺}f{i等 assert 崩溃修复gh-93418、gh-93283。新增系统级 API 与工具链能力-X perf选项与sys.activate_stack_trampoline/sys.deactivate_stack_trampoline/sys.is_stack_trampoline_activegh-96143通过 trampoline 机制让 Linuxperf分析器能解析 Python 调用栈由 Pablo Galindo 设计。GC 触发机制变更gh-97922垃圾回收不再于对象分配路径上运行而是只在字节码求值循环的 eval breaker上运行C 扩展长时无 Python 代码执行时可通过PyErr_CheckSignals让 GC 周期性运行——这是为后续3.13--disable-gil探索铺路的调度架构调整。Python 递归检查与 C 递归检查分离gh-91079降低 C 栈溢出概率使sys.setrecursionlimit可更安全地调高。dict 变更订阅 APIgh-91052为选定字典增加修改事件订阅能力后续落地为dict.__watch__系列。PyType_FromMetaclassgh-93012以额外 metaclass 参数泛化PyType_FromModuleAndSpec供语言绑定工具拦截子类化与静态属性访问进入 Limited API/Stable ABI。PyType_Watchgh-91051在PyType_Modified上注册回调。代码对象访问新函数PyCode_GetVarnames/PyCode_GetCellvars/PyCode_GetFreevarsgh-94936PyCode_GetCode结果缓存以恢复co_code的 O(1) 访问gh-93382。PyEval_SetProfileAllThreads/PyEval_SetTraceAllThreads及 Python 侧threading.setprofile_all_threads/threading.settrace_all_threadsgh-93503。PyFunction_SetVectorcallgh-92193用于改写函数对象 vectorcall 字段。vectorcall APIPy_TPFLAGS_HAVE_VECTORCALL、PyVectorcall_NARGS、PyVectorcall_Call加入Limited API 与 Stable ABIgh-93274类重新赋值__call__时自动摘除该标志以保障可变类型安全gh-95504。PyType_FromMetaclass及同类函数现在校验偏移量/tp_basicsize一致性gh-89546PyType_Spec中 slot ID 不得重复否则抛异常gh-93466PyType_FromSpec依据 bases 推导 metaclass冲突时报错gh-45383。整数转字符串长度限制的配置移入PyConfig C API 结构gh-96512超限ValueError提示中引导使用sys.set_int_max_str_digitsgh-95778-X int_max_str_digits无值解析修复gh-96848。删除与弃用清账清单sys.getdxp与Tools/scripts/analyze_dxp.pygh-97670DXP 随 3.11 已删的DYNAMIC_EXECUTION_PROFILE/DXPAIRS宏一并退场替身是./configure --enable-pystats配合sys._stats_on/_stats_off/_stats_clear/_stats_dumpgh-93841。--experimental-isolated-subinterpreters配置项与EXPERIMENTAL_ISOLATED_SUBINTERPRETERS宏移除gh-84694。importlib.util.set_package()、set_loader()、module_for_loader()移除module_repr()全面清除gh-65961、gh-96237、gh-97850。warnings.warn_explicit()发现m.__loader__与m.__spec__.loader不一致时升级为DeprecationWarninggh-86298__package__与__spec__.parent不一致同样升级gh-65961。全局配置变量如Py_IgnoreEnvironmentFlag在文档层面弃用改推Py_InitializeFromConfiggh-93103。内部实现移除C 核心与 C 扩展未定义行为UB系统性修复贯穿整份档案——audioop.c、_testcapimodule.c、ceval.c、null 指针算术、ceval的 NULL 检查等数十处gh-96821、gh-96678、gh-96569、gh-96572、gh-96387 等。Library新增、提速、收编与摘除值得立即上手的新增能力itertools.batched()gh-98363把可迭代对象按固定长度分批为 list末批可能更短。对应 C 实现在 Modules/itertoolsmodule.c import itertools list(itertools.batched(range(10), 3)) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]os.setns()与os.unshare()Linuxgh-95023直接暴露 Linux 命名空间系统调用setns用于加入已有命名空间unshare用于脱离当前命名空间容器/沙箱工具的重要原语。实现位于 Modules/posixmodule.c。os.pidfd_open支持os.PIDFD_NONBLOCKgh-93312以非阻塞模式打开进程文件描述符。random.binomialvariate()gh-81620标准库首次内置二项分布采样见 Lib/random.py。statistics.correlation()支持 Spearman 秩相关系数gh-95861。pathlib.Path.walk()gh-90385os.walk的面向对象替代返回(dirpath, dirnames, filenames)配套修复PurePath.parents负索引与空模式rglob、WindowsPurePath驱动器拼接问题gh-93156、gh-92550、gh-94909实现位于 Lib/pathlib/init.py。memoryview支持半精度浮点half-floatsgh-90751。Unicode 数据升级到 15.0.0gh-96734同时修复east_asian_width对未分配字符的错误返回与unicodedata_db数据瘦身gh-96172、gh-96019。strftime 新增%:zgh-69142生成带冒号分隔的时区偏移如08:00与 RFC 3339/ISO 8601 对齐。sqlite3 CLIgh-77617python -m sqlite3命令行界面另修复connect回归、rowcount对UPDATE ... RETURNING、DML 前导注释检测、Connection 工厂参数中继等问题gh-95132、gh-93421、gh-79579、gh-95132。loggingdictConfig可成对配置QueueHandler/QueueListener新增logging.getHandlerByName/getHandlerNamesLogger.getChildren()filter 可返回LogRecord以增强记录gh-93162、gh-89258、gh-92591。asyncioTask.cancel(message)撤销弃用gh-90985Task.get_context()/Handle.get_context()gh-96704Linux 默认 child watcher 切换为PidfdChildWatchergh-98023get_child_watcher/set_child_watcher与三类 watcher 弃用gh-94597loop.shutdown_default_executor增加timeout默认 5 分钟create_connection增加all_errorsgh-93973StreamWriter.drain支持并发 awaitgh-74116。tempfile.NamedTemporaryFile 新增delete_on_closegh-14243zipfile 未压缩未加密条目快速 seekgh-44173wave 支持WAVE_FORMAT_EXTENSIBLEgh-32990fcntl 暴露FICLONE/FICLONERANGEgh-93475ctypes 新增c_time_tgh-92869socket 新增SO_RTABLE/SO_USER_COOKIEgh-91968csv.DictReader/DictWriter 支持__class_getitem__gh-92391enum Flag 恢复非连续值组合gh-96865。HTTPStatus 增加类别属性gh-95149如HTTPStatus.OK.is_success。性能提升的典型条目gzip.GzipFile.read快 10%gh-95534默认不排序键时json.dumps()更快gh-95385re.sub/re.subn含组引用替换串快 2–3 倍gh-91524特定字符区间U0100 以上字符串搜索快至 10 倍gh-93033urllib.parse.quote_from_bytes内存与速度双优化gh-95865bisect利用类型稳定性提速gh-96538Fraction哈希缓存gh-96465bool(db)对超大 dbm 不再全量遍历gh-46412str.split/rsplit缩减 list 分配gh-91146list/tuple 重复使用memcpy批量拷贝与引用计数gh-47091。摘除与清理重要迁移提醒smtpd模块移除gh-93243按 PEP 594 日程。一批早已弃用的 API 正式删除ssl.wrap_socket、ssl.match_hostname、ssl.RAND_pseudo_bytesgh-94199hashlib.pbkdf2_hmac纯 Python 实现gh-94199OpenSSL C 实现更快gzip.GzipFile.filenamegh-94196locale.formatgh-94226io.OpenWrapper/_pyio.OpenWrappergh-94169pathlib.Path.link_togh-84131configparser.SafeConfigParser/readfp等gh-89336timeit 的-c/--clock与-t/--timegh-90085os.popen的encoding参数gh-879013.11b1 加入又撤回importlib.util.set_loader/module_for_loadergh-97850sqlite3.enable_shared_cache/OptimizedUnicodegh-92547zipimport的find_loader/find_modulegh-94379xml.etree纯 PythonElement.copy()gh-94383ElementTree.write(encodingunicode)不再乱写 XML 声明gh-91810。模块不再接受bytearray/memoryview等 bytes-like 路径仅接受精确bytesgh-98393配套 C API 侧PyUnicode_FSDecoder同步收紧sys.path亦不再接受 bytesgh-47025。re.template/re.TEMPLATE/re.T在 3.11.0b1 被删后恢复但改为弃用gh-92728预计 3.13 再移除enum的auto()默认行为变更被弃用gh-91456locale.resetlocale弃用gh-90817asyncio若干遗留接口弃用gh-94597typing.Hashable/typing.Sized别名弃用gh-94309sqlite3默认 adapters/converters 弃用gh-90016。C API面向 Stable ABI 的收口除去上文已述的向量调用、managed dict/weakref、PyType_FromMetaclass、PyType_Watch外C API 板块还包含Limited API 与 Stable ABI 扩展vectorcall 三件套进入有限 APIgh-93274PyType_FromMetaclass可经有限 API 使用gh-93012。移除过时 C APItoken.h头文件删除从未有公开 tokenizer C APIgh-92651基于Py_UNICODE*的旧式 Unicode API 全量删除gh-92536PyUnicode_InternImmortal与SSTATE_INTERNED_IMMORTAL移除gh-85858。借用/新引用语义修正PyFunction_GetAnnotations恢复返回借用引用gh-97943Exception.__setstate__补齐 incref/decrefgh-97591PyGILState_Ensure分配新线程状态时的死锁修复gh-96071。错误处理更严格PyUnicode_FromFormat/V遇到未知格式符现在置SystemError此前会把剩余格式原样复制宽度/精度与符号位置修复gh-95781、gh-95504PyArg_ParseTupleAndKeywords的#配合无PY_SSIZE_T_CLEAN时不再误报SystemErrorgh-94930。类型对象健全性PyType_Ready初始化ht_cached_keys并校验类型配置防止第三方用非标准方式建类型导致崩溃gh-96046带Py_TPFLAGS_IMMUTABLETYPE的不可变类型以可变基类创建被弃用gh-95388frame 相关函数/类型可直接经Python.h使用gh-93937C11 兼容性修复与static_assert/宏定义规避gh-91321、gh-91731、gh-93442。全局配置变量弃用、PyConfig.module_search_paths语义修正gh-92913PyRun_InteractiveOne在给定 FD 解析时能正常提供 tracebackgh-59121。Build 与平台支持配置体系与 wasm 大跃迁构建体系distutils 时代正式结束本文件记录了 CPython 构建历史上标志性的收编动作C 扩展模块改由configuremake构建不再依赖 distutils/setup.pygh-93939模块清单由 Modules/Setup.stdlib.in替代 Setup.stdlib 模板与 Modules/Setup 描述配套新增Tools/scripts/check_modules.py校验 builtin 与共享扩展gh-93939makesetup处理共享扩展 CFLAGS 顺序gh-944042to3/idle/pydoc脚本改由 Makefile 生成安装gh-93939。编译器要求抬到 C11统一使用%zu/%zd格式化size_t/Py_ssize_tgh-93202va_start必须双参形式gh-93207。链接优化Clang 下ThinLTO 成为默认策略gh-85936引入BOLT post-link 优化器提升中型到大型程序性能gh-90536新增--with-dsymutilgh-95973修复_bootstrap_python在 LTO 下用 clang 构建gh-96761移除多年失灵的--with-cxx-main与MAINCCgh-93744。依赖探测全面转向pkg-configreadline/cursesgh-90005、_ctypes的 libffigh-90005、_dbmgh-90005、自定义ZLIB_CFLAGS/ZLIB_LIBS生效gh-94801。configure现在会检测并报告 PEP 11 支持层级gh-93491PGO 安装竞态修复gh-93584。捆绑组件升级OpenSSL 1.1.1q、libexpat 2.4.9、libffi 3.4.3Windows、pip/setuptools 多次滚动升级至 22.3/65.5.0。WebAssemblywasm32 升格 PEP 11 Tier 3wasm32-unknown-emscripten与wasm32-unknown-wasi双双晋升 Tier 3 平台支持gh-95085。配套大量落地工作Tools/wasm/新工具自动化 configure/compile/testgh-95853浏览器版 emscripten 构建纳入concurrent.futuresgh-96883WASI 自研 pthread stub、跳过缺失dup/chmod/socket 函数、禁用 pymalloc 并加大栈、降低默认递归上限gh-95145、gh-95174、gh-90473、gh-93584 周边emscripten 不再构建resource模块gh-84461。Windows 与 macOSWindows 板块集中于py.exe启动器与安装器体验py.exe优先活动虚拟环境、/usr/bin/envshebang 搜索 PATH、per-user 默认安装、py.ini 前缀 bug、-V:{company}/解析gh-92984、gh-94399、gh-90989、gh-95359、gh-98414Tools目录不再随 Windows 安装分发gh-97649platform改用 WMI 取系统版本gh-89545os.get_terminal_size支持任意 handlegh-43414zipfile 解压去除路径尾随空格gh-94018venv 支持含空格的路径gh-90844msilib缓冲越界修复gh-96577sqlite3enable_load_extension在 Windows 放开gh-95656进程内路径比较改用LCMapStringExgh-42658。macOS 侧重一个细分但危险的场景macOS 13 SDK 新增mkfifoat/mknodat系统调用若用新 SDK 构建却运行在旧系统上os.mkfifo/os.mknod配合dir_fd可能段错误——通过为这两个系统调用补充运行时 weaklinking检测解决gh-97897。IDLE / Tools / Tests / Documentation 的工程清理IDLE修复与 3.10.8、旧版 Microsoft Python 并存且缺Lib/test时无法启动的问题gh-97527macOS 支持.pyi双击打开gh-89610模块浏览器可用于.pywgh-95411Shell 保存含提示符、复制含提示符不再多复制一行gh-95191、gh-95511。Tools/Demos移除ptags/eptags、整个Tools/demo/与Tools/scripts/过时示例、parseentities.pygh-68686、gh-97681、gh-97669、gh-86087Argument Clinic 支持module/self自定义 C 名及自定义输出目标gh-94430、gh-94538。TestsLib/ctypes/test迁入 Lib/test/test_ctypestest_tk改名test_tkintergh-93839、gh-54781AF_UNIX测试 socket 改放当前目录避免 TMPDIR 过长gh-93852regrtest-jN下检查临时文件泄漏、Windows stdout 编码问题gh-93353、gh-95027大量针对-O优化模式与 WASI 平台的跳过/修复。Documentation明确ast.literal_eval不再被宣传为「安全」gh-95588-W/PYTHONWARNINGS按字面、大小写不敏感匹配而非正则gh-86438sqlite3文档与实现参数对齐、PrepareProtocol与上下文管理器行为澄清最低 Sphinx 版本升至 3.2WebAssembly 可用性标签与平台可用性语法统一。结语如何把这份档案变成你的升级清单Misc/NEWS.d/3.12.0a1.rst 是一份「时间胶囊」式的工程档案它把 3.11 遗留的性能与内存模型改造完整帧、managed dict、6-word 对象、自适应专用化收官把 distutils 彻底移出构建链把 wasm 平台扶正为 Tier 3同时完成了对 CVE-2022-42919 等安全债的清偿。若你正在做跨版本移植或维护 C 扩展可按以下优先级使用本文安全核对自身是否使用forkserver启动方式、自建 HTTP 服务、手写 Cookie 文件C 扩展检查tp_dictoffset/tp_weaklistoffset使用、Py_UNICODEAPI、token.h依赖尽早迁移到 managed dict/weakref 与 vectorcall应用代码检索被移除 APIssl.wrap_socket、locale.format、SafeConfigParser、smtpd等并替换顺带把batched()、Path.walk()、binomialvariate()纳入工具箱字节码与追踪消费者调试器、profilers、字节码工具条件跳转方向、LOAD_METHOD/PRECALL消失、EXTENDED_ARG_QUICK归一化都会影响你对dis输出的解析务必同步更新。后续版本3.12.0a2 至 3.13的变更可继续在 Misc/NEWS.d 目录下按同名规则研读形成完整、可检索的演进脉络。【免费下载链接】cpythonThe Python programming language项目地址: https://gitcode.com/GitHub_Trending/cp/cpython创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表