Functions
Defining execution blocks with C-style ergonomics and Rust-powered safety.
Functions are the primary unit of execution in Mist. They prioritize a traditional declaration order, placing the return type before the identifier to ensure signatures remain easy to scan in complex systems.
Basic Syntax
A standard function requires a return type, a name, and a body. Use the void keyword for functions that do not return a value.
i32 add(i32 a, i32 b) {
return a + b;
}
void log_status(str* message) {
println!("{}", message);
}Visibility & Exports
Functions are private to their module by default. The public modifier exports the function for cross-module access.
public i32 get_version() {
return 1;
}Mutable Parameters
Parameters follow Rust’s ownership rules but use Mist’s local variable syntax. Use mut to allow a function to modify its local binding of a value.
void update_score(i32 mut current_score, i32 bonus) {
current_score = current_score + bonus;
}Generics & Lifetimes
Mist integrates type abstraction and memory management into a single generic block. Lifetimes and type parameters share the < > bracket following the identifier.
public str'a* choose_longer<'a, T: Display>(str'a* s1, str'a* s2, T meta) {
println!("Metadata: {}", meta);
return if (s1.len() > s2.len()) { s1 } else { s2 };
}Attributes & Metadata
Metadata is applied via the #[attr] syntax directly above the declaration for compiler hints or testing.
#[inline]
public bool is_active(u32 id) {
return id > 0;
}Key Characteristics
- Scannable Signatures: Placing return types first allows for rapid identification of a function's output.
- Unified Abstraction: Lifetimes and type constraints are declared in one location, reducing signature noise.
- Zero-Cost Mapping: Every function maps directly to a Rust
fn, maintaining performance and ecosystem compatibility.