1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// DScale: deterministic distributed systems simulator
// Copyright (C) 2026 Konstantin Shprenger
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//! Deterministic & fast simulation framework for distributed systems.
//!
//! DScale provides a single-threaded or parallel, event-driven simulation engine
//! that models network latency, bandwidth constraints, and process execution.
//! Simulations are fully deterministic when seeded, making them reproducible
//! for testing and benchmarking.
//!
//! The main workflow:
//! 1. Define messages implementing [`Message`].
//! 2. Implement [`Process`] for your process logic.
//! 3. Configure the simulation with [`SimulationBuilder`].
//! 4. Call `run_X()` on the result of [`SimulationBuilder::build`].
/// Helper utilities for simulation processes.
/// Services to use with simulation: key-value store, process interaction, uid generator.
pub use log;
pub use rand;
pub use Message;
pub use MessagePtr;
pub use Pid;
pub use Process;
pub use SimulationBuilder;
pub use broadcast;
pub use broadcast_within_pool;
pub use choose_from_pool;
pub use list_pool;
pub use now;
pub use pid;
pub use schedule_timer_after;
pub use send_random;
pub use send_random_from_pool;
pub use send_to;
pub use unique_id;
pub use BandwidthConfig;
pub use GLOBAL_POOL;
pub use Distr;
pub use Seed;
pub use Jiffies;
pub use CompleteStatus;
pub use SimulationRunner;
pub use ThreadNumber;
pub use TimerId;