Systems programming,
reimagined.
Joule combines the performance of C with the safety of Rust and the energy awareness of nothing that existed before it.
Core Language
Memory safety without garbage collection. The borrow checker prevents data races, use-after-free, and double-free at compile time.
fn transfer(data: Vec<u8>) { let owned = data; // moved // data is no longer valid here process(&owned); // borrow }
Exhaustive pattern matching with algebraic data types. The compiler guarantees every case is handled.
match sensor.read() {
Reading::Ok(val) => process(val),
Reading::Err(e) => log_error(e),
Reading::Timeout => retry(),
} Zero-cost abstractions via monomorphization. Trait-based polymorphism without vtable overhead in hot paths.
trait Sensor<T: Numeric> { fn read(&self) -> T; fn energy_cost(&self) -> Picojoules; }
8-effect bitfield tracks side effects at the type level. IO, allocation, network, compute — the compiler knows what your function does.
#[effects(compute, memory)] fn matrix_mul(a: &Mat, b: &Mat) -> Mat { // IO not allowed here }
Energy Features
Set maximum energy consumption per function, module, or program. The compiler rejects code that exceeds budgets.
Architecture-specific cost models for x86, ARM, RISC-V, SIMD. Energy estimates adapt to the target platform.
Cost models account for thermal state. Hot silicon costs more per instruction. The compiler factors this into budget checks.
Built-in profiler outputs per-function energy breakdown. Identify hot spots measured in joules, not just cycles.
Heterogeneous Compute
One language. Every accelerator. Joule targets CPU, GPU, TPU, and NPU from a single codebase with energy-aware dispatch.
Formal Verification
The Joule compiler is verified at four tiers. From Kani bounded model checking to runtime assertions, correctness is not optional.