Rust Code Generation
Generate memory-safe Rust simulation code with optional Cargo project scaffolding.
Features
Zero-dependency RK4: Built-in integrator with no external crates
Cargo project generation:
generate_project()creates full project structureCross-compilation: ARM, embedded, and
no_stdtargets``no_std`` support: For ARM Cortex-M microcontrollers
Type safety:
f64throughout with const generics for state dimensionCSV output: Results file for analysis
Basic Usage
Generate a standalone Rust file:
from mechanics_dsl.codegen.rust import RustGenerator
import sympy as sp
theta, g, l = sp.symbols('theta g l')
gen = RustGenerator(
system_name="pendulum",
coordinates=["theta"],
parameters={"g": 9.81, "l": 1.0},
initial_conditions={"theta": 0.5, "theta_dot": 0.0},
equations={"theta_ddot": -g/l * sp.sin(theta)}
)
gen.generate("pendulum.rs")
Cargo Project Generation
Generate a complete Cargo project with Cargo.toml and README.md:
gen.generate_project("./pendulum_rs")
This creates:
pendulum_rs/
├── Cargo.toml
├── README.md
└── src/
└── main.rs
Build and run:
cd pendulum_rs
cargo run --release
Embedded / no_std Mode
Generate code for ARM Cortex-M microcontrollers:
gen = RustGenerator(
system_name="pendulum",
coordinates=["theta"],
parameters={"g": 9.81, "l": 1.0},
initial_conditions={"theta": 0.5, "theta_dot": 0.0},
equations={"theta_ddot": -g/l * sp.sin(theta)},
embedded=True
)
gen.generate_project("./pendulum_embedded", embedded=True)
Build for ARM:
rustup target add thumbv7em-none-eabihf
cargo build --release --target thumbv7em-none-eabihf
Parameters
embedded: Generateno_stdcompatible code (default:False)use_nalgebra: Use the nalgebra crate for matrix operations (default:False)
Cross-Compilation
Raspberry Pi (aarch64):
rustup target add aarch64-unknown-linux-gnu
cargo build --release --target aarch64-unknown-linux-gnu
WebAssembly:
rustup target add wasm32-unknown-unknown
cargo build --release --target wasm32-unknown-unknown
Generated Code Structure
Constants: Parameters as
constwithf64types``equations_of_motion``: State derivative function
``rk4_step``: Fixed-size array RK4 integrator
``main``: File I/O and time-stepping loop
CSV output: Comma-separated results file
See Also
C++ Code Generation - C++ code generation
Arduino Code Generation - Arduino/embedded C generation
Code Generation Overview - All code generation targets