docs/glossary: Describe the callee-owned tuple concept.
This commit is contained in:
parent
bb047558da
commit
4fee35a32c
|
@ -78,8 +78,8 @@ Methods
|
||||||
|
|
||||||
.. method:: poll.ipoll(timeout=-1, flags=0)
|
.. method:: poll.ipoll(timeout=-1, flags=0)
|
||||||
|
|
||||||
Like :meth:`poll.poll`, but instead returns an iterator which yields
|
Like :meth:`poll.poll`, but instead returns an iterator which yields a
|
||||||
`callee-owned tuples`. This function provides efficient, allocation-free
|
`callee-owned tuple`. This function provides an efficient, allocation-free
|
||||||
way to poll on streams.
|
way to poll on streams.
|
||||||
|
|
||||||
If *flags* is 1, one-shot behavior for events is employed: streams for
|
If *flags* is 1, one-shot behavior for events is employed: streams for
|
||||||
|
|
|
@ -15,6 +15,29 @@ Glossary
|
||||||
may also refer to "boardless" ports like
|
may also refer to "boardless" ports like
|
||||||
:term:`Unix port <MicroPython Unix port>`).
|
:term:`Unix port <MicroPython Unix port>`).
|
||||||
|
|
||||||
|
callee-owned tuple
|
||||||
|
A tuple returned by some builtin function/method, containing data
|
||||||
|
which is valid for a limited time, usually until next call to the
|
||||||
|
same function (or a group of related functions). After next call,
|
||||||
|
data in the tuple may be changed. This leads to the following
|
||||||
|
restriction on the usage of callee-owned tuples - references to
|
||||||
|
them cannot be stored. The only valid operation is extracting
|
||||||
|
values from them (including making a copy). Callee-owned tuples
|
||||||
|
is a MicroPython-specific construct (not available in the general
|
||||||
|
Python language), introduced for memory allocation optimization.
|
||||||
|
The idea is that callee-owned tuple is allocated once and stored
|
||||||
|
on the callee side. Subsequent calls don't require allocation,
|
||||||
|
allowing to return multiple values when allocation is not possible
|
||||||
|
(e.g. in interrupt context) or not desirable (because allocation
|
||||||
|
inherently leads to memory fragmentation). Note that callee-owned
|
||||||
|
tuples are effectively mutable tuples, making an exception to
|
||||||
|
Python's rule that tuples are immutable. (It may be interesting
|
||||||
|
why tuples were used for such a purpose then, instead of mutable
|
||||||
|
lists - the reason for that is that lists are mutable from user
|
||||||
|
application side too, so a user could do things to a callee-owned
|
||||||
|
list which the callee doesn't expect and could lead to problems;
|
||||||
|
a tuple is protected from this.)
|
||||||
|
|
||||||
CPython
|
CPython
|
||||||
CPython is the reference implementation of Python programming
|
CPython is the reference implementation of Python programming
|
||||||
language, and the most well-known one, which most of the people
|
language, and the most well-known one, which most of the people
|
||||||
|
|
Loading…
Reference in New Issue