|Title:||Remove wstr from Unicode|
|Author:||Inada Naoki <songofacandy at gmail.com>|
|BDFL-Delegate:||Victor Stinner <vstinner at python.org>|
This PEP is planning removal of wstr, and wstr_length with deprecated APIs using these members by Python 3.12.
Deprecated APIs which doesn't use the members are out of scope because they can be removed independently.
str is one of the most used types in Python. Even most simple ASCII strings have a wstr member. It consumes 8 bytes per string on 64-bit systems.
To support legacy Unicode object, many Unicode APIs must call PyUnicode_READY().
We can remove this overhead too by dropping support of legacy Unicode object.
Supporting legacy Unicode object makes the Unicode implementation more complex. Until we drop legacy Unicode object, it is very hard to try other Unicode implementation like UTF-8 based implementation in PyPy.
PEP 393 introduced efficient internal representation of Unicode and removed border between "narrow" and "wide" build of Python.
PEP 393 was implemented in Python 3.3 which is released in 2012. Old APIs were deprecated since then, and the removal was scheduled in Python 4.0.
Python 4.0 was expected as next version of Python 3.9 when PEP 393 was accepted. But the next version of Python 3.9 is Python 3.10, not 4.0. This is why this PEP schedule the removal plan again.
These macros and functions are marked as deprecated, using Py_DEPRECATED macro.
- Following macros, enum members are marked as deprecated.
Py_DEPRECATED(3.10) macro are used as possible. But they
are deprecated only in comment and document if the macro can
not be used easily.
- PyUnicode_FromUnicode(NULL, size) and PyUnicode_FromStringAndSize(NULL, size) emit DeprecationWarning when size > 0.
- PyArg_ParseTuple() and PyArg_ParseTupleAndKeywords() emit DeprecationWarning when u, u#, Z, and Z# formats are used.
- Following members are removed from the Unicode structures:
- The PyUnicodeObject structure is removed.
- Following macros and functions, and enum members are removed:
- PyUnicode_FromStringAndSize(NULL, size)) raises RuntimeError when size > 0.
- PyArg_ParseTuple() and PyArg_ParseTupleAndKeywords() raise SystemError when u, u#, Z, and Z# formats are used, as other unsupported format character.
- bpo-38604: Schedule Py_UNICODE API removal
- bpo-36346: Prepare for removing the legacy Unicode C API
- bpo-30863: Rewrite PyUnicode_AsWideChar() and PyUnicode_AsWideCharString(): They no longer cache the wchar_t* representation of string objects.
|||PEP 393 -- Flexible String Representation (https://www.python.org/dev/peps/pep-0393/)|
This document has been placed in the public domain.