~/VibeHandbook

Языки

rust-lang.org

Rust

Что это

Rust — это статически типизированный компилируемый системный язык, ориентированный на безопасность работы с памятью без сборщика мусора. Его модель владения и заимствования гарантирует на этапе компиляции, что вы не столкнётесь с гонками данных или ошибками использования после освобождения, обеспечивая производительность уровня C с куда меньшим числом подводных камней.

Сильные стороны

  • Безопасность памяти и потоков, обеспечиваемая на этапе компиляции, без GC.
  • Производительность на уровне C и C++.
  • Богатая система типов, сопоставление с образцом и первоклассный пакетный менеджер (Cargo).
  • Превосходные ошибки компилятора, которые объясняют, что пошло не так и как это исправить.

Компромиссы

  • Крутая кривая обучения — на усвоение работы borrow checker уходит немало времени.
  • Писать медленнее и компилировать дольше, чем на языках более высокого уровня.
  • Избыточен для простых скриптов или быстрых прототипов.
  • Асинхронный Rust и обобщённый код с обилием времён жизни могут стать по-настоящему запутанными.

Когда обращаться

Обращайтесь к Rust, когда производительность, надёжность и контроль над ресурсами важны одновременно: системное ПО, игровые движки, инструменты командной строки, WebAssembly, встраиваемые системы или сервисы, критичные к производительности. Он плохо подходит для одноразовых скриптов, где гарантии безопасности не оправдывают трений.

Подходит для vibe coding

ИИ-ассистенты генерируют правдоподобный Rust, но настоящий арбитр — borrow checker; ожидайте, что придётся вставлять ошибки компилятора обратно и итерировать, и это работает хорошо, потому что диагностика Rust точна, а модель может действовать на её основе. Направьте ИИ опираться на Result и ? для обработки ошибок, предпочитать владеющие типы или ясные заимствования вместо борьбы с временами жизни, а также явно предлагать крейты (с записями в Cargo.toml). Просите тесты cargo test, чтобы вы могли проверить безопасность и поведение. Когда модель предлагает unsafe, возразите и сначала попросите безопасную альтернативу.

fn main() {
    let nums = vec![3, 1, 4, 1, 5, 9, 2, 6];
    let sum: i32 = nums.iter().filter(|&&n| n % 2 == 0).sum();
    println!("Sum of evens: {sum}");
}