| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
Deprecate the old Py_UNICODE and PY_UNICODE_TYPE types in the C API: use wchar_t instead. Replace Py_UNICODE with wchar_t in multiple C files.
|
Sourcegraph results: It seems two releases is not enough for removing Py_UNICODE. But let's see it two years later. |
Sorry, something went wrong.
This PR is mostly about deprecation. I prefer to announce a Python release when these types will be removed, Python 3.15. But we will have to do this usage study again when these types will be removed for real. The warning should help users to find old code still using Py_UNICODE by mistake or not. |
Sorry, something went wrong.
Sorry, something went wrong.
The first result is Py_UNICODE *inp = PyUnicode_AS_UNICODE(in);. This code is already broken by Python 3.12: the function got removed. |
Sorry, something went wrong.
Co-authored-by: Inada Naoki <songofacandy@gmail.com>
I planned to write a separated PR for code generated by Argument Clinic. It's now done with: PR #105161. |
Sorry, something went wrong.
|
I will wait until they 2 other PRs of this issue will be merged, to avoid emitting new compiler warnings. |
Sorry, something went wrong.
Can we use char16_t from С11? Docs: https://en.cppreference.com/w/c/string/multibyte/char16_t. It would avoid 2-vs-4-byte size discrepancy. |
Sorry, something went wrong.
At where? Py_UNICODE has been wchar_t since Python 3.3. Where Py_UNICODE was not required, my recommendation is "use UTF-8 always". |
Sorry, something went wrong.
|
Ah, I got it that the parent issue is about removal of a thin thus unnecessary typedef, not about changing the multybyte machinery for the next major version of CPython. |
Sorry, something went wrong.
|
Initially I've got an impression that the PEP-393 removal of Py_UNICODE leaves the C API without a wide character type at all (so we need to fill the gap with any other wide char type). Now I see that this would require a PEP before the removal. |
Sorry, something went wrong.
That would be wrong. Python has many C functions which really expect 16-bit or 32-bit wchar_t like PyUnicode_FromWideChar().
There is Py_UCS4 which should be 32-bit and is able to store all Unicode characters.
Right. PEP 393 implementation first added many functions using Py_UCS4 arrays. It was inefficient since most of the time, all code points could be stored in Py_UCS1 arrays (4x smaller). Many strings are just ASCII. There are now more memory efficient structures. I also wrote _PyUnicodeWriter private API to change the internal storage depending on the maximum code point. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Deprecate the old Py_UNICODE and PY_UNICODE_TYPE types in the C API: use wchar_t instead.
Replace Py_UNICODE with wchar_t in multiple C files.
📚 Documentation preview 📚: https://cpython-previews--105157.org.readthedocs.build/