,Hi Carl,

Le ven. 26 juin 2020 à 07:36, Carl Shapiro <carl.shap...@gmail.com> a écrit :
> It would be very helpful to broaden the objective of avoiding functions 
> returning PyObject** to other types of pointers.  I have in mind several 
> functions in the C-API that return a char* pointer to the contents of an 
> object.  While these functions are easy to implement on top of the CPython 
> object model they are challenging for alternative Python implementations.
>
> Consider PyBytes_AsString: it returns a mutable char* pointing to the 
> contents of a byte instance.  This presents several obvious problems.  For 
> starters, it burdens a relocating garbage collector to pin objects or create 
> a temporary copy of an object's contents in non-moving memory.  It also has 
> implications for treating PyObejct* as a handle, using tagged pointers (and 
> tagged immediates), and multi-threading.
>
> To eliminate C-API functions such as PyBytes_AsString, PyUnicode_AsUTF8, 
> etc., new functions should be added to the C-API that copy the contents of 
> objects out into a buffer, similar to PyUnicode_AsUCS4 or to return the 
> contents in an dynamically allocated buffer like PyUnicode_AsUCS4Copy.

Well, the general problem is to track when the caller ends using a
resource. Borrowed references are a variant of this problem,
PySequence_Fast_ITEMS() is another variant.

For PyUnicode_AsUTF8, INADA-san added PyUnicode_GetUTF8Buffer() which
should be used wit PyBuffer_Release():

* 
https://github.com/python/cpython/commit/c7ad974d341d3edb6b9d2a2dcae4d3d4794ada6b
* https://github.com/python/cpython/pull/17659
* 
https://discuss.python.org/t/better-api-for-encoding-unicode-objects-with-utf-8/2909

... but it was reverted soon after its addition:

* 
https://github.com/python/cpython/commit/3a8c56295d6272ad2177d2de8af4c3f824f3ef92
* https://github.com/python/cpython/pull/18985
* https://bugs.python.org/issue39087

See also the "(PEP 620) C API for efficient loop iterating on a
sequence of PyObject** or other C types" thread.

Victor
--
Night gathers, and now my watch begins. It shall not end until my death.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/PGXUHWZDDP3M27SAP4XR6YSI3D2Q6TWS/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to