Update doc/note/coroutines.md for args changing

This commit is contained in:
Nigel Tao
2019-12-11 11:15:14 +11:00
parent ad787cba11
commit 7b5e614618

View File

@@ -8,14 +8,24 @@ function on the same receiver, whilst it is suspended, will result in an error.
Unlike coroutines in other programming languages, Wuffs coroutines cannot
return other values in addition to that status, and statuses don't carry
additional fields. Wuffs coroutines cannot be used as generators. The built-in
I/O types (`base.io_reader` and `base.io_writer`) are exceptions to this rule.
additional fields. Wuffs coroutines cannot be used as generators directly,
although they can produce to and consume from buffers as side effects. The
built-in I/O types (`base.io_reader` and `base.io_writer`) have coroutine
methods that are exceptions to this "no additional return value" rule, and are
special-cased by the Wuffs compiler.
As of Wuffs version 0.2 (December 2019), the language and standard library uses
Another difference with other programming languages is that Wuffs coroutines'
arguments can change across a suspension and resumption. The mechanism for
resuming a coroutine, for C code that calls into Wuffs-transpiled-to-C, is to
simply call the C function again, with the same `self` receiver (the first
argument), but with potentially different other arguments.
As of Wuffs version 0.2 (December 2019), the language and standard library use
only two suspension status values, both [I/O](/doc/note/io-input-output.md)
related: `"$short read"` and `"$short write"` are used when a source buffer is
full (and needs re-filling) or a destination buffer is full (and needs
flushing). These I/O related suspensions are how [compression
empty (and needs re-filling) or a destination buffer is full (and needs
flushing). These I/O related suspensions, together with the I/O buffer
arguments' contents and read/write indexes changing, are how [compression
decoders](/doc/std/compression-decoders.md) are able to decompress from
arbitrarily long inputs to arbitrarily long outputs with fixed sized buffers.