tvl-depot/users
sterni 3d2e55ad53 refactor(mime4cl): replace *-input-adapter-stream with flexi-streams
The input adapter streams were input streams yielding either binary or
character data that could be constructed from a variable data source.
The stream would take care not to destroy the underlying data
source (i.e. not close it if it was a stream), so similar to with
FILE-PORTIONs, but simpler.

Unfortunately, the implementation was quite inefficient: They are
ultimately defined in terms of a function that retrieves the next
character in the source. This only allows for an implementation of
READ-CHAR (and READ-BYTE). Thanks to cl/8559, READ-SEQUENCE can be used
on e.g. FILE-PORTION, but this was still negated by a input adapter
based on one—then, READ-SEQUENCE would need to fall back on READ-CHAR or
READ-BYTE again.

Luckily, we can replace BINARY-INPUT-ADAPTER-STREAM and
CHARACTER-INPUT-ADAPTER-STREAM with a much simpler abstraction: Instead
of extra stream classes, we have a function, MAKE-INPUT-ADAPTER, which
returns an appropriate instance of FLEXI-STREAM based on a given source.
This way, the need for a distinction between binary and character input
adapter is eliminated, since FLEXI-STREAMS supports both binary and
character reads (external format is not yet handled, though).
Consequently, the :binary keyword argument to MIME-BODY-STREAM can be
dropped.

flexi-streams provides stream classes for everything except a stream
that doesn't close the underlying one. Since we have already implemented
this in POSITIONED-FLEXI-INPUT-STREAM, we can split this functionality
into a new superclass ADAPTER-FLEXI-INPUT-STREAM.

This change also allows addressing the performance regression
encountered in cl/8559: It seems that flexi-streams performs worse when
we are reading byte by byte or char by char. (After this change mblog is
still two times slower than on r/6150.) By eliminating the adapter
streams, we can start utilizing READ-SEQUENCE via decoding code that
supports it (i.e. qbase64) and bring performance on par with r/6150
again. Surely there are also ways to gain back even more performance
which has to be determined using profiling. Buffering more aggressively
seems like a sure bet, though.

Switching to flexi-streams still seems like a no-brainer, as it allows
us to drop a lot of code that was quite hacky (e.g. DELIMITED-INPUT-
STREAM) and implements en/decoding handling we did not support before,
but would need for improved correctness.

Change-Id: Ie2d1f4e42b47512a5660a1ccc0deeec2bff9788d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8581
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
2023-05-18 16:14:38 +00:00
..
aaqaishtyaq chore(users/aaqaishtyaq): add OWNERS file 2022-12-10 17:28:57 +00:00
cynthia chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
edef feat(users/edef/refscan): AArch64 support 2023-01-11 20:10:38 +00:00
ericvolp12 chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
eta chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
firefly chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
flokli chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
grfn feat(grfn/system): Install dropbox on all systems 2023-05-15 14:12:23 +00:00
isomer chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
j4m3s chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
lukegb chore(users/lukegb/keys): -porcorosso-wsl +lukegb-build +lukegb-ca 2023-03-12 03:35:24 +00:00
Profpatsch feat(users/Profpatsch/my-prelude): add RunCommand.hs 2023-04-22 17:17:03 +00:00
qyliss chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
riking chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
sterni refactor(mime4cl): replace *-input-adapter-stream with flexi-streams 2023-05-18 16:14:38 +00:00
tazjin chore: address renames of boot & tmp related options 2023-05-11 10:10:58 +00:00
wpcarro chore(3p/sources): Bump channels & overlays 2023-03-27 14:32:31 +00:00
zseri chore(gerrit): migrate OWNERS files to code-owners style 2022-09-19 11:13:28 +00:00
tvlbot.jpg chore(users/tazjin): Add avatar for tvlbot 2020-06-14 22:23:04 +00:00