blob: e3181856aac0927edd93e2811b14d6e51dbb0f64 [file] [log] [blame] [view] [edit]
# Predictability
<a id="c-ctor"></a>
## Constructors are used instead of extension traits (C-CTOR)
All peripherals to which the HAL adds functionality should be wrapped in a new
type, even if no additional fields are required for that functionality.
Extension traits implemented for the raw peripheral should be avoided.
<a id="c-inline"></a>
## Methods are decorated with `#[inline]` where appropriate (C-INLINE)
The Rust compiler does not by default perform full inlining across crate
boundaries. As embedded applications are sensitive to unexpected code size
increases, `#[inline]` should be used to guide the compiler as follows:
* All "small" functions should be marked `#[inline]`. What qualifies as "small"
is subjective, but generally all functions that are expected to compile down
to single-digit instruction sequences qualify as small.
* Functions that are very likely to take constant values as parameters should be
marked as `#[inline]`. This enables the compiler to compute even complicated
initialization logic at compile time, provided the function inputs are known.