Обновляем Cargo до последней версии: туториал для Rust-разработчика

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: почему ваш Cargo может быть устаревшим?

Вы когда-нибудь запускали cargo build, а в ответ получали странную ошибку? Или, может быть, новая фича Rust, которую вы так ждали, просто не работает? Знакомая ситуация: вы открываете Stack Overflow, ищете решение, а там советуют обновить Cargo. Но как это сделать? Ведь в Rust нет команды cargo update --self (и, честно говоря, это было бы слишком просто).

В этой статье мы разберём реальный вопрос с тысячами просмотров: "Is there a command to update Cargo to the latest official release?". Мы не просто дадим сухую команду — мы пройдём путь от проблемы до её решения, с примерами кода, лайфхаками и типичными ошибками. Если вы пишете на Rust хотя бы неделю, эта информация сэкономит вам часы гугления.

Поехали! 🚀

Что такое Cargo и почему его нужно обновлять?

Cargo — это не просто менеджер пакетов. Это сердце экосистемы Rust. Он отвечает за сборку, тестирование, публикацию крейтов и, конечно, за управление зависимостями. Каждый новый релиз Cargo приносит улучшения: более быструю компиляцию, новые команды, исправления безопасности.

Например, в версии Cargo 1.70 появилась встроенная поддержка cargo info, а в 1.75 — улучшенный вывод ошибок. Если вы застряли на старой версии, вы просто не получаете эти фичи. Более того, некоторые крейты начинают требовать свежий Cargo, и ваш проект перестаёт собираться.

Но есть нюанс: Cargo обновляется не сам по себе. Он привязан к компилятору rustc, а тот — к инструменту Rustup. Запомните эту связку: Rustup → rustc → Cargo. Обновляя одно, вы обновляете всё.

Почему нет команды cargo update --self?

Это частый вопрос на Stack Overflow. Дело в том, что Cargo — это не отдельная программа, а часть пакета Rust. Когда вы устанавливаете Rust через Rustup, вы получаете rustc, cargo и другие утилиты одной версией. Поэтому команда cargo update существует, но она обновляет зависимости вашего проекта, а не сам Cargo.

Вот типичная ошибка новичка:

# Это НЕ обновит Cargo
cargo update
# Это обновит только зависимости в Cargo.lock

Для обновления самого Cargo нужен другой подход. И он простой — используйте Rustup.

Основной способ: обновление через Rustup

Rustup — это официальный установщик и менеджер версий Rust. Если вы устанавливали Rust через rustup.rs, у вас уже есть этот инструмент. Если нет — самое время установить:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

После установки проверьте текущую версию:

rustc --version
cargo --version

Теперь, чтобы обновить всё до последнего стабильного релиза, выполните одну команду:

rustup update

Эта команда обновит rustc, cargo и все сопутствующие инструменты до последней стабильной версии. Вывод будет примерно таким:

info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2024-01-25, rust version 1.75.0 (8e3999b4e 2024-01-25)
info: downloading component 'cargo'
info: installing component 'cargo'

Готово! Теперь ваш Cargo — это последняя версия.

Проверка после обновления

Всегда полезно убедиться, что обновление прошло успешно. Напишите простую программу на Rust и соберите её:

// main.rs
fn main() {
    println!("Cargo version: {}", env!("CARGO_PKG_VERSION"));
    
    // Проверяем, что новая фича работает
    #[cfg(version_ge(1, 75))]
    println!("Вы используете Cargo 1.75+!");
}

Соберите и запустите:

cargo run

Если всё работает, вы в игре. Если нет — читайте дальше.

Альтернативные методы обновления Cargo

Иногда rustup update не подходит: например, вы используете нестандартный канал (nightly, beta) или хотите обновиться до конкретной версии. Давайте разберём эти случаи.

Обновление до конкретной версии

Допустим, вам нужна версия Cargo 1.70.0, потому что в ней исправили баг, который ломает ваш проект. Сделать это можно так:

rustup install 1.70.0
rustup default 1.70.0

После этого проверьте версию:

cargo --version  # Должно быть 1.70.0

Обновление только Cargo (без rustc)

Технически это возможно, но не рекомендуется. Cargo и rustc должны быть одной версии, иначе могут возникнуть несовместимости. Если вы всё же хотите рискнуть, можно скачать бинарник Cargo отдельно с GitHub-релизов, но это путь для экстремалов.

Обновление на Windows, macOS и Linux

Хорошая новость: команда rustup update работает одинаково на всех платформах. Но есть нюансы:

  • Windows: Если вы устанавливали Rust через установщик .exe (не Rustup), вам придётся переустановить его вручную. Лучше сразу перейти на Rustup.
  • macOS: Если вы использовали Homebrew (brew install rust), обновляйте через brew upgrade rust. Но опять же, Rustup — это стандарт.
  • Linux: Пакетные менеджеры (apt, yum) часто содержат устаревшие версии. Всегда используйте Rustup.

Типичные ошибки при обновлении Cargo

Даже с простой командой можно столкнуться с проблемами. Вот топ-3 ошибки, которые мы нашли на Stack Overflow:

Ошибка 1: "rustup: command not found"

Это значит, что Rustup не установлен или не добавлен в PATH. Решение:

# Проверьте, установлен ли Rustup
which rustup

# Если нет — установите
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# После установки перезагрузите терминал или выполните
source ~/.cargo/env

Ошибка 2: "error: could not rename package"

Иногда при обновлении Cargo на Windows возникает ошибка, связанная с блокировкой файлов. Решение: закройте все терминалы

Блоги

Рекомендаций по книгам