TGViewer
Rust Rust @rust_code · 8.91K subscribers
Post #1187 4.85K
⚡️ Rust совет для библиотек: как не ломать API

Если вы публикуете библиотеку, одна из главных проблем -
как добавлять поля в struct, не ломая код пользователей.

Решение - комбинация:

• #[non_exhaustive]
• приватное поле

Что это даёт:

- Запрещает создавать struct через прямой литерал { ... }
- Заставляет пользователей использовать ваш конструктор
- Позволяет добавлять новые поля позже
- Не ломает существующий код

Без этого:
- добавили поле → breaking change
- пользователи не могут собрать проект

С этим:
- API остаётся стабильным
- можно спокойно развивать библиотеку

Пример


#[derive(Debug)]
#[non_exhaustive]
pub struct Config {
pub timeout: Duration,
pub retries: usize,

// Блокирует создание через Config { ... }
_private: (),
}

impl Config {
pub fn new(timeout: Duration, retries: usize) -> Self {
Self {
timeout,
retries,
_private: (),
}
}
}



#[non_exhaustive] + приватное поле =более стабильный API.
  • 🔥 49
  • ❤ 7
  • 👍 2
  • 🥰 2
  • 🤗 1
  • 🗿 1
More from @rust_code
  1. Sep 24, 2026🦀 Как доказать, что Rust-код работает правильно: Amazon рассказывает о Verus Rust предотв…
  2. Sep 24, 2026❌В IT сейчас кризис джунов, но только не в кибербезе. ❗️Рынку не хватает 50 000 специалист…
  3. Sep 24, 2026Rust без аллокатора: `fff` снизил пиковое потребление памяти через `mmap` Во время тестиро…
  4. Sep 23, 2026photo post
  5. Sep 20, 2026Zero cost
  6. Sep 19, 2026🦀 NVIDIA официально идёт в native GPU programming на Rust Теперь CUDA Rust позволяет писа…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →