Releases: pointertobios/asco
Releases · pointertobios/asco
ASCO 0.3.0 Pre-release
A new remake version
Full Changelog: https://github.com/pointertobios/asco/commits/0.3.0-pre
ASCO 0.2.1
Fixes
- Segfault when destroy cloned coroutines
- File IO options sometime blocked
- SLUB sometime allocated nullptr
Full Changelog: 0.2.0...0.2.1
ASCO 0.2.0
scheduled unstable
Features
- inline_future.dispatch()
- Type safety flags
- True void type support for future
- placement_list
- block_read_writer
- SLUB memory pool
Fix
- Worker maps use unordered_map
- File IO randomly crash
- Some other randomly crashing
Improvement
- Use spin instead of mutex in inner::channel
- Add noexcept for spin and rwspin
- Remove customizable runtime
- Normalize file API
- New member in buffer
- On performance, compactibility and also correcting some misusing
- More template extern specialization
- Improve many techical debt
Full Changelog: 0.1.1...0.2.0
ASCO 0.1.1
Features
- Exception asco::coroutine_abort
- New
future.exceptionallydefinition - Target for choice of async main function or sync main function
- SSO for zero copy buffer
Improvements and Fixes
- Monopolized timer and io thread
- Add multi producer single consumer channel for inner util, and use it for task dispatching
Full Changelog: 0.1.0...0.1.1
ASCO 0.1.0
Features
- Timer library: timeout and sleeps
- Exception with stacktrace and call chain trace
- Synchronous primitives:
condition_variable,barrierandrwlock - Simple performance recording
- Preparation for IO module: Zero copy buffer and
stream_base - Asynchronous task combination:
future.then()andfuture.exceptionally()
Improvements and Fixes
- If
selectspawned to the same worker, the tasks will block because barrier. We don't need all other coroutine exited when the first selected coroutine return. Just remove the barrier. selectwent into exception and not correctly suspend and awake task.selectdidn't correctly remove caller coroutine.- Use
channelto make sure the return value of coroutine didn't destructed before caller co_await it. - Processing of exception improved.
- Use
spinlock instead ofmutexin runtime and scheduler. Their critical sections are short enough. semaphore::acquire()improvement: break out of CAS loop after suspend.- If sub coroutine had not been
co_await, once the caller exit, the stacktrace in sub coroutine will crash due to segfault. Now move trace info to coro_local_frame.
License change to MIT from GPLv3
Full Changelog: 0.0.3...0.1.0
ASCO 0.0.3
Features
- Interval
- select<N>: Fetch return value of the first returned coroutine and abort rest coroutines
- Recursing abort
Improvements & Fixes
- Exception passing correctly
Full Changelog: 0.0.2...0.0.3
ASCO 0.0.2
Features
- Channel(Pipe): Simple Producer Simple Consumer
- Coroutine Local Frame Lazy Destroy
Fixes
- Semaphore incorrectly sleep and never been awaken.
Full Changelog: 0.0.1...0.0.2
ASCO 0.0.1
Basic asynchronous environment
- Peer coroutines: Crated by scheduler and work as partner with each other.
- Inline coroutines (Non-peer coroutines): Calling the callees and returning to caller with symmetrical transformation.
- Abortable coroutines:
future<T>::abort()function with recover semantic. The aborted coroutine must recover the affected object to the state before the coroutine started. - Coroutine local variables: Variables with its lifetime spreading with the coroutine calling chain.
Synchronization primitives
- Semaphore