Changes for version 0.105 - 2026-08-29
- Add query-driven Loop introspection through running, count, has, objects, inspect, census, resources, why_alive, and pressure. Optional profile, stats, and reset_stats expose native timing and counters without adding permanent managed-object bookkeeping to the dispatch hot path.
- Add explicit Stream callback batching. Raw subclasses may coalesce reads with read_batch_bytes, while framed subclasses may select bounded on_messages arrays with message_batch_size. Partial batches flush at the current read-drain boundary and never wait for future input.
- Avoid inactive Stream deadline bookkeeping during read-interest and write-queue transitions. Focused watcher-state benchmarks retain Loop as the sole epoll owner and document why no cross-extension watcher ABI was introduced.
- Split the Stream XS implementation into separately compiled state, transport, callback, input, delivery, read, write, transition, and per-framer C units behind one private header and one unchanged extension.
- Move Stream subclass declarations, option validation, callback resolution, and immutable descriptor caching into the private Linux::Event::Stream::_Descriptor module while retaining Stream.pm as the public connection-lifecycle implementation.
- Keep the deliberately tiny deadline Timer type beside Stream lifecycle policy, avoiding a new public module or unnecessary implementation layer.
- Make the Timer microbenchmark fall back from the high-resolution process CPU clock to Perl process times, and report CPU timing as unavailable instead of failing installation when neither clock advances. Record the selected clock source in benchmark JSON and cover the fallback path.
- Report non-Linux platforms as OS unsupported during configuration so CPAN Testers classifies the intentionally Linux-only distribution as NA rather than UNKNOWN. Add regression coverage for the configuration guard.
- Add GitHub Actions coverage for supported Perl versions, distribution construction, metadata, POD, and native source packaging; publish CI, license, Perl, CPAN, and Kwalitee badges and complete the async extension boundary documentation. Exclude MakeMaker backup files from generated source archives.
Modules
Linux-native reactor, streams, datagrams, and processes
lazy socket-address value
connected and unconnected packet sockets
structured Linux::Event failure details
declare native framing for a Stream subclass
native decimal-length framing declaration
native delimiter framing declaration
native fixed-size framing declaration
native binary length framing declaration
native netstring framing declaration
native 32-bit big-endian framing declaration
native unsigned LEB128 framing declaration
accepting socket that constructs Stream instances
Linux-native epoll event loop
pidfd process lifecycle and asynchronous standard I/O
subclass-defined Linux signalfd subscriptions
subclass-defined native buffered streams
declare OpenSSL TLS policy for a Stream subclass
subclass-defined timers for Linux::Event
subclass-defined eventfd wakeups