2026-02-07 17:39:02 +00:00
|
|
|
[workspace]
|
feat: wasm actor crate — run WebAssembly guests inside swactor actors
Adds `crates/wasm-actor/` (swactor-wasm-actor), which embeds wasmtime-sandboxed
Wasm instances inside regular swactor actors. Messages flow as raw bytes through
the guest ↔ host contract (alloc/handle exports, swactor.send import). The host
drains an outbox after each handle call and routes messages via ctx.send().
Includes 3 no_std guest modules (echo, double, silent) and 7 integration tests
covering roundtrip delivery, binary fidelity, multi-send, error cases, engine
sharing, and native↔wasm interop.
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
2026-02-13 06:15:22 +00:00
|
|
|
members = [".", "crates/python", "crates/wasm", "crates/wasm-actor", "crates/simulation", "crates/runtime-dashboard", "crates/distribution", "crates/simulation-dashboard", "crates/std"]
|
2026-02-07 17:39:02 +00:00
|
|
|
exclude = ["tools/depgraph"]
|
|
|
|
|
|
2025-11-25 00:39:17 +00:00
|
|
|
[package]
|
|
|
|
|
name = "swactor"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
edition = "2024"
|
feat: Stress tests, benchmarking, and non-failing queues and inboxes #3
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.
2026-01-26 07:14:00 +00:00
|
|
|
autobenches = false
|
2025-11-25 00:39:17 +00:00
|
|
|
|
2026-02-09 14:42:25 +00:00
|
|
|
[profile.bench]
|
|
|
|
|
debug = true
|
|
|
|
|
strip = false
|
|
|
|
|
|
2025-11-25 00:39:17 +00:00
|
|
|
[lib]
|
2026-02-07 17:39:02 +00:00
|
|
|
crate-type = ["rlib"]
|
2025-11-25 00:39:17 +00:00
|
|
|
|
2026-01-23 05:00:57 +00:00
|
|
|
[features]
|
|
|
|
|
default = ["getrandom"]
|
|
|
|
|
getrandom = ["dep:getrandom"]
|
2026-02-08 16:18:39 +00:00
|
|
|
serde = ["dep:serde"]
|
2026-02-09 09:04:57 +00:00
|
|
|
tracing = ["dep:tracing"]
|
feat: Stress tests, benchmarking, and non-failing queues and inboxes #3
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.
2026-01-26 07:14:00 +00:00
|
|
|
no_random = [] # compile without access to a source of randomness
|
2026-02-09 19:05:37 +00:00
|
|
|
transport = [] # transport-agnostic messaging (no mandatory deps; codec is user-provided)
|
2026-01-23 05:00:57 +00:00
|
|
|
|
2025-11-25 00:39:17 +00:00
|
|
|
[dependencies]
|
2026-01-23 05:00:57 +00:00
|
|
|
getrandom = { version = "0.2", optional = true }
|
2026-02-08 16:18:39 +00:00
|
|
|
serde = { version = "1", features = ["derive"], optional = true }
|
2026-02-09 09:04:57 +00:00
|
|
|
tracing = { version = "0.1", optional = true }
|
2026-01-23 05:00:57 +00:00
|
|
|
crossbeam-queue = "0.3.12"
|
2026-02-06 11:25:37 +00:00
|
|
|
crossbeam-utils = "0.8.21"
|
feat: Stress tests, benchmarking, and non-failing queues and inboxes #3
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.
2026-01-26 07:14:00 +00:00
|
|
|
|
2026-02-06 11:25:37 +00:00
|
|
|
[dev-dependencies]
|
|
|
|
|
criterion = { version = "0.5", features = ["html_reports"] }
|
2026-02-13 07:11:24 +00:00
|
|
|
proptest = "1"
|
|
|
|
|
proptest-state-machine = "0.3"
|
|
|
|
|
swactor-std = { path = "crates/std" }
|
2026-02-06 11:25:37 +00:00
|
|
|
|
|
|
|
|
[[bench]]
|
|
|
|
|
name = "runtime_benchmarks"
|
|
|
|
|
harness = false
|
2026-02-06 14:45:19 +00:00
|
|
|
|
2026-02-09 14:02:40 +00:00
|
|
|
[[bench]]
|
|
|
|
|
name = "mt_benchmarks"
|
|
|
|
|
harness = false
|
2026-02-11 15:23:26 +00:00
|
|
|
|
2026-02-13 07:11:24 +00:00
|
|
|
[[bench]]
|
|
|
|
|
name = "hasher_benchmarks"
|
|
|
|
|
harness = false
|
|
|
|
|
|
2026-02-11 15:23:26 +00:00
|
|
|
[[example]]
|
|
|
|
|
name = "tcp_ping_pong"
|
|
|
|
|
required-features = ["transport"]
|