Skip to content

Commit

Permalink
PEP 757: edit rejected ideas (mpz_import/export-like API) (python#4126)
Browse files Browse the repository at this point in the history
  • Loading branch information
skirpichev authored Nov 19, 2024
1 parent a159185 commit 5c58fe2
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions peps/pep-0757.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 5c58fe2

Please sign in to comment.