Введение#
Сегодня мы поговорим о директивах компилятора, которые в языке Rust называются атрибутами (attributes
). Это специальные аннотации в коде, которые указывают компилятору, как следует обрабатывать определённые участки исходного кода.
Говоря простыми словами: директива — это инструкция компилятору: “обрати внимание, здесь есть особое правило”.
Синтаксис директив#
Атрибуты оформляются следующим образом:
#[attribute]
#[attribute(value)]
#[attribute(key = "value")]
#[attribute(value1, value2)]
Также существуют глобальные атрибуты, которые применяются ко всему файлу:
#![attribute]
Пример: игнорирование предупреждений об неиспользуемых переменных#
Компилятор Rust по умолчанию “ругается”, если вы создаёте переменную, но не используете её:
let miles: i32 = 1266; // warning: unused variable
Чтобы проигнорировать (подавить) это предупреждение, можно использовать директиву #[allow(unused_variables)]
Применение к одной переменной#
#[allow(unused_variables)]
let miles: i32 = 1266;
Применение к нескольким переменным#
#[allow(unused_variables)]
let miles: i32 = 1266;
#[allow(unused_variables)]
let kilometers: i32 = 1300;
Применение ко всей функции#
#[allow(unused_variables)]
fn main() {
let miles: i32 = 1266;
let kilometers: i32 = 1300;
}
Применение ко всему файлу#
#![allow(unused_variables)]
fn main() {
let miles: i32 = 1266;
let kilometers: i32 = 1300;
}
Где еще применяются директивы?#
Rust предоставляет множество директив, каждая из которых решает свою задачу. Вот примеры полезных атрибутов:
#[allow(dead_code)]
Отключает предупреждение о неиспользуемом коде (например, функциях или структурах):
#[allow(dead_code)]
fn unused_function() {
println!("Эта функция не используется, но компилятор не ругается.");
}
#[cfg(target_os = "linux")]
Код будет скомпилирован только для Linux:
#[cfg(target_os = "linux")]
fn platform_specific() {
println!("Этот код скомпилируется только на Linux");
}
#[inline(always)]
Просит компилятор всегда инлайнить функцию:
#[inline(always)]
fn fast_function(x: i32) -> i32 {
x * 2
}
Варианты применения директив#
Директивы в Rust могут быть применены к:
- переменным
- функциям
- структурам
- модулям
- impl блокам
- трейтам
- константам
- ко всему файлу (через
#![...]
)
Вывод#
Директивы компилятора или атрибуты - это удобная фитча языка Rust которая часто используется в проектах и надо уметь их использовать. Со временем вы встретите их большое множество, но будете уже вооружены.