Skip to content

Latest commit

 

History

History
259 lines (163 loc) · 6.78 KB

CHANGELOG.md

File metadata and controls

259 lines (163 loc) · 6.78 KB

Significant feature changes and additions

This project follows Rust semantic versioning.

0.2.11 (2024-05-28)

  • Fixups for Rust 1.78 warnings and clippy recommendations

Added

  • Core::anymap_unset to clear a stored anymap value

0.2.10 (2023-08-06)

  • MSRV changed to 1.63 from 1.60, because testing now requires const Mutex::new

Fixed

Big testing refactor and rework:

  • No longer depend on broken RUST_TEST_THREADS=1
  • No longer depend on previous script-based workaround
  • Get rid of old test-multi-thread workaround
  • Under cargo test, when single-threaded testing is required, run a worker thread to force all tests to run on a single thread
  • However MIRI testing continues to use script-based workaround

0.2.9 (2023-07-24)

Added

  • Channel to send messages to a Stakker thread from any other thread

0.2.8 (2023-07-14)

Added

  • Test MSRV of 1.60
  • Use Rust 2021 edition

Fixed

  • Replaced unmaintained anymap crate with simple safe inline implementation

0.2.7 (2023-05-09)

Added

  • LogLevel::try_from(u8) plus derives: Hash, Ord, PartialOrd

0.2.6 (2023-03-29)

Fixed

  • Fixed build failure when "no-unsafe-queue" feature was enabled alone
  • Testing has been improved to catch any other similar issues

0.2.5 (2022-06-11)

(maintenance)

0.2.4 (2021-05-14)

Added

  • ActorOwnSlab / actor_in_slab! for basic child actor housekeeping
  • query! macro for convenient access to Actor::query
  • Core::start_instant() to get runtime startup time
  • ShareWeak for weak references to Share items

Documentation

  • examples/ folder

0.2.3 (2021-04-22)

Fixed

  • On actor stop! or fail!, if further failures are reported before the actor method returns, the first stop/fail is now kept and later ones are discarded, since the first failure is closer to the origin of the problem.

0.2.2 (2021-04-06)

Added

  • Minimum support for asynchronous tasks, in task module

0.2.1 (2021-02-25)

(only documentation changes)

0.2.0 (2020-11-08)

Breaking changes

  • PipedThread::new argument order changed, to avoid need for temporaries when called
  • Actor::kill, Actor::kill_str and Actor::owned moved to ActorOwn. This constrains the power to kill an actor and create new owners to just owners. Also kill_str now only handles &'static str, with kill_string added for String. If you need to kill an actor using just an Actor reference, then the actor needs a method added that calls fail!
  • Cx::fail_str now only handles &'static str. Cx::fail_string can be used for String. fail! macro now abstracts this.
  • ActorOwn::new now requires a parent-ID argument. actor! and actor_new! macros are unchanged.
  • StopCause adds StopCause::Lost to allow for future implementation of remote actors

Added

  • "logger" feature for optional logging support. If enabled, every actor gets an span-ID. Actor start and stop are logged, with failure reasons. All logging from an actor uses the span-ID and supports formatted text and key-value pairs. Logging is synchronization-free and is directed to a per-Stakker logging handler, which can output directly, or forward to a logging crate, or forward to the logging system of the host event loop as required
  • fail!, stop! and kill! to express actor termination more conveniently, including with formatted strings
  • ret_fail! and ret_failthru! to easily cascade actor failure

Changed

  • Stakker::anymap_set moved to Core::anymap_set so that actors can set anymap values more conveniently.

0.1.4 (2020-09-27)

Added

  • Core::share_rw2 and Core::share_rw3 to allow borrowing 2 or 3 Share instances at once
  • Allow using _ in initial closure arguments within macros. For example |_this, _cx| can now be written |_, _|

Fixed

  • PipedThread now notifies thread as documented if the actor holding the PipedThread dies.
  • PipedThread now reports back panic string correctly if thread panics and the panic was made with a String or &str.
  • A timer set at cx.now() in virtual time now executes correctly.
  • The flat FnOnce queue has been fixed to run cleanly under MIRI

Testing

  • Stress tests of Waker across threads (to detect races)
  • Stress test of flat FnOnce queue expansion
  • Fuzz-testing of timer queue
  • Fuzz-testing of flat FnOnce queue
  • Unit tests of queue and timers using small corpora derived from fuzz tests
  • Unit tests for Actor, StopCause, Share, Waker and PipedThread
  • Coverage now at 91%
  • Tests pass when running under MIRI

0.1.3 (2020-08-27)

Added

  • Virtual SystemTime: cx.systime() and stakker.set_systime()
  • Synchronous actor queries from outside runtime: actor.query()

Changed

  • 'flat' FnOnce queue simplifications and improvements
  • Global-based Deferrer access is now branch-free
  • General optimisations on hot paths

Fixed

  • Fixed memory leak in 'flat' FnOnce queue cleanup
  • Fixed memory leak in Stakker cleanup with inline Deferrer
  • Fixed issue with TLS-based Deferrer on cleanup

Testing

  • Valgrind testing script

0.1.2 (2020-07-16)

Added

  • actor_of_trait!
  • ActorOwnAnon

0.1.1 (2020-06-20)

Changed

  • Use $crate:: instead of stakker:: for macros
  • Accept trailing comma in more places in macro args
  • 'static on Actor::apply_prep is not necessary

0.1.0 (2020-04-04)

Changed

  • For call!-family and fwd_to!-family macros using closures, no longer require move keyword and make all closures implicitly move so that they are 'static

0.0.2 (2020-03-04)

Added

  • Ret type for compile-time checking of single use, instead of old fwd_once_to! implementation (now dropped).

  • cx: CX![] to save on actor method boiler-plate

Changed

  • Big change to notation within macros, using [] to contain the context (Cx / Actor / Core) that the call is targetted towards, which eliminates need for __ arguments. This is still valid Rust syntax, so is formatted automatically by rustfmt. Fwd handling split out of call! into fwd!. Error reporting of errors in macro args improved.

  • Multiple ActorOwn refs to an actor are now permitted, and the ref'd actor is terminated only when the last one goes away

  • Deferrer is now the main queue, not the lazy queue. This is to avoid the lazy queue ballooning whilst there's a lot still going on on the main queue.

  • Core::timer_max dropped in favour of timer_max! macro which is more efficient. Similarly for timer_min.

Testing

  • Coverage testing with kcov, and many more tests. Includes coverage testing of macros.

0.0.1 (2020-01-23)

First public release