Releases: lalinsky/zio
Releases Β· lalinsky/zio
v0.12.0
Added
Fixed
v0.11.0
Added
std.Iointerface is now essentially complete. All major operations are implemented:- Spawn and wait on child processes, with non-blocking pipe I/O on POSIX.
- Iterate over directory entries.
- Create nested directory paths.
- Create files atomically (write to temp file, then rename into place), with optional
make_path
andreplacesupport. - Rename files without overwriting existing destinations.
- Batch multiple file I/O operations for linear execution (concurrent execution is deferred).
Stream.Reader.fromStdandStream.Writer.fromStdconvertstd.Io.net.Streamto zio's buffered
reader/writer, enabling seamless interop between zio and std networking in the same program.
Changed
net.Stream.Readerandnet.Stream.Writerare now lighter, storing only the socket handle instead of
the full stream.
Fixed
- Fixed a critical bug on Linux with the epoll backend where non-blocking network reads and writes could
silently succeed with garbage data instead of returningerror.WouldBlock.
v0.10.0
Added
- Support for Zig 0.16.
- Implementation of the
std.Iointerface. Supports fiber-based futures/groups, file and network operations.
Still missing child process and batch operations. The rest of the codebase will be adjusted over time to align withstd.Io
to avoid some unnecessary type conversions.
Changed
server.accept()now takes options argument with timeout.
Fixed
- Internal refactoring to handle data races on weakly ordered architectures in some cases.
v0.9.0
Added
- Fully asynchronous DNS resolver on macOS and Windows using their native APIs.
- Added support for 64-bit PowerPC CPUs.
- Added
RwLockfor async readers-writer locking. - Added
Timestamp.fromSeconds()andtoSeconds()for second-based conversions. - Added
Timestamp.untilNow()to get the duration elapsed since a timestamp.
Changed
- Removed unused
JoinHandle.cast()method.
Fixed
- Fixed incorrect assert that could panic on a race between task finishing naturally and being cancelled.
- Added some extra clobbers to context switching assembly, already implicitly covered by others, but for consistency.
v0.8.2
v0.8.1
Added
- Added
blockInPlacefor running blocking functions on the thread pool without allocations. - Added
os.thread.yield()for yielding to the kernel from OS-level threads.
Changed
- Removed LIFO slot optimization in the coroutine scheduler, to simplify the code while planning to rework the scheduler.
- Added check that prevents coroutines from being called multiple times per one event loop iteration.
- Internal refactoring of our
WaitQueueprimitive, to better express the semantics we need for synchronization primitives likeMutexorCondition. - Internal refactoring of our
Waiterprimitive, avoiding indirect function calls and more direct integration withselect.
Fixed
- Fixed error returned from
Grouptask closing the group, even if not in fail-fast mode.
v0.8.0
Added
- Added
CompletionQueuefor waiting on multiple I/O operations. - Added blocking I/O support for socket, pipe, poll, timer, and work operations. These operations can now be called from any thread without an async runtime.
Changed
- Improved our CI setup, run significanly more tests in multi-threaded mode to catch possible race conditions.
Fixed
- Fixed task migration race condition that could cause crashes under heavy multi-threaded load.
- Fixed pipe read/write using wrong offset in io_uring backend.
- Fixed NetBSD test failures.
v0.7.0
Added
- Added CI for 32-bit ARM/Thumb and RISC-V CPUs to make sure these don't break.
Changed
- BREAKING: Removed
rtparameter from most functions. It's no longer needed.
You can now usezio.spawn,zio.sleep, orzio.yieldinstead of calling
them asrtmethods. - Synchronization primitives like
Mutex,ConditionorChannelcan be now used
from any thread, outside of coroutines, or across multiple runtimes. DirandFileI/O operations can be now called from any thread and then will
run regular blocking syscalls.- Internal: Update our user-mode futex implemenentation to a global hash table,
to allow it to be used from any thread. - Internal: Replaced
std.Threadsynchronization primitives with custom OS wrappers.
v0.6.0
Added
- Added support 32-bit ARM/Thumb and RISC-V CPUs
- Added
Pipeto explicitly support streaming-only file descriptors (#267) - Added
Socketmethods for configuring OS-level buffer sizes (#243) - Added custom panic handler that fully extends stack before calling the default handler
- Added convenience
fromXxx()methods toTimeout
Changed
- All timeout parameters now accept
Timeoutinstead ofDuration(#238, #239) - Increased default stack committment to 256KiB to avoid stack overflows in the default panic handler
- Internal refactoring to reduce memory usage and binary size
Fixed
- Fixed possible race condition between
Channel.closeand task cancelation