news 2026/9/9 13:55:24

CPython 3.13.0a3 变更全解:核心解释器、标准库、平台构建与 C API 的百余项改进

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CPython 3.13.0a3 变更全解:核心解释器、标准库、平台构建与 C API 的百余项改进

CPython 3.13.0a3 变更全解:核心解释器、标准库、平台构建与 C API 的百余项改进

【免费下载链接】cpythonThe Python programming language项目地址: https://gitcode.com/GitHub_Trending/cp/cpython

本文以 CPython 仓库中的归档发布说明 Misc/NEWS.d/3.13.0a3.rst 为主体展开。该文件记录了 CPython 3.13.0 第三个 alpha 版本(计划发布于 2024 年 1 月 17 日,条目时间跨度从 2023 年 9 月到 2024 年 1 月)前后合入的约 200 项变更,覆盖安全修复、解释器核心与内建类型、标准库各模块、测试与构建系统、Windows/macOS 平台适配以及 C API。阅读本指南,你可以系统地掌握 3.13 早期开发阶段的重点方向(自由线程化前的 GIL 重构、Tier 2 优化器、递归保护、跨平台一致性与安全加固),并借助源码定位理解每条变更背后的实现位置与后续演进脉络。需要说明的是,当前仓库开发分支已推进到Include/patchlevel.h所标注的 3.16.0a0,本文件是 3.13 周期的历史记录,但其中大量行为与 API 至今仍以演化后的形式存在于源码中,适合作为研读解释器演进史的切片。

一、如何阅读 CPython 的 NEWS.d 发布说明

CPython 的每一条用户可见变更,都先以独立条目形式沉淀在 Misc/NEWS.d/ 目录下、按里程碑命名的.rst文件中(例如3.13.0a3.rst)。每个条目的元数据字段(reStructuredText 注释形式)提供了完整溯源信息,字段含义如下:

  • date:该变更合入源码的 UTC 时间;
  • gh-issue/bpo:对应的 GitHub Issue 或 Python bug tracker 编号,是回溯讨论、补丁与测试的锚点;
  • nonce:条目唯一标识,用于 blurb 工具去重;
  • section:变更分类,本文件中出现SecurityCore and BuiltinsLibraryDocumentationTestsBuildWindowsmacOSIDLEC API十个分区;
  • release date:里程碑的整体发布时间。

下文严格沿用上述分区组织正文,把散落的条目按主题归类讲解,并补充其在当前仓库源码中的对应证据。

二、安全修复(Security)

该版本的安全改动集中在两条:

  1. 跳过以点开头或带隐藏属性的.pth文件(gh-113659)。.pth文件会在解释器启动时被site模块自动执行,若攻击者能在sys.path目录中放置恶意命名文件,可能造成任意代码执行。这一改动规定文件名以.开头的.pth文件(如.evil.pth)以及带有隐藏文件属性(Windows 上FILE_ATTRIBUTE_HIDDEN)的文件一律被忽略。该行为在源码中得到延续并进一步演进——在 Lib/site.py 中,站点目录扫描器在枚举sys.path扩展文件时,会过滤name.endswith(".pth") and not name.startswith(".")之外的文件;同时在 Lib/site.py 的_read_pthstart_file中,对隐藏文件会输出Skipping hidden .pth file的跟踪日志并跳过。
  2. 引入软件物料清单(SBOM)文档与依赖追踪工具(gh-112302)。仓库根目录下的 Misc/sbom.spdx.json 与 Misc/externals.spdx.json 即这一工作的落地产物,以 SPDX 格式声明 CPython 自身及其打包的外部依赖,便于供应链审计。

三、核心与内建(Core and Builtins)

这是本次条目数量最庞大的分区,可归纳为四条主线:递归深度保护、Tier 2 优化器与执行器推进、编译与字节码修正、语言与内建行为的精确化。

3.1 C 递归深度保护的两次调整

  • gh-113655:将 C 递归限制(Python/C 相互递归时的硬上限)在 Windows 上设为4000,Linux/macOS 上设为10000,作者称这是“在保证安全与不破坏向后兼容之间的甜点区”。
  • gh-112215:将非调试构建的 C 递归限制整体提高 3 倍(webassembly 与 s390 平台除外),以缓解 3.12 中 Python 代码与内建(C)代码深度混叠递归时出现的回归。

围绕递归限制,仓库还专门处理了测试与平台的适配:Tests 分区中 gh-111798 在 pydebug 构建下于 WASI 禁用test_super_deep,gh-111801 降低test_isinstancetest_infinitely_many_bases的递归深度,gh-111802 为test_bad_getattr指定低递归深度,均是避免受限平台栈溢出的配套措施。另外,作为后续演进的印证,Doc/whatsnew/3.14.rst记录了非文档化宏Py_C_RECURSION_LIMIT在 3.14 被彻底移除——阅读时需注意这一系列保护机制后来被归并进sys的递归设置体系。

3.2 Tier 2 执行器与“保证进展”语义

3.13 是 CPython 实验性 Tier 2(基于迹的)优化执行器成型的关键阶段,本文件集中了多项语义约束:

  • gh-113853:保证所有 executor 都取得进展,进而保证 Tier 2 执行永远能向前推进,避免死循环;
  • gh-108866:改写_PyExecutorObject的 API 与契约——改为返回next_instr指针(而非 frame),并且每次至少执行一条指令
  • gh-113657:修复一个导致“重要指令指针更新被从 Tier 2 trace 中优化掉”的问题;
  • gh-113710:为解释器 DSL 增加类型化栈效应(typed stack effects)及多种指令注解,为机器生成执行代码的类型检查铺路;
  • gh-112320:Tier 2 翻译器依据分支指令 “counter” 的置位位数跟踪“留在 trace 上”的置信度,置信度低于 1/3 时终止 trace 翻译。

与之协同的是针对“eval breaker”的多处编译器改动(均属 gh-107901):不带行号、有多个前驱、带 eval breaker 检查的基本块会被复制;跳出异常处理器回到普通代码的跳转、以及不在循环末尾的合成跳转,均不再检查 eval breaker。Eval breaker 是解释器周期性让出控制权(用于信号处理、GC、gil 切换)的检查点,这一系列调整使检查点布局更紧凑,同时保证异常与信号语义不丢失。

3.3 字节码特化、编译与解析的精确化

  • gh-89811:执行依赖tp_version_tag的字节码特化前先校验该值有效,防止版本标签失效时误特化;
  • gh-113603 与 gh-113054:修复“冗余 NOP 未被移除导致调试模式断言失败”的编译器缺陷;
  • gh-113297:修复 with 语句含19 个上下文管理器时编译器段错误(深层嵌套的栈式压栈展开问题);
  • gh-113703:修复codeop模块把未完成的 f-string 误判为完整代码的回归,影响 REPL 补全判断;
  • gh-113602:修复解析器试图覆盖既有错误信息而崩溃的问题;gh-112388 同理修复对 tokenizer 错误的覆盖;gh-112387 修正了 tokenizer 反向报错时“解码字符串”的错误位置;
  • gh-106905:AST 解析器的递归深度跟踪从全局状态改为每解析器(per-parser)状态,消除多线程并发ast.parse的潜在竞态(该竞态在 3.11 主要由多线程用户触发,3.12 因 GC 时机变化一度被掩盖);
  • gh-99606:使空 f-string 生成与空普通字符串完全一致的代码,统一内联缓存行为;
  • gh-111488:改进列表推导式中for后缺少in关键字的错误信息。

3.4 异常、内建行为与错误报告

  • gh-111375:异常栈中仅用NULL标记“异常已处理”,收紧哨兵值的语义(Patch by Carey Metcalfe);
  • gh-112217:对raise from TT构造出的__cause__增加类型检查;
  • gh-112716:修复__builtins__非字典时import语句及内建类型__reduce__()SystemError的问题;
  • gh-112125:修复None.__ne__(None)返回NotImplemented而非False
  • gh-74616:input()在提示串包含内嵌空字符时改为抛出ValueError,不再静默截断;
  • gh-112730:traceback 中的错误位置现在用颜色高亮(与PYTHON_COLORS相关);
  • gh-95754:访问部分初始化模块的非法属性时,错误信息纳入模块来源,帮助定位“模块遮蔽”问题;
  • gh-113212:改进super相关的错误信息;
  • gh-113486:对类的优化调用不再产生虚假的PY_UNWIND事件;
  • gh-113753:修复PyAsyncGenASend对象从 free list 分配时终结器可能不被调用的缺陷;
  • gh-105967:规避 Apple macOS 平台自带 zlib 中zlib.crc32/binascii.crc32在多 GB 输入下结果错误的问题(包括经zipfile处理大文件时);
  • gh-111058:协程/生成器被close()后,coro.cr_frame/gen.gi_frame返回None,使inspect.getcoroutinestategetgeneratorstate对已关闭对象返回正确状态;
  • gh-112367:perf trampolines 相关——为避免未定义行为,代码 arenas 延迟到解释器 shutdown 时才释放;
  • gh-109598:PyComplex_RealAsDouble/PyComplex_ImagAsDouble在回退到__float__()之前,先尝试用对象的__complex__()方法转为复数。

3.5 优化、内建模块与平台行为

  • gh-90350:优化内建min/max(改走特化的比较路径);
  • gh-112943:tokenize模块对多行 token正确计算结束列偏移;
  • gh-112625:修复bytearray.join()在迭代实参期间 bytearray 可能被清除、从而读取已释放内存的 bug;
  • gh-77046:Windows 上包装系统句柄的文件描述符默认不可继承,落实 PEP 446(Python 3.4 即要求的“make newly created file descriptors non-inheritable”,此处补齐了句柄包装路径);
  • gh-113710/gh-113853 等涉及Python/下生成式解释器基础设施的演进,可结合 Python/ceval.c 的调用入口研读。

较长历史的合并条目还包括:bpo-21861 让_io.FileIO_io._WindowsConsoleIOTextIOWrapper__repr__使用对象的真实类名以利于子类化;bpo-45369 按 PEP 644(OpenSSL 1.1.1 及以上成为唯一选择)删除 LibreSSL 相关 workaround;bpo-34392 增加sys._is_interned;gh-94606 修复email.message.get_payload读取含 surrogate 字符且内容不满足 surrogateescape 良构性时的UnicodeEncodeError

四、标准库(Library)

Library 分区改动最多,覆盖asynciopathlibzipfilesubprocesspickleplistlibtypingtkintermultiprocessingssl等模块。以下按主题分类讲解。

4.1 asyncio:取消语义与并发健壮性

  • gh-113848:asyncio.TaskGroupasyncio.timeout上下文管理器现在同时处理CancelledError子类,而不再只认精确的CancelledError
  • gh-111693:asyncio.Condition.wait在被打断时原样重抛同一个CancelledError实例;同时修复Semaphore.acquire在取消打断时的竞态;
  • gh-96037:在超时的asyncio.timeout块退出时,将TimeoutError作为 context 插入到被抛出的原异常上(__context__),便于追溯因果链;
  • gh-112622:确保asyncio.create_taskname参数真正传给事件循环;
  • gh-113538:StreamReaderProtocol.connection_made中包装“connected callback”的任务被取消时,只关闭 transport 而不再误记错误日志;
  • gh-113214:修复 SSL-over-SSL 场景下 SSL 协议 abort 过程中的AttributeError
  • gh-112800:修复SubprocessTransport.close()在 setuid 可执行文件场景下误抛PermissionError
  • gh-112989:降低SelectorEventLoop连接 socket 的开销;
  • gh-112559:signal.signal/signal.getsignal不再对可调用处理器调用reprasyncio.runRunner.run也不再对任务结果调用repr(避免用户代码副作用);
  • gh-112182:Future.set_exceptionStopIteration转换为RuntimeError,避免挂起等异常行为。

4.2 pathlib 家族:提速与 API 归位

  • gh-113225:Path.glob尽可能利用os.DirEntry.path,省去重新拼接路径;
  • gh-112727:加速Path.absolute;gh-112405:优化PurePath.relative_to;gh-112361:通过削减临时对象提速少量 pathlib 方法;gh-77621:延迟部分导入,改善 pathlib 的 import 时间;
  • gh-113568:弃用警告统一由公开类PurePath而非私有基类发出,使过滤目标更精确;
  • gh-113568(Library):审计事件改由pathlib.Path而非私有PathBase触发,保证addaudithook用户能捕获到;
  • gh-103363:Path.owner()Path.group()新增follow_symlinks关键字参数(默认True);
  • gh-110109:新增私有pathlib._PurePathBase(省略若干魔术方法的PurePath基类),未来可能连_PathBase一并公开。

4.3 zipfile:安全与兼容并进

  • gh-109858:防御“quoted-overlap” zipbomb——当条目与其它条目或中央目录重叠时抛BadZipFile
  • gh-113971:将原本保护的ZipInfo._compresslevel属性公开为.compress_level,旧名以 property 形式保留以兼容;
  • gh-112932:恢复extractall对含"/"目录条目 zip 的处理(wiki、bug tracker 导出工具常见);
  • gh-112578:修复模块运行时的虚假RuntimeWarning
  • gh-105967(见 Core):zipfile 大文件场景同样受益于 macOS zlib 规避。

4.4 subprocess / os / shutil:POSIX 语义回归与安全

  • gh-112334:修复 3.12 在 Linux 上因逻辑 bug 不再走快速路径vfork()的性能回归;同时修复一个安全缺陷——传入extra_groups=[]时,子进程在exec()前未执行setgroups(0, NULL)清空附加组列表(代码审查中发现);
  • gh-113117:subprocess在支持posix_spawn_file_actions_addclosefrom_np的平台可用os.posix_spawn+close_fds=True
  • gh-112970:closefrom从仅 FreeBSD 扩展到 Linux(glibc ≥ 2.34);
  • gh-113119:os.posix_spawn支持env=None,使新进程继承当前进程环境;
  • gh-113191 / gh-59616:Windows 上补齐os.fchmodos.lchmod以及os.chmodfollow_symlinks参数(lchmod在 Windows 的follow_symlinks默认为False);
  • gh-113188:修复 Windows 上shutil.copymode/copystat对符号链接的操作语义;
  • gh-94692:shutil.rmtree现在只捕获OSError,避免符号链接攻击抵御版在非法参数下吞掉/透传任意异常给错误处理器;
  • gh-112645:移除向shutil.rmtreeonerror时的弃用错误;
  • 较老合并项:gh-91133/bpo-43153 的TemporaryDirectory清理修复、bpo-37260 的rmtree竞态、bpo-26791 的shutil.move符号链接语义、bpo-35332 的rmtree忽略os.close错误,共同让目录树操作在不同平台更加一致。

4.5 pickle / marshal / plistlib:跨版本互操作与 C 实现补全

  • gh-113626:marshal模块新增allow_code参数,传allow_code=False时禁止序列化/反序列化代码对象(此类数据在 Python 版本间不兼容);
  • gh-89850:为 C 实现的Pickler/Unpickler补充persistent_id/persistent_load默认实现——此前在子类中调用super().persistent_id()会无限递归;
  • gh-113028:Python 实现下,协议 0 中第二次引用同一字符串且含换行等字符时,此前会产生重复对象,现保证单份复制、重载后共享同一对象;
  • gh-111803:plistlib支持加载二进制格式中嵌套更深的列表(提升递归深度上限);
  • gh-113537:plistlib.loads支持直接传入str
  • gh-53502:plistlib新增aware_datetime选项,用于加载/导出带时区的datetime
  • 较老项:bpo-41422 修复Pickler/Unpickler经 memo 映射的循环引用内存泄漏;gh-85567 修复 pickle 与 pickletools CLI 未关闭文件的资源警告。

4.6 typing / typing 生态:运行时检查提速与元数据修正

  • gh-74690:仅含一个可调用成员的runtime_checkable协议,isinstance提速约 20%、issubclass提速约 10%;针对简单协议的整体issubclass检查提速约 6%;
  • gh-113320:修复 3.12 回归——未标记runtime_checkableProtocol类不再被多余内省,避免其有问题的成员抛出异常;
  • gh-112509:修复TypedDict的键同时出现在__required_keys____optional_keys__的边界情形;
  • gh-112345:改进对含非方法成员的Protocol调用issubclass时的错误信息;
  • gh-112618:修复typing.Annotated缓存 bug——Annotated[str, True]不再与Annotated[str, 1]相等;
  • gh-111874:创建NamedTuple时确保对类字典值中所有定义__set_name__的对象调用该方法。

4.7 tkinter / 其它 GUI 与编辑器相关

  • gh-113877:修复 64 位 Windows 上winfo_pathname()
  • gh-68166:tkinter.ttk.Style.element_create支持"vsapi"元素类型(Windows Vista+ 风格);
  • gh-75666:修复widget.unbind(sequence, funcid)两参形式——此前会销毁该 sequence 的全部绑定,现只移除指定 funcid、仅当 funcid 为最后一个绑定命令时才解绑 sequence;
  • gh-102980:pdbinteract命令输出重定向到与调试器相同的通道,并补充测试与文档;
  • gh-99367:pdb在设置safe_path时不再篡改sys.path[0]
  • gh-52161:cmd.Cmd.do_help写入帮助前用inspect.cleandoc清洗 docstring;
  • gh-102130:cmd模块支持editline下的 Tab 补全。

4.8 网络、ssl、socket、http

  • gh-63284:ssl模块新增TLS-PSK(预共享密钥)模式支持;
  • gh-40262(合并项):SSLContextrecv_into不再要求 buffer 实现__len__,支持任意元素大小的 buffer;
  • gh-114077:修复 32 位平台上socket.sendfile传入大于 2 GiB 的count时的OverflowError
  • gh-81194:修复socket.if_indextoname在特定值(UINT_MAX)下的崩溃,以及 64 位非 Windows 平台的整数溢出;
  • gh-113199:http.client.HTTPResponse.read1/readline在已知 content-length 并读尽数据后关闭底层 IO;
  • gh-102988:email.utils.getaddresses/parseaddr在更多非法地址场景返回('', ''),并新增strict参数(strict=False恢复旧行为);用getattr(email.utils, 'supports_strict_parsing', False)探测可用性——这是对 CVE-2023-27043 修复的补强;
  • gh-113594:修复 email 重折行时 unknown-8bit 与其它编码部分混杂导致的UnicodeEncodeError

4.9 数值与统计

  • gh-112540:statistics.geometric_mean()对含 0 的数据集返回 0(此前抛异常);
  • gh-67790:fractions.Fraction实现基础格式规范(最小宽度、对齐、填充);
  • gh-114014:修复Fraction解析中小数部分出现d字母时与其他非法字符错误不一致的 bug;
  • gh-81620:为random.binomialvariate补充额外测试。

4.10 并发与共享内存

  • gh-82300:SharedMemory新增track参数——可让共享内存块不注册到 POSIX 资源跟踪器,避免退出时自动释放带来的误回收;
  • gh-101225:提高multiprocessing.manager/resource_sharer创建Listener的 backlog,显著降低创建Connection时的 connection refused 概率;
  • gh-113421:修复多进程日志记录对%(filename)s的支持;
  • gh-109786:修复itertools.pairwise__next__()被重入时的引用泄漏与崩溃;
  • gh-113202:itertools.batched()新增strict选项;
  • bpo-34321(合并项):Unix 上mmap.mmap新增trackfd参数,为False时不再复制fileno指定的文件描述符。

4.11 平台常量与低层模块

  • gh-113868:mmap新增一批 macOSmmap(2)标志:MAP_NORESERVEMAP_NOEXTENDMAP_HASSEMAPHOREMAP_NOCACHEMAP_JITMAP_RESILIENT_CODESIGNMAP_RESILIENT_MEDIAMAP_32BITMAP_TRANSLATED_ALLOW_EXECUTEMAP_UNIX03MAP_TPRO
  • gh-113791:time在 macOS 新增CLOCK_MONOTONIC_RAW_APPROXCLOCK_UPTIME_RAW_APPROX(macOS 10.12+);
  • gh-87286:syslog新增 macOS 常量LOG_FTPLOG_NETINFOLOG_REMOTEAUTHLOG_INSTALLLOG_RASLOG_LAUNCHD
  • gh-51944:termios新增 macOS 系统头文件中的ALTWERASEB14400B28800EXTPROCIUTF8VSTATUS等 20 个常量;
  • gh-110190:修复 ctypes 结构体含数组在 PPC64LE(MAX_STRUCT_SIZE=64)与 Arm(MAX_STRUCT_SIZE=32)平台的问题;
  • gh-112510:新增readline.backend,指示 readline 实际使用的后端(editlinereadline);gh-112105 让readline.set_completer_delims在 libedit 下可用;gh-112292 修复从子解释器导入 readline 时的崩溃。

4.12 对象内省、反汇编、traceback 与函数对象

  • gh-112962:disInstruction实例直接携带 cache 信息,不再伪造代表 cache 条目的假Instruction
  • gh-112137:dis将无行号显示为"--"(替代None);且跳转目标改用逻辑标签而非偏移量;
  • gh-112332:弃用traceback.TracebackException.exc_type字段,新增exc_type_str替代(避免引用已清除的异常类型);gh-106922 让 traceback 在错误跨越多行时分行展示;gh-113358 修复渲染带损坏__getattr__的异常时的问题;
  • gh-112640:types.FunctionType新增kwdefaults参数以设置关键字默认值;
  • gh-112139:inspect.Signature.format可将签名格式化为字符串,pydoc借此渲染参数间换行的更可读签名;
  • gh-61648:doctest 可正确检测 property 所在行号;gh-94722 修复DocTest实例 lineno 为None时的比较失败;
  • gh-99437:runpy.run_path解码 path-like 对象,保证模块的__file__sys.argv[0]恒为字符串。

4.13 导入、打包与分发

  • gh-113175:同步 importlib_metadata 7.0——改进类型注解、修复package_distributions中符号链接包问题、新增EntryPoints.__repr__、引入diagnose脚本、新增Distribution.origin属性,并移除按数字索引访问EntryPoint(元组行为)的弃用路径;
  • gh-113238:为importlib.resources补充文档承诺过的Anchor导出;
  • gh-112414:修复 3.12 回归——经自定义 loader 导入的模块调用repr可能AttributeError
  • gh-113781:解释器终结期间产生警告时,静默不可 raise 的AttributeError
  • gh-113661:unittest runner 在测试被跳过时不再以退出码 5 结束(退出 5 的意图是侦测“测试套件完全未被发现”,跳过说明发现成功);
  • gh-113569:Mock.assert_has_calls失败信息现在会指明“根本没有发生调用”;
  • gh-104003:新增warnings.deprecated装饰器(对应 PEP 702),标记函数给静态类型检查器,并在使用弃用类/函数时告警;
  • gh-113407:修复无 docstring 构建下unittest.mock的导入;
  • gh-113246 / gh-112516:捆绑 pip 更新至 23.3.2(后 23.3.1 条目先于其合入)。

4.14 文件格式与既有模块的杂项修复

  • gh-108364:sqlite3.Connection.iterdump在存在外键违规时,导出 schema 前确保禁用外键支持;
  • gh-87264:tarfile.list()现在显示文件类型;
  • gh-113421(见上)、gh-66515:mailbox.MH支持不含.mh_sequences文件的文件夹(如 Claws Mail IMAP 缓存目录);bpo-21360:mailbox.Maildir忽略以点开头的文件;
  • gh-79325 / gh-91133 / bpo-43153:TemporaryDirectory在 Windows 的清理问题(无限递归、PermissionError被误遮、符号链接解引用)集中收尾;
  • gh-113149:JSON 数组/对象尾随逗号给出更明确的错误信息;
  • gh-91539:urllib.request.getproxies_environment获得 10%–20% 的小幅性能提升;
  • gh-112358:回退struct.Struct初始化改动,恢复部分子类化场景;
  • gh-110275:namedtuple 的_replace()/__replace__()对非法关键字参数改抛TypeError(原为ValueError);
  • gh-112328:EnumDictEnumDict.member_namesEnumType._add_alias_EnumType._add_value_alias_公开化;
  • gh-111615:修复 gh-93162 修复引入的“未指定 handlers 时无法配置 QueueHandler”的回归;
  • gh-111049:修复io.BytesIObuffer 对象在 GC 期间的崩溃;
  • gh-112640 / gh-103708:将硬编码的 python 名称改为可配置参数,便于其他实现覆盖 sysconfig;
  • 长期条目还包括:bpo-29779 的PYTHON_HISTORY环境变量、bpo-32731 的getpass.getuserOSError、gh-83162 将re.error别名发布为PatternError、bpo-35928 的TextIOWrapper解码缓冲修正等。

五、测试、构建与平台(Tests / Build / Windows / macOS)

5.1 测试基础设施(Tests)

  • gh-44626:修复os.path.isabs在 Windows 对恰好一个反斜杠前缀路径误返回True;同时修复PureWindowsPath.is_absolute对双反斜杠开头部分路径返回False
  • gh-113633:_testcapi扩展改用模块状态(module state),适配多解释器;
  • gh-112769:测试正确比较含非整数后缀的 zlib 运行时版本(如 zlib-ng 的1.3.0.zlib-ng);
  • gh-112334(Tests):为 subprocess 在启用 vfork 的 POSIX 系统(Linux)添加“按预期使用 vfork”的回归测试;
  • gh-108927:修复同进程内串行跑测试时“有子模块的测试跟随导入其子模块的测试、再被依赖方使用”的顺序依赖问题;
  • gh-109980:test_shutiltest_tarfile_vs_tar在 macOS 上与系统 tar 对齐;
  • bpo-40648:测试 Windows 上chmod()可产生的文件模式。

5.2 构建系统(Build)

  • gh-103065 / gh-114013:引入Tools/wasm/wasi.py简化 WASI 构建,并修正其把python.wasm路径混入HOSTRUNNER环境变量的缺陷(该变量只应描述如何运行 WASI host),修复make test
  • gh-113258:Windows 构建把生成的 frozen modules 写入构建树而非源码树;
  • gh-112305:check-clean-src步骤现在能侦测 out-of-tree 构建残留的$(srcdir)/Python/frozen_modules/*.h,并给出清理建议;
  • gh-112536:为构建系统加入ThreadSanitizer(TSAN)支持;
  • gh-112867:修复WITH_PYMALLOC_RADIX_TREE=0配置下的构建;
  • 历史条目:gh-11102 使os.major/os.makedev/os.minor在 HP-UX v3 可用;bpo-36351 交叉编译时不再设置ipv6type

5.3 Windows 专项

  • gh-114096:创建目录联接(junction)后恢复此前激活的进程特权,避免影响程序其它部分;
  • gh-111877:修复os.stat对无法直接访问的文件返回错误时间值;
  • gh-111973:Windows 安装器升级 SQLite 至 3.44.2;
  • gh-113009:multiprocessing.Process.terminate()竞态修复——不再无条件把returncode设为“需调用WaitForSingleObject()”的占位值,避免进程仍存活时被误判;
  • gh-86179:修复通过符号链接启动 Python 时的路径计算;
  • gh-71383:Windows 安装器 Tcl/Tk 升级至 8.6.13(含抑制错误 ThemeChanged 警告的补丁);
  • gh-111650:确保Py_GIL_DISABLED预处理变量定义进 PC/pyconfig.h,供 C 扩展模块引用;
  • gh-112278:当前用户无 WMI 权限时降低platform部分函数的耗时;
  • gh-73427:弃用sys._enablelegacywindowsfsencoding,改用PYTHONLEGACYWINDOWSFSENCODING环境变量;
  • gh-87868:_winapi.CreateProcess对环境变量正确排序并去重;
  • bpo-37308:修复mmap.mmap在 Windows 传入非 ASCIItagname时的乱码。

5.4 macOS 专项

  • gh-113666:stat模块新增 macOS 文件标志常量(UF_SETTABLEUF_TRACKEDUF_DATAVAULTSF_SUPPORTEDSF_SETTABLESF_SYNTHETICSF_RESTRICTEDSF_FIRMLINKSF_DATALESS,其中部分仅 macOS 提供);
  • gh-113536:os.waitid在 macOS 上可用;
  • gh-110459:修复 macOS 上configure --with-openssl-rpath=X/Y/Z无法检测 OpenSSL 的问题;
  • gh-74573:文档化dbm.ndbm在超出平台未文档化限制时可能静默损坏 DBM 文件、读取损坏文件可能崩溃的风险;
  • gh-65701:freeze工具不适用于 framework 构建,现在提前退出并说明;
  • gh-87277:webbrowser在 macOS 不再探测 X11 浏览器,避免无谓启动 XQuartz;
  • gh-108269:macOS framework/内嵌 Python.app/IDLE.app 的 Info.plist 设置CFBundleAllowMixedLocalizations=true,使应用拾取用户首选语言;
  • gh-102362:sysconfig.get_platform结果始终含主次版本号,即使构建时MACOSX_DEPLOYMENT_TARGET只给主版本(匹配 pip 期望格式);
  • gh-110820:修正 Universal 2 构建中ALIGNOF_MAX_ALIGN_TSIZEOF_LONG_DOUBLEHAVE_GCC_ASM_FOR_X64的预处理定义;
  • gh-109981:test.support.os_helper.fd_count/dev/fd统计打开文件数,避免“guarded”描述符探测崩溃。

六、IDLE 与 C API

6.1 IDLE 集成开发环境

  • gh-72284:改进 IDLE 文档中的特性列表、编辑器与 Shell 键绑定说明;
  • gh-113903:修复test_configdialog的偶发失败;
  • gh-113729:修复 3.11.7 / 3.12.1 中 “Help → IDLE Doc” 菜单无法打开文档的回归;
  • gh-113269:修复 macOS Catalina 上test_editor挂起;
  • gh-112898:修复 macOS 退出 IDLE 时未保存文件的处理;
  • bpo-13586:打开 “Replace” 对话框时自动带入当前选中的文本。

6.2 C API

  • gh-106560:清理公共 C API 中的冗余声明——PyBool_TypePyLong_TypePySys_Audit()仅声明一次;
  • gh-112438:修复PyArg_ParseTuple系列函数在嵌套元组中支持格式单元"es""et""es#""et#"(带编码的字符串转换)的问题;
  • gh-111545:新增 Include/pyhash.h 之外的指针哈希函数Py_HashPointer,用于按指针地址做一致性哈希;
  • gh-65210:将PyArg_ParseTupleAndKeywordsPyArg_VaParseTupleAndKeywordskeywords参数声明为char *const形式,提升与 C++ 的兼容性。

七、从 3.13.0a3 看解释器演进脉络

回看这份清单,3.13.0a3 所处的 2023 年末–2024 年初正是 CPython 历史上承前启后的节点:一方面,Tier 2 优化器相关条目(executor 契约、指令指针返回、trace 置信度、typed stack effects)表明下一代执行引擎正在被系统性收紧正确性约束;另一方面,Py_GIL_DISABLED进入 Windows 的 PC/pyconfig.h(gh-111650)预示了后续 3.13t 自由线程化构建;而_elementtree、pickle 的 C 实现、_testcapi全面转向模块状态/强引用持有,则在为多解释器与模块隔离铺路。对于希望深入某个具体修复的读者,最好的做法是从本文件条目出发,沿gh-issue编号反查当时的讨论,再对照当前分支源码(例如追踪 Lib/site.py 中.pth处理逻辑的持续演化)理解设计取舍。

八、小结

Misc/NEWS.d/3.13.0a3.rst 是一份极具研读价值的“解释器手术记录”。它告诉我们:一个 alpha 版本并不只是新功能堆叠,还包括对 eval breaker 布局的数学式微调、对vfork/closefrom/posix_spawn等 POSIX 快速路径的逐一校正、对字节码特化前tp_version_tag合法性的防守,以及对 traceback、错误信息、repr输出等“可观测表面”的精细打磨。对于解释器开发者,它提供了性能与安全权衡的一手案例;对于库使用者,则能借此预判行为变化(如.pth隐式执行面收窄、zipfile 对 zipbomb 的拒绝策略、dis/traceback输出格式调整),从而在升级到 3.13 及后续版本时有的放矢。

【免费下载链接】cpythonThe Python programming language项目地址: https://gitcode.com/GitHub_Trending/cp/cpython

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:54:02

AI行业非技术岗完全指南:从产品运营到售前,零代码也能入局

1. 先说清楚:AI圈子的非技术岗,到底解决什么问题过去两年,我见过太多人对着AI行业的招聘JD犯迷糊——技术岗写着Transformer、PyTorch、RAG、微调,非技术岗好像门槛不高,但点进去一看,岗位描述里也全是“了…

作者头像 李华
网站建设 2026/9/9 13:53:49

国产TTS芯片实测:离线语音合成选型避坑指南

国产TTS芯片这几年的热度一直不低,尤其是智能家居、陪护机器人、车载语音交互这些产品扎堆出现之后,大家发现:与其在MCU上死磕算法资源,不如直接塞一颗带语音合成能力的芯片进去,省事、稳定、离线可用。我这两年因为做…

作者头像 李华
网站建设 2026/9/9 13:52:37

Jsoncpp动态库与静态库:编译、链接与部署全攻略

简介:面向Windows平台C开发者的Jsoncpp预编译库资源,专为Visual Studio使用者设计,开发者下载后可直接将库文件链接进项目,无需从源码编译,开箱即可用于JSON解析。压缩包共6个文件,涵盖2个头文件、2个静态库…

作者头像 李华
网站建设 2026/9/9 13:50:05

Swiper loop模式克隆slide导致Vue动态类名失效的根因与破解方案

前段时间在做一个多指标数据大屏,左侧要放一组横向滚动的任务卡片轮播,卡片根据优先级分三种状态:高优先级红色描边、中优先级黄色描边、低优先级绿色描边。技术栈是 Vue 3 Swiper,很自然地用了swiper-slide组件和:class"pr…

作者头像 李华
网站建设 2026/9/9 13:48:49

Claude Code 从入门到进阶:配置、Plan 模式与 MCP 实战指南

看到 Boris Cherny 聊 Claude Code 的那段访谈时,我其实挺有感触的。作为 Claude Code 的创作者,Boris 经常被问到同一个问题:“怎么才能最快学会用好 Claude Code?”他的回答听起来有点像绕圈子:不存在唯一诀窍。但作…

作者头像 李华
网站建设 2026/9/9 13:48:43

指标异动分析:3步校验+4步归因,锁定业务根因

凌晨两点,手机震动,业务群里的告警机器人和连环同时炸开:今天GMV环比下降15%。接下来的十分钟里,你大概率会收到来自运营、商品、投放几个部门的“猜测”——是大盘跌了?是竞品搞活动?是投放预算被砍&#…

作者头像 李华