iowo/crates/executor/src/lib.rs

39 lines
1.1 KiB
Rust
Raw Normal View History

2024-01-01 06:30:04 +00:00
use rpl::instructions::Instruction;
use value::DynamicValue;
mod debug;
mod value;
/// The available executors
/// unused in early dev.
#[derive(Debug, Clone, Copy, clap::ValueEnum)]
pub enum Executors {
/// the debug executor is single threaded and really, *really* slow. And unstable. Don't use. Unless you're a dev working on this.
Debug,
/// the CPU executor primarily uses the CPU. Most likely most feature complete, and the fallback.
Cpu,
/// the Vulkan executor (obviously) uses vulkan. there's a good chance this isn't implemented yet as you're reading this.
Vulkan,
2023-12-13 17:13:43 +00:00
}
2024-01-01 06:30:04 +00:00
trait Executor {
fn execute(instruction: Instruction, input: Option<DynamicValue>) -> Option<DynamicValue>;
}
2023-12-13 17:13:43 +00:00
2024-01-01 06:30:04 +00:00
pub fn execute_all(instructions: Vec<Instruction>) {
let mut tmp = None;
for instruction in instructions {
tmp = debug::DebugExecutor::execute(instruction, tmp);
2023-12-13 17:13:43 +00:00
}
}
2024-01-01 06:30:04 +00:00
// scratchpad lol:
// execution structure:
// 1. take in rpl
// 2. analyse/validate structure against allowed executors
// 3. assign executors to instructions
// 4. optimize
// 5. prepare memory management patterns
// 6. run