PEP 757: edit rejected ideas (mpz_import/export-like API) (#4126)

This commit is contained in:
Sergey B Kirpichev 2024-11-19 11:00:45 +03:00 committed by GitHub
parent a1591857f6
commit 5c58fe2f4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 9 additions and 3 deletions

View File

@ -452,11 +452,17 @@ API example::
int PyLong_Export(PyLongObject *obj, PyLongLayout layout, void *buffer);
PyLongObject *PyLong_Import(PyLongLayout layout, void *buffer);
This might work for the GMP, as this it has :c:func:`!mpz_limbs_read()` and
:c:func:`!mpz_limbs_write()` functions, that can provide required "buffers".
This might work for the GMP, as it has :c:func:`!mpz_limbs_read()` and
:c:func:`!mpz_limbs_write()` functions, that can provide required access to
internals of :c:struct:`!mpz_t`. Other libraries may require using temporary
bufferes and then mpz_import/export-like functions on their side.
The major drawback of this approach is that it's much more complex on the
CPython side (i.e. actual conversion between different layouts).
CPython side (i.e. actual conversion between different layouts). For example,
implementation of the :c:func:`PyLong_FromNativeBytes()` and the
:c:func:`PyLong_AsNativeBytes()` (together provided restricted version of the
required API) in the CPython took ~500 LOC (c.f. ~100 LOC in the current
implementation).
Discussions