io
packages
IO/ZSTD IO/XSUBSEQ IO/CHUNKY IO/TESTS IO/SOCKET IO-USER IO/PROTO IO/FAST IO/STATIC IO/STREAM IO/DISK/BTRFS IO/SMART-BUFFER IO/DISK IO IO/URING IO/FLATE IO/DEFLATE IO/KBD dependencies
cl-ppcre std ironclad uring xkb evdev btrfs sb-bsd-sockets zstd dependents
gui homer packy pod vc/tests blas/tests dsp net dat io/tests log/tests log core files
pkg.lisp socket.lisp stream.lisp static.lisp fast.lisp xsubseq.lisp smart-buffer.lisp uring.lisp proto.lisp chunky.lisp flate.lisp zstd.lisp deflate.lisp disk/pkg.lisp disk/util.lisp disk/proto.lisp disk/btrfs.lisp kbd.lisp io.lisp tests
DISK-BTRFS DISK-GENERIC XSUBSEQ SMART-BUFFER STATIC-VECTOR ZLIB BZIP2 GZIP-STREAM-CLOSED-ERROR GZIP-STREAM ZSTD-STREAM ZSTD-SIMPLE CHUNKY STREAMS SANITY symbols
NULL-CONCATENATED-XSUBSEQS WITH-CHARACTER-STREAM-SEMANTICS MAKE-COMPRESSING-STREAM DECOMPRESSOR BUFFER-ON-MEMORY-P BLOCKED-OUTPUT-STREAM INPUT-CHUNKING-P CHUNKED-INPUT-STREAM-TRAILERS ENSURE-FILE-POSITION OUTPUT-BUFFER COERCE-TO-SEQUENCE SIMPLE-CHUNKED-INPUT-STREAM OUTPUT-AVAILABLE-P STRING-XSUBSEQ WITH-SMART-BUFFER IO-SOCKET-ERROR STATIC-VECTOR DECOMPRESSING-STREAM FREE-STATIC-VECTOR ZSTD-DECOMPRESSOR DECOMPRESS-OBJECT PEEKING-INPUT-STREAM FINISH-DECOMPRESSION FINALIZE-BUFFER DECODING-STREAM STRING-CONCATENATED-XSUBSEQS INPUT-SIZE CHUNKED-OUTPUT-STREAM IO-SOCKET XNCONCF COMPRESSION-BUFFER-SIZE SOCKOPT-SEND-TIMEOUT MAKE-BOUND-STREAM COMPRESSING-STREAM ZSTD-ERROR BLOCKED-IO-STREAM SOCKOPT-REUSE-PORT NEEDS-TO-FILL-BUFFER-P DECOMPRESSION-ERROR UNREAD-CHAR* MAKE-DECODING-STREAM BLOCKED-STREAM ZSTD-COMPRESSOR DECOMPRESSOR BLOCKED-INPUT-STREAM EXPECTING-CRLF-P COMPRESS DEFAULT-CHUNKED-OUTPUT-SIZECOMPRESS-OCTET-VECTOR OCTET-XSUBSEQ RESET-DECOMPRESSOR SOCKOPT-LINGER PEEKED-COUNT INPUT-BUFFER RESET-COMPRESSOR BUFFER-LIMIT-EXCEEDED HEADER-LENGTH PEEKED WITH-COMPRESSOR CHUNKED-INPUT-STREAM-EXTENSIONS COMPRESS-OCTET FINISH-COMPRESSION OUTPUT FLATE-ERROR DELETE-STREAM-FILE DEFAULT-STATIC-STREAM-SIZE OUTPUT-SIZE DECOMPRESS-WITH FILL-FOREIGN-MEMORY DECOMPRESSION-BUFFER-SIZE* HEADER-TYPE BUFFER-SIZESNAPSHOT MAKE-DECOMPRESSING-STREAM COMPRESS-WITH XNCONC WITH-ZSTD-BUFFER COMPRESSION-ERROR FILL-BUFFER MAKE-SMART-BUFFER SMART-BUFFER WITH-STATIC-STREAMS BOUND-INPUT-STREAM OFFSET DEFAULT-DISK-LIMIT XSUBSEQ CHUNKED-IO-STREAM WITH-STATIC-VECTORS WRITE-TO-BUFFER INPUT-POSITION OCTET-CONCATENATED-XSUBSEQS REPLACE-FOREIGN-MEMORY WITH-ZSTD-OUTPUT WITH-XSUBSEQS PREFERRED-COMPRESSION-TYPE IO-STREAM-ERROR WITH-ZSTD-INPUT SYNC COMPRESSOR OUTPUT-POSITION SOCKOPT-RECEIVE-TIMEOUT COERCE-TO-STRING ASSERT-CRLF WITH-STATIC-VECTOR SOCKOPT-PEERCRED PEEK-CHAR* WITH-STATIC-STREAM DECOMPRESSION-BUFFER-SIZE DECOMPRESS READ-CHAR* COMPRESSION-TYPES HEADER MAKE-CONCATENATED-XSUBSEQS STATIC-STREAM DELETE-TEMPORARY-FILES CHUNKED-STREAM STATIC-VECTOR-POINTER WITH-ZSTD-STREAM COMPRESSION-LEVEL CHUNKED-INPUT-STREAM CONCATENATED-XSUBSEQS ASSERT-CHAR MAKE-STATIC-VECTOR IO-ERROR DEFAULT-MEMORY-LIMIT INPUT PEEKED-SIZE COMPRESSOR DEC-FILL-BUFFER MAKE-CHUNKED-STREAM OUTPUT-CHUNKING-P IO-STREAM COMPRESSION-LEVEL SIGNAL-EOF SOCKOPT-PEER-CRED XLENGTH COMPRESS-OBJECT INPUT-AVAILABLE-P
1. Notes
first-class backend is IO_URING. everything else defers to whatever is most portable (on Windows and Mac). The URING system provides low level bindings to IO_URING.
We implement a high-level API for IO. The API is meant to be as simple as possible, while still providing a great deal of control over the primitive IO queues.
Speed is the priority.
- We will probably need a specialized vector class mapping/displaced directly to URING::IOVECs
- io-stream doesn't share or inherit structure from sb-sys:fd-stream
- io-socket doesn't share or inherit structure from sb-bsd-sockets:socket
- prioritizing UDP/datagram/framed sockets over TCP/streamed
- testing:
- use NET/CODEC/TLV:TLV for passing simple messages from SQ->CQ
- use IO-OP-NOP for estimating throughput and comparing implementations (rust/tokio)