2.0 KiB
Track 2 Rust Plan
Updated: 2026-04-11
Purpose
This note defines the initial Rust entry point for Track 2 in renunney.
Track 2 is not a line-by-line translation of Nunney's published threshold heuristic. It is the modern path: explicit threshold definitions, clearer simulation contracts, and a performant kernel.
Why Rust
Rust is the preferred Track 2 kernel language because it directly addresses the main engineering problems revealed by Track 1:
- heavy repeated stochastic simulation,
- threshold sweeps over many independent jobs,
- need for clear data structures and reproducible binaries,
- and a likely future need for Python bindings or service backends.
Initial Scope
The first Rust step is intentionally narrow:
- create a Rust workspace,
- define a Track 2 core crate,
- and encode threshold-centered abstractions rather than immediately porting the entire biological simulator.
This is the correct order because Track 2 should start from a clean statement of what is being estimated.
Current Crate
The initial crate is:
rust/track2-core
Current contents:
ExtinctionCountThresholdPointThresholdBracketThresholdEstimatebracket_threshold(...)midpoint_threshold(...)
These are placeholders for a modern threshold-estimation path where:
- extinction probability is explicit,
- bracketing is explicit,
- and the estimator is separate from the simulation kernel.
Next Rust Steps
- Add a simulation-state model for Track 2.
- Add a trait or function contract for producing extinction probabilities from repeated stochastic runs.
- Add a threshold search strategy that consumes those estimates.
- Add serialization-friendly input/output structs for orchestration.
- Only then start porting heavy simulation loops from Python.
Operational Targets
The repo Makefile should treat Rust as a first-class build/test surface:
make rust-testmake rust-check
That keeps Track 2 visible in daily workflow from the start.