Files
mist-website/content/docs/components/functions.mdx
T
2026-05-14 01:21:34 +02:00

69 lines
2.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Functions
description: Defining execution blocks with C-style ergonomics and Rust-powered safety.
icon: SquareFunction
---
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.
```mist
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 `pub` modifier exports the function for cross-module access.
```mist
pub 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.
```mist
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.
```mist
pub 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.
```mist
#[inline]
pub 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.