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

Python 增强提案

PEP 623 – 从 Unicode 中移除 wstr

作者:
Inada Naoki <songofacandy at gmail.com>
BDFL 代理:
Victor Stinner <vstinner at python.org>
讨论地址:
Python-Dev 邮件列表
状态:
最终版
类型:
标准跟踪
创建日期:
2020-06-25
Python 版本:
3.10
决议:
Python-Dev 邮件列表

目录

摘要

PEP 393弃用了一些 Unicode API,并在 Unicode 结构中引入了wchar_t *wstrPy_ssize_t wstr_length来支持这些被弃用的 API。

此 PEP 计划在 Python 3.12 中移除wstrwstr_length,以及使用这些成员的被弃用 API。

不使用这些成员的被弃用 API 不在本文档范围内,因为它们可以独立移除。

动机

内存使用

str是 Python 中使用最广泛的类型之一。即使是最简单的 ASCII 字符串也具有wstr成员。在 64 位系统上,它每个字符串消耗 8 字节。

运行时开销

为了支持旧的 Unicode 对象,许多 Unicode API 必须调用PyUnicode_READY()

通过放弃对旧 Unicode 对象的支持,我们也可以消除这种开销。

简洁性

支持旧 Unicode 对象使 Unicode 实现更加复杂。在放弃对旧 Unicode 对象的支持之前,很难尝试其他 Unicode 实现,例如 PyPy 中基于 UTF-8 的实现。

理由

Python 4.0 尚未计划

PEP 393引入了高效的 Unicode 内部表示,消除了 Python “窄”构建和“宽”构建之间的界限。

PEP 393在 2012 年发布的 Python 3.3 中实现。自那时起,旧 API 就被弃用,并计划在 Python 4.0 中移除。

PEP 393被接受时,Python 4.0 被认为是 Python 3.9 的下一个版本。但 Python 3.9 的下一个版本是 Python 3.10,而不是 4.0。这就是为什么此 PEP 再次安排移除计划的原因。

Python 2 已到达生命周期终点

由于 Python 2 没有PEP 393 Unicode 实现,旧 API 可能有助于支持 Python 2 和 3 的 C 扩展模块。

但 Python 2 已于 2020 年到达生命周期终点。我们可以移除为了与 Python 2 保持兼容而保留的旧 API。

计划

Python 3.9

这些宏和函数被标记为弃用,使用Py_DEPRECATED宏。

  • Py_UNICODE_WSTR_LENGTH()
  • PyUnicode_GET_SIZE()
  • PyUnicode_GetSize()
  • PyUnicode_GET_DATA_SIZE()
  • PyUnicode_AS_UNICODE()
  • PyUnicode_AS_DATA()
  • PyUnicode_AsUnicode()
  • _PyUnicode_AsUnicode()
  • PyUnicode_AsUnicodeAndSize()
  • PyUnicode_FromUnicode()

Python 3.10

  • 以下宏、枚举成员被标记为弃用。尽可能使用了Py_DEPRECATED(3.10)宏。但如果宏无法轻松使用,它们仅在注释和文档中被弃用。
    • PyUnicode_WCHAR_KIND
    • PyUnicode_READY()
    • PyUnicode_IS_READY()
    • PyUnicode_IS_COMPACT()
  • size > 0时,PyUnicode_FromUnicode(NULL, size)PyUnicode_FromStringAndSize(NULL, size)会发出DeprecationWarning
  • 当使用uu#ZZ#格式时,PyArg_ParseTuple()PyArg_ParseTupleAndKeywords()会发出DeprecationWarning

Python 3.12

  • 以下成员将从 Unicode 结构中移除
    • wstr
    • wstr_length
    • state.compact
    • state.ready
  • The PyUnicodeObject结构被移除。
  • 以下宏和函数、枚举成员被移除
    • Py_UNICODE_WSTR_LENGTH()
    • PyUnicode_GET_SIZE()
    • PyUnicode_GetSize()
    • PyUnicode_GET_DATA_SIZE()
    • PyUnicode_AS_UNICODE()
    • PyUnicode_AS_DATA()
    • PyUnicode_AsUnicode()
    • _PyUnicode_AsUnicode()
    • PyUnicode_AsUnicodeAndSize()
    • PyUnicode_FromUnicode()
    • PyUnicode_WCHAR_KIND
    • PyUnicode_READY()
    • PyUnicode_IS_READY()
    • PyUnicode_IS_COMPACT()
  • size > 0时,PyUnicode_FromStringAndSize(NULL, size))会抛出RuntimeError
  • 当使用uu#ZZ#格式时,PyArg_ParseTuple()PyArg_ParseTupleAndKeywords()会抛出SystemError,就像其他不支持的格式字符一样。

讨论

参考


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

最后修改时间:2023-09-09 17:39:29 GMT