Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 699 – 移除在 PEP 509 中添加的私有字典版本字段

作者:
Ken Jin <kenjin at python.org>
讨论至:
Discourse 帖子
状态:
已接受
类型:
标准跟踪
创建日期:
2022年10月3日
Python 版本:
3.12
发布历史:
2022年10月5日
取代:
509
决议:
Discourse 消息

目录

摘要

PEP 509 引入了一个名为 ma_version_tag 的字典私有字段,以允许 CPython 和扩展库进行优化。本 PEP 提议废除 PEP 509 并声明该字段为实现细节,因为它已被其他替代方案取代。这将进一步允许该字段在未来的优化中被重用。

动机

PEP 509 引入了 ma_version_tag 字段到字典中。这个 64 位字段存储一个版本计数器,每当字典被修改时就会更新。最初的提议是使用这个版本计数器作为优化的保护机制。

自 CPython 3.11 以来,该字段已不再被内部优化工作使用。PEP 659 专门化指令使用其他方法来验证某些优化是安全的。

为了在 CPython 中实现进一步的优化,本 PEP 提议 ma_version_tag 字段不再符合 PEP 509 规范。这将允许 CPython 开发者存储其他优化信息,例如字典写入监视器。

基本原理

本 PEP 没有指定该字段将来可能用于什么。这是故意的,因为实现细节可能会改变,并且该字段应仅供 CPython 内部使用。

规范

本规范废除了 PEP 509 中的规定。Python dict 类的 ma_version_tag 字段被声明为内部实现细节,可能会被完全移除,或者可能具有不同的表示形式。C 扩展不应依赖此字段。

向后兼容性

某些扩展使用 ma_version_tag 进行快速字典或全局变量查找。例如,Cython 使用该字段进行快速动态模块变量查找

本 PEP 提议在访问 ma_version_tag 时发出编译器警告。在连续两个版本发布警告后,ma_version_tag 将被移除,这与 PEP 387 的规定一致。

作者能找到的该字段的最大用户是 Cython。与 Cython 维护者的讨论表明,从 Cython 中移除对它的支持是微不足道的

安全隐患

PEP 509 关注整数溢出。然而,本 PEP 不会引入任何额外的安全问题。

被拒绝的想法

一个可能的替代方案是保留该字段以实现向后兼容性。本 PEP 拒绝该替代方案,因为未来的优化将消耗更多内存,并且该字段除 PEP 外一直被认为是私有和未文档化的,没有向后兼容性保证。Python 中的字典被普遍使用,其内存消耗的任何增加都将对 Python 的性能产生不利影响。

参考实现

参考实现可以在 python/cpython#101193 中找到。

特别鸣谢

感谢 C.A.M. Gerlach 对本文档的编辑和措辞修改。同时感谢 Mark Shannon 和 Kumar Aditya 提供了可能的实现方案。


来源: https://github.com/python/peps/blob/main/peps/pep-0699.rst

最后修改: 2025-02-01 08:55:40 GMT