Предсказуемость
Конструкторы используются вместо extension-трейтов (C-CTOR)
Вся периферия, к которой HAL добавляет функциональность, должна оборачиваться в новый тип, даже если для этой функциональности не требуются дополнительные поля.
Следует избегать extension-трейтов, реализованных для сырой периферии.
Методы помечаются #[inline] там, где это уместно (C-INLINE)
Компилятор Rust по умолчанию не выполняет полную инлайнизацию через границы крейтов. Поскольку встраиваемые приложения чувствительны к неожиданному росту размера кода, #[inline] следует использовать, чтобы направлять компилятор следующим образом:
- Все «маленькие» функции следует помечать
#[inline]. Что считать «маленькой» функцией — вопрос субъективный, но, как правило, к маленьким относятся все функции, которые, как ожидается, компилируются в последовательности из одной или нескольких инструкций. - Функции, которые с большой вероятностью получат константные значения в качестве параметров, следует помечать как
#[inline]. Это позволяет компилятору вычислить даже сложную логику инициализации на этапе компиляции, если входные данные функции известны.