Releases: compio-rs/compio
Releases · compio-rs/compio
v0.19.0-rc.1
We made huge progresses in this release. 160 PRs have been merged. Please refer to the sections below for a migration guide.
What's Changed
- compio-buf
IoBufMut::ensure_init(#884)
- compio-io
- compio-driver
OpCoderefactor: remove the usages ofPinand introduce theControlAPI (#753, #803, #804, #859)- Multishot IO:
ReadMulti,RecvMulti,RecvFromMulti,RecvMsgMulti,AcceptMulti(#748, #715, #747, #842) - Zero-copy IO:
SendZc,SendMsgZc(#754, #755) - More POSIX ops:
Bind,Listen,Pipe(#806, #807) BufferPoolrefactor (#820, #854)- Fd registering (#718)
- Public APIs exposes
rustixtypes (#876)
- compio-executor: this is a new low-level crate to replace
async-task. It is not exported from the monocrate. - compio-runtime
- compio-fs
- compio-net
- All
send*methods passMSG_NOSIGNALnow (#835) *Listener::incoming: aStreamto accept incoming connections forever (#747, #759)TcpSocket&UnixSocket: new socket types for convenience (#817)- Multishot IO (#830, #838)
- Socket state support (experimental):
*Stream::sock_nonemptyto indicate whether there's more data internally to read. Only available on io-uring (#861)
- All
- compio-signal
- compio-tls
- compio-ws
futurestraits compatibility (#875)
Migration guide
- compio-io
- The managed IO traits don't allow associating the buffer pool types now. The implementors are required to manage their buffer pool implicitly.
AsyncStreamrequire the inner stream to implementSplittablenow. It is true for socket streams and pipes. TLS and WebSocket streams arefutures-compatible already and don't need to be wrapped insideAsyncStream.
- compio-driver
- Each
OpCodeis associated with aControltype, which keeps the references to the fields inside the opcode. It will be dropped after the opcode being completed, and before the opcode being unboxed and returned to the user. TheControltype is usually just(), or a custom struct containing typicallySysSlice,cmsg, oraiocb. The implementor should fill it insideOpCode::init. The driver ensures that the address of the control instance doesn't change, so that it is able to store self-references. Proactoris always!Sendnow. Please ensure you're using it in a single thread.- Some public APIs require
rustixtypes instead of raw primitives orlibctypes. - About multishot opcodes, please refer to
SubmitMultiincompio-runtimefor a correct usage.
- Each
- compio-runtime
Eventhas been removed. Please useAsyncFlagfrom the cratesynchrony.- There's no
spawn_uncheckedat all. No alternative for this unsafe method.
- compio-fs
- On Unix,
pipe::anonymousis async now. Filedoesn't implementAsyncReadMultiAtbecause io-uring doesn't support it.
- On Unix,
- compio-net
SocketOptshas been removed. UseTcpSocketorUnixSocketinstead.send_zerocopyis not always faster thansend. Please profile your use case for an efficient strategy.
- compio-tls
TlsStream&MaybeTlsStreamarefutures-compatible now.
- compio-ws
- It's runtime-agnostic by default now. The
compio-related functionalities needconnectfeature to be enabled. WebSocketStreamisfutures-compatible now.
- It's runtime-agnostic by default now. The
New Contributors
- @ortuman made their first contribution in #672
- @fantix made their first contribution in #694
- @Aalivexy made their first contribution in #695
- @thomas-fractalbits made their first contribution in #718
- @ararog made their first contribution in #749
- @johnnyshields made their first contribution in #769
- @Xerxes-2 made their first contribution in #847
- @abh1nav10 made their first contribution in #857
Full Changelog: v0.18.0...v0.19.0-rc.1
v0.18.0
Generated by Copilot
compio
Breaking Changes
- Split
fsandnetout of theruntimefeature; enable them explicitly. (#564) splitnow uses synchrony semantics. (#640)
Features
- Add the first runtime future combinator
with_personality. (#639)
compio-driver
Breaking Changes
- Enable full io_uring fallback path. (#656)
- Make
OpCodeanunsafetrait; implementors must uphold explicit safety invariants. (#650) - Make
OpCode::cancelsafe (API contract change). (#575)
Features
- io_uring personality APIs (
register_personality,set_personality,with_personality, etc.). (#630) - Poll driver multi‑fd support (enables
splicereadiness across multiple fds). (#623) - Add
spliceop in driver (including stub support and kernel‑version checks). (#609) - Add truncate‑file support across drivers. (#611)
- Fill all supported
statxfields for accurate metadata. (#625) - Distinguish
Read/WritevsRecv/Sendand add socket flags support. (#567) - Add stable
PollOpCode/IourOpCodealiases for downstream implementors. (#566) - Use
stat64on gnulinux for large‑file correctness. (#597)
compio-runtime
Breaking Changes
- Refactor submit future:
submit()now yields aSubmitfuture that submits on first poll; usesubmit(op).with_extra(). (#632)
Features
compio-fs
Features
- Add Linux/Android
spliceAPI and tests. (#635) - Add truncate‑file API support. (#611)
- Use
stat64where available for correct metadata. (#597)
compio-net
Breaking Changes
- Replace
TcpOptswithSocketOptsacross all sockets; APIs now take&SocketOpts. (#573)
Features
- Distinguish
Read/WritevsRecv/Sendand support socket flags. (#567)
compio-io
Breaking Changes
Framednow supports generic buffers (trait bounds and usage changes). (#642)splituses synchrony semantics. (#640)- Enable fallible frame extraction for
Framed. (#631)
Features
- Add
reserve/reserve_exactforIoBufMut. (#578)
compio-buf
Breaking Changes
- Generic buffer support for
Framed(compatibility changes). (#642)
Features
- Add
reserve/reserve_exactforIoBufMut. (#578) - Make
BufResultcompatible with moreResulttypes. (#569)
compio-quic
Breaking Changes
- Redesign QUIC IO APIs. (#593)
Features
- Sync recent changes from quinn-udp. (#592)
compio-ws
Breaking Changes
- Adopt
SocketOptschanges from compio-net. (#573)
compio-process
Breaking Changes
- Submit future refactor impacts runtime integration. (#632)
compio-dispatcher
Features
- Use synchrony for driver/quic dispatcher path. (#628)
New Contributors
- @westhide made their first contribution in #561
- @KR-bluejay made their first contribution in #601
- @tontinton made their first contribution in #609
- @jackpot51 made their first contribution in #625
- @ItsDoot made their first contribution in #631
- @github-actions[bot] made their first contribution in #646
Full Changelog: v0.17.0...v0.18.0
v0.17.0
What's Changed
- compio-driver
- Stub for Linux if either
io-uringorpollingis disabled by @Berrysoft in #528 #529 - Expose
Wakerinstead ofNotifyHandleby @Berrysoft in #535 #540 - Make
Arcoptional forSharedFd. Enable it withfd-syncfeature by @Berrysoft in #539
- Stub for Linux if either
- compio-runtime
- Avoid dropping local queue on different threads by @Berrysoft in #513
- Remove
spawn_uncheckedand exposeWakerby @Berrysoft in #534 #537 - Timer optimization by @AsakuraMizu #546
- compio-tls
MaybeTlsStreamis moved from compio-ws
- compio-quic
- Avoid memory leak by @AsakuraMizu in #545
- compio-ws
- Add native-tls support by @Berrysoft in #517
- Add
Configby @George-Miao in #533
Notable breaking changes
aws-lc-rsrelated features are deprecated and removed by @George-Miao in #521- All crates have been updated to edition 2024.
- Some methods of compio-ws has been removed to match the signature of tungstenite
New Contributors
- @OpenTritium made their first contribution in #525
Full Changelog: v0.16.1...v0.17.0
v0.16.1
What's Changed
- compio-driver
- feat:
Socketop fallbacks to blocking if the kernel doesn't support it #507
- feat:
- compio-io
- compio-runtime
- compio-tls
- fix: the rustls adapter hangs #499
- compio-ws
- feat: new crate for websocket #501
New Contributors
- @Paraworker made their first contribution in #485
- @krishvishal made their first contribution in #501
Full Changelog: v0.16.0...v0.16.1
v0.16.0
What's Changed
- feat(runtime): add "notify-always" feature by @Berrysoft in #435
- feat(iour): allow register eventfd in Driver::new by @Berrysoft in #438
- feat: add tcp configuration options by @numinnex in #440
- doc(fs): update file documentation with info about AsyncRead/AsyncWrite traits by @numinnex in #443
- feat(net): design improvements for TcpOpts by @Berrysoft in #441
- refactor: cleanup features by @Berrysoft in #436
- feat: update socket2, windows-sys, rcgen by @Berrysoft in #448
- fix(net): cmsg buf align by @Berrysoft in #449
- feat(runtime): implement thread affinity for runtime and dispatcher by @numinnex in #445
- feat(net): rename tcp nodelay to idiomatic version by @numinnex in #451
- feat(driver): warn if thread pool limit is set to 0 by @Berrysoft in #450
- fix(driver,poll): musl libc compatibility by @ur4t in #455
- refactor: new traits
IoVectoredBuf*by @Berrysoft in #457 - fix(driver,iour): resubmit poll op by @Berrysoft in #462
- refactor(driver): remove some cfg(io_uring) by @Berrysoft in #463
- refactor: Avoid instantiating Elapsed outside by @tisonkun in #466
- doc: change document for io::framed
Encoderby @George-Miao in #467 - fix: framed read can only read out one item by @George-Miao in #468
- fix: TimerFuture being Send and Sync by @George-Miao in #470
- feat(driver): determine current driver type at runtime by @Berrysoft in #471
New Contributors
Full Changelog: v0.15.0...v0.16.0
v0.15.0
What's Changed
- feat(net): TcpStream.nodelay, TcpStream.set_nodelay by @XeCycle in #384
- fix(buf): track caller unwrapping by @incisakura in #385
- feat(driver): buffer pool by @Berrysoft in #358
- fix(quic): usages of
#[doc(hidden)] pubby @AsakuraMizu in #389 - feat(quic): update h3 to 0.0.7 by @AsakuraMizu in #391
- fix: reduce warnings by @Berrysoft in #396
- feat: implement AsFd trait for many types by @Sherlock-Holo in #395
- build(deps): update nix requirement from 0.29.0 to 0.30.1 by @dependabot in #399
- refactor(driver,iour): remove support for kernel < 5.19 by @Berrysoft in #402
- perf(driver): set setup_coop_taskrun for io-uring by @Sherlock-Holo in #401
- Add
CLOEXECflags by @Berrysoft in #403 - feat(quic): update h3 to 0.0.8, h3-datagram to 0.0.2 by @AsakuraMizu in #407
- build(deps): update webpki-roots requirement from 0.26.3 to 1.0.0 by @dependabot in #406
- feat: add TcpStream bind_and_connect by @Sherlock-Holo in #409
- build: add required dependencies to flake.nix by @George-Miao in #411
- fix(driver,poll): clear events before poll by @Berrysoft in #412
- build(deps): update criterion requirement from 0.5.1 to 0.6.0 by @dependabot in #408
- build: bump patch version for compio-quic by @AsakuraMizu in #414
- fix: move socket2/all feature gate from compio-net to compio-driver by @AsakuraMizu in #415
- Read to string by @Sherlock-Holo in #413
- implement Deref for AsyncFd by @Sherlock-Holo in #416
- feat: Framed IO by @George-Miao in #417
- fix(io): remove unnecessary features by @George-Miao in #419
- feat(io): allow set length_field_len and length_field_is_big_endian for LengthDelimited by @Sherlock-Holo in #420
- build(deps): update rustls-platform-verifier requirement from 0.5.0 to 0.6.0 by @dependabot in #422
- fix(driver): make clippy happy by @Berrysoft in #425
- ci: specify target on Windows by @Berrysoft in #426
- fix: handle some edge cases for windows version below vista by @stevefan1999-personal in #427
- chore: rewrite compio-quic bench by @AsakuraMizu in #428
- ci: remove glib test by @Berrysoft in #430
- fix(driver): add
AsFdrequirements forSharedFdby @Berrysoft in #424 - fix(io): Framed by @George-Miao in #421
- feat: buffered IO implementation by @Berrysoft in #386
- feat(driver): Add DeviceIoControl opcode by @tpambor in #429
- feat(io): adjust read_managed_at param order by @Berrysoft in #431
- feat: prepare for 0.15 release by @Berrysoft in #432
New Contributors
- @stevefan1999-personal made their first contribution in #427
- @tpambor made their first contribution in #429
Full Changelog: v0.14.0...v0.15.0
v0.14.0
What's Changed
- fix(runtime): drop runnables manually by @Berrysoft in #350
- fix: remove "ring" from default features by @Berrysoft in #351
- fix(runtime): fix runtime drop borrowing by @Berrysoft in #360
- fix(runtime): register timer on first poll by @Berrysoft in #354
- fix(fs,net,signal): check driver type on runtime by @Berrysoft in #363
- fix(driver,iocp): check NTSTATUS correctly by @Berrysoft in #367
- fix(runtime): simplify spawn_blocking by @Berrysoft in #362
- refactor(io): revise vectored methods by @Berrysoft in #355
- refactor(driver): remove one Result usage by @Berrysoft in #369
- fix(dispatcher): replace event with oneshot channel by @Berrysoft in #368
- fix(runtime): remove handwritten state machine by @Berrysoft in #361
- build(deps): update rustls-platform-verifier requirement from 0.4.0 to 0.5.0 by @dependabot in #370
- feat(io): buffer pool IO traits by @Berrysoft in #356
- feat(runtime): relax signature of
spawn_blockingby @g-plane in #371 - build(deps): update block2 requirement from 0.5.0 to 0.6.0 by @dependabot in #372
- build(deps): update rand requirement from 0.8.5 to 0.9.0 by @dependabot in #373
- ci: remove FreeBSD by @Berrysoft in #374
- feat(net): add from_std for Listener by @Berrysoft in #376
- chore(quic): re-enable quinn on solarish by @AsakuraMizu in #380
- fix(ci): reduce clippy warnings by @Berrysoft in #382
- fix(tls): duplicated buffer init by @incisakura in #381
- fix(net): set reuseaddr when binding by @XeCycle in #379
- fix(io): don't fill buffer until inner buffer is empty by @Berrysoft in #378
- feat: prepare for 0.14 release by @Berrysoft in #383
New Contributors
Full Changelog: v0.13.1...v0.14.0
v0.13.1
What's Changed
- fix(runtime): forget op if no current runtime by @Berrysoft in #338
- Add support for smallvec by @George-Miao in #341
- build: update flake by @George-Miao in #342
- fix(poll): renew event with valid user_data by @Berrysoft in #340
- fix(driver): erase op type in driver by @Berrysoft in #348
- fix(poll): cancel in the fd queue by @Berrysoft in #346
Full Changelog: v0.13.0...v0.13.1
v0.13.0
What's Changed
- ci: guard compio is compatible with stable rust by @tisonkun in #297
- fix(fs): metadata types on armv7-linux-androideabi by @Berrysoft in #298
- feat(tls): add ALPN support by @Berrysoft in #299
- feat(io): add *_read_uninit for compat by @Berrysoft in #301
- feat(runtime): don't try to poll all tasks before polling driver by @Berrysoft in #300
- feat(net): add from_std for UdpSocket by @Berrysoft in #302
- refactor: update rustfmt config by @Berrysoft in #303
- fix(driver,poll,iour): use Arc::clone instead of try_clone by @Berrysoft in #306
- fix(driver,poll): remove pipe usage by @Berrysoft in #307
- fix(quic): don't exit event loop on I/O error by @AsakuraMizu in #311
- fix(net,iour,poll): fix accept leak by @Berrysoft in #315
- build(deps): update rustls platform verifier by @Berrysoft in #317
- feat(io): remove explicit lifetime from copy by @George-Miao in #319
- fix(driver,poll): ignore EINTR and retry by @Berrysoft in #320
- feat(driver,iocp): add WaitCompletionPacket support by @Berrysoft in #316
- refactor(net,iocp): move WSAStartup by @Berrysoft in #314
- fix(io): copy should be eager by @Berrysoft in #321
- refactor(driver,poll): remove event in on_event by @Berrysoft in #322
- ci: add freebsd by @Berrysoft in #324
- fix(io,copy): clear buf after write by @Berrysoft in #325
- refactor(driver,poll): add op_type by @Berrysoft in #323
- feat: add FreeBSD AIO support by @Berrysoft in #310
- fix(runtime): runnable reference cycle by @Berrysoft in #328
- ci: add illumos one by @Berrysoft in #327
- refactor: use cfg_aliases by @Berrysoft in #331
- fix(runtime): self-reference without Arc by @Berrysoft in #329
- refactor(driver,runtime): allow polling driver when pushing an op by @Berrysoft in #308
- doc(README): add banner by @George-Miao in #334
- feat(quic): support rustls provider aws-lc-rs by @AsakuraMizu in #333
- feat(driver): add AIO support for illumos & solaris by @Berrysoft in #330
- fix: add rustls features for tls by @Berrysoft in #336
- fix: add io-uring & polling feature to crates by @Berrysoft in #335
New Contributors
Full Changelog: v0.12.0...v0.13.0
v0.12.0
What's Changed
- doc: Update README.md by @George-Miao in #270
- refactor(driver): better IORING_CQE_F_MORE handle by @Sherlock-Holo in #273
- feat: add flags related methods by @Sherlock-Holo in #272
- feat: add ancillary data support by @AsakuraMizu in #275
- test(fs): Add a test case for read with timeout by @Xuanwo in #280
- refactor:
IoVectoredBufby @George-Miao in #277 - fix(driver/net): ancillary data by @AsakuraMizu in #283
- fix(buf): remove unreachable pattern by @AsakuraMizu in #287
- doc: fix clippy "first doc comment paragraph is too long" by @AsakuraMizu in #289
- Add from_std methods by @fafhrd91 in #290
- feat: QUIC by @AsakuraMizu in #282
- Fix/driver-type by @George-Miao in #292
- feat: use signalfd on Linux by @Berrysoft in #271
New Contributors
Full Changelog: v0.11.0...v0.12.0