$ sudo teach IT
Модуль 2 · Cargo.toml

Секция [package]

Cargo.toml — манифест вашего проекта. Секция [package] описывает кто вы, что за проект и для кого он.

📖 Теория 🕐 ~20 минут
⚡

Обязательные поля

Минимально рабочий Cargo.toml выглядит так — именно это создаёт cargo new:

Cargo.toml
[package]
name = "my_app"
version = "0.1.0"
edition = "2021"
name
Имя крейта. Только строчные буквы, цифры и дефисы. Именно это имя появится на crates.io при публикации. Дефисы в имени автоматически заменяются на подчёркивания внутри Rust-кода (my-app → используется как my_app).
version
Версия проекта в формате Semantic Versioning (SemVer): MAJOR.MINOR.PATCH. Подробнее о SemVer — ниже.
edition
Версия языка Rust: 2015, 2018, 2021. Влияет на некоторые синтаксические правила. Всегда используйте 2021 для новых проектов — это последняя edition с улучшенным синтаксисом.
📝

Необязательные, но важные поля

Для личных проектов хватит трёх обязательных полей. Для публикации на crates.io — нужны дополнительные. Вот полный пример:

Cargo.toml · Полная секция [package]
[package]
name = "my_awesome_tool"
version = "1.2.3"
edition = "2021"

authors = ["Иван Петров <ivan@example.com>"]
description = "Инструмент для автоматизации задач"
license = "MIT OR Apache-2.0"
readme = "README.md"
homepage = "https://example.com"
repository = "https://github.com/user/my_awesome_tool"
keywords = ["cli", "automation", "tool"]
categories = ["command-line-utilities"]
exclude = ["tests/fixtures/*", "*.log"]
authors

Список авторов. Формат: "Имя <email>". Отображается на crates.io.

description

Краткое описание (до 140 символов). Обязательно для публикации на crates.io.

license

Лицензия в формате SPDX. Обязательно для публикации. Самые распространённые: "MIT", "Apache-2.0", "MIT OR Apache-2.0" (двойная лицензия — стандарт в Rust-экосистеме).

keywords

Ключевые слова для поиска на crates.io. Максимум 5 штук.

categories

Категории из фиксированного списка crates.io. Максимум 5. Полный список: crates.io/category_slugs.

exclude / include

exclude — паттерны файлов, которые не включаются в публикуемый пакет. include — явный список того, что включать. Используйте одно из двух, не оба.

🔢

Semantic Versioning (SemVer)

Cargo строго следует SemVer. Формат версии: MAJOR.MINOR.PATCH. Каждая цифра означает конкретное обещание пользователям вашей библиотеки:

MAJOR
Несовместимые изменения API. Пользователям придётся менять свой код. Начинается с 1 только когда API стабилен. 0.x.y — нестабильный API.
MINOR
Новая функциональность, обратно совместимая. Добавили новую функцию — увеличиваем MINOR. Старый код продолжает работать.
PATCH
Исправление багов, обратно совместимое. Ничего не сломали, только починили. Обновляться безопасно.
Примеры правильного версионирования
0.1.0  → первая рабочая версия, API ещё может меняться
0.1.1  → починили баг
0.2.0  → добавили новые функции (несовместимости нет)
1.0.0  → API стабилен, готово к продакшену
1.0.1  → bugfix
1.1.0  → новая фича, всё совместимо
2.0.0  → сломали совместимость (переименовали функции, убрали старый API)
💡 Cargo использует SemVer не только для вашего version — но и для указания требований к версиям зависимостей. Именно поэтому важно понимать правила: от них зависит что Cargo скачает при cargo add.
📌 Что важно запомнить
→ Три обязательных поля: name, version, edition
→ edition = "2021" для всех новых проектов
→ Версия по SemVer: MAJOR.MINOR.PATCH — каждая цифра несёт обязательство
→ Для публикации нужны: description, license, keywords, categories
→ 0.x.y = нестабильный API; 1.0.0 = стабилен

Тест

3 вопроса