Перейти к основному содержимому
  1. Rust/

Директивы компилятора в Rust

312 слов·2 минут· loading · loading · ·
Rust Dev
about-rust - Эта статья часть цикла.
Часть 10: Эта статья

Введение
#

Сегодня мы поговорим о директивах компилятора, которые в языке 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 которая часто используется в проектах и надо уметь их использовать. Со временем вы встретите их большое множество, но будете уже вооружены.

about-rust - Эта статья часть цикла.
Часть 10: Эта статья

Связанные статьи

Псевдонимы типов в Rust или как сделать код понятнее
414 слов·2 минут· loading · loading
Rust Dev
Создание и работа с константами в Rust
495 слов·3 минут· loading · loading
Rust Dev
Области видимости в Rust
342 слов·2 минут· loading · loading
Rust Dev