Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading