> On 8 Aug 2021, at 18:53, Serhiy Storchaka <storch...@gmail.com> wrote: > > 08.08.21 07:08, Stephen J. Turnbull пише: >> Serhiy Storchaka writes: >> >>> Python integers have arbitrary precision. For serialization and >>> interpolation with other programs and libraries we need to >>> represent them [...]. [In the case of non-standard precisions,] >>> [t]here are private C API functions _PyLong_AsByteArray and >>> _PyLong_FromByteArray, but they are for internal use only. >>> >>> I am planning to add public analogs of these private functions, but more >>> powerful and convenient. >>> >>> PyObject *PyLong_FromBytes(const void *buf, Py_ssize_t size, >>> int byteorder, int signed) >>> >>> Py_ssize_t PyLong_AsBytes(PyObject *o, void *buf, Py_ssize_t n, >>> int byteorder, int signed, int *overflow) >> >> I don't understand why such a complex API is useful as a public facility. > > There are several goals: > > 1. Support conversion to/from all C integer types (char, short, int, > long, long long, intN_t, intptr_t, intmax_t, wchar_t, wint_t and > corresponding unsigned types), POSIX integer types (pid_t, uid_t, off_t, > etc) and other platfrom or library specific integer types (like > Tcl_WideInt in libtcl). Currently only supported types are long, > unsigned long, long long, unsigned long, ssize_t and size_t. For other > types you should choose the most appropriate supertype (long or long > long, sometimes providing several varians) and manually handle overflow. > > There are requests for PyLong_AsShort(), PyLong_AsInt32(), > PyLong_AsMaxInt(), etc. It is better to provide a single universal > function than extend API by several dozens functions.
But how would you convert from the buffer to the actual type you want? IMHO “pid_t a_pid; Py_LongAsBytes(val, &a_pid, sizeof(pid_t), …)” would be worse than having a number of aliases. The API is more cumbersome to use, and you loose type checking from the C compiler. Other than that, the variants you mention could in general just by aliases for conversion functions to/from the basic C types. Ronald — Twitter / micro.blog: @ronaldoussoren Blog: https://blog.ronaldoussoren.net/
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/5QME5PGFUAXNDIVAD2PFC25WXV4MNERZ/ Code of Conduct: http://python.org/psf/codeofconduct/