Flatten the worker module, relocate its tests into a crate-level test module, and delete stale generated artifacts.
- src/worker.rs: flatten the `worker/mod.rs` directory into a single `worker.rs` module file
- src/lib.rs: wire in a new `crate_test` module for crate-level tests
- src/crate_test/mod.rs: move the worker's `tests.rs` into a crate-level `crate_test` module, updating the `Worker` import to `crate::worker`
- deps.dot, deps.html: remove checked-in dependency-graph artifacts
- spectral_report.txt: remove the stale static-analysis report
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Use spectral analysis tool to find spurious edges in the code DAG, refactoring to prune.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Asking the agent to refactor to reduce spectral complexity, it worked. Trivial change, but this did reduce code complexity.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Generates a report on the connectivity properties of the code interdependency DAG.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Add a Python getting-started Jupyter notebook and reorganize the Python examples under examples/python/.
- examples/python/getting_started.ipynb: add notebook demonstrating the single-threaded tick loop (`spawn`/`send`/`tick`/`inbox`/`try_recv`) and the multi-threaded path via `RuntimeConfig` + `rt.run()`/`handle.shutdown()`
- examples/: relocate `hello_async.py` and `hello_single_thread.py` under `examples/python/`
- pyproject.toml: add a `dev` dependency group containing jupyter and ipykernel
- uv.lock: regenerate the lockfile for the new dev dependencies (2452 lines)
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Show basic information from the runtime, such as number of actors, worker threads, etc.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Refactoring to logically separate component modules in order to make it easier to develop tests, metrics, tracing, etc.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Adds some basic benchmarking, stress tests. They still need to be properly examined to ensure they are testing the correct properties, but fit for "good enough". Implements the HybridChannel type, which features a channel buffer that can withstand overflows. It does so by providing a dequeue behind a mutex. Without overflow, will push messages into the lock free ArrayQueue implemented by crossbeam_queue; when that buffer fills, will use the locking portion provided by the Mutex<VecDequeue>.
In the future we can even further optimize this, perhaps with some linked list implementations of lock-free channels, but, like the benchmarks, this fits the "good enough" bar for now.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Did not like the requirement of a tokio runtime and async/await. Rewrote
to use lock free queues (`crossbeam_queue::ArrayQueue`) as the basic
primitive to enable a runtime consisting of many pseudo-processes that
can pass messages to each other.
Reviewed-on: http://zachery.lol/code/code/zacheryasc/swactor/pulls/1
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Introduce a typed `ActorRequestSender` connection handle for actors and harden the `Error` type.
- src/lib.rs: add `ActorRequestSender<A>` wrapping `mpsc::Sender<ActorRequest<A>>` with async `send`, `Clone`, and `From` impls; expose it via new `Handle::get_connection()` so callers hold a lightweight standalone connection to an actor
- src/lib.rs: route `Handle::send` through the new sender and store `tx` as an `ActorRequestSender`; drop the `Unpin` supertrait bound from the `Actor` trait
- src/error.rs: turn the `Error` type alias into a newtype struct, gate `convert_err` as `pub(crate)`, and add `From<T: AsRef<str>>` plus `ToString` impls
- examples/hello.rs: switch `Greeter::spawn` to method-call syntax (`Greeter.spawn(&rt)`) to match the updated API
- README.md: rename the project heading from "about" to "swactor"
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
Skeletal actor framework. Somewhat unweildy, needs a message box, a better runtime, and different channels. However, hello world example works
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>