Shanraq.org Shanraq.org
Внешние библиотеки и зависимости
IT

Rust: с нуля до своего органайзера Урок 48 из 55

Внешние библиотеки и зависимости

Урок 48. Подключить обоснованную библиотеку и проверить, что именно добавлено.

Текст переведён с помощью ИИ.

Предварительно: Cargo и модули. Сохраните проект органайзера отдельно: ниже маленькая учебная копия. Для первого запуска сеть не нужна.

Образ и опорная карта

Готовая деталь для велосипеда экономит работу, но у неё нужно проверить размер, изготовителя и способ установки. Зависимость — библиотека, которую наш проект подключает вместо написания её кода внутри программы. Крейт (crate) — единица кода и сборки Rust; crates.io — публичный каталог таких библиотек. Предел образа: библиотечный код выполняется с возможностями нашей программы, а каталог и номер версии сами по себе не подтверждают качество и безопасность.

потребность → выбор библиотеки и лицензии → запись в Cargo.toml → точный выбор Cargo.lock → сборка и проверка. Cargo.toml говорит, какие зависимости разрешены проекту. Cargo.lock фиксирует выбранные точные версии для воспроизводимой сборки приложения. В записи version = "1.2" строка — условие выбора совместимой версии, а не обязательно точная загруженная версия; правила совместимости Cargo надо читать отдельно. Поле license на странице крейта и в его источнике описывает условия использования: перед включением в распространяемую программу их нужно прочитать. cargo add добавляет запись, cargo tree показывает дерево подключений. Сеть понадобится при первом получении библиотеки с crates.io. Начнём с собственной крошечной библиотеки по пути: она даст настоящий опыт зависимости без чужого кода и сети.

Сначала проверьте функцию внутри одного файла

fn label(title: &str) -> String {
    format!("[{title}]")
}

fn main() {
    println!("{}", label("Встреча"));
}
[Встреча]

Этот первый пример работает без зависимости: label добавляет скобки к названию. В следующем шаге мы вынесем ровно эту функцию в отдельный крейт. В Cargo-проекте src/main.rs станет потребителем, а соседняя библиотека — зависимостью. path в Cargo.toml означает путь к локальному крейту; это не публикация на crates.io.

Вопросы для воспроизведения

  1. Чем условие версии в Cargo.toml отличается от выбранной версии в Cargo.lock?
  2. Зачем проверить лицензию и документацию перед подключением чужого кода?
  3. Почему зависимость по path работает без сети?

Задание

Обязательное. Сначала добавьте второй вызов label("План") в этот пример. Затем создайте учебную библиотеку organizer_label рядом с каталогом приложения: cargo new --lib organizer_label --vcs none создаёт библиотечный Cargo-проект без отдельного Git-репозитория. Перенесите label в organizer_label/src/lib.rs, добавьте pub перед fn для доступа извне. В Cargo.toml приложения укажите organizer_label = { path = "../organizer_label" } в [dependencies], а в main.rs вызывайте organizer_label::label. Запустите cargo run --offline; проверьте две строки. Команду cargo new выполняйте из родительской папки двух проектов; cargo run --offline — из папки приложения.

Ответы

Показать ответы

Если cargo new сообщает, что каталог уже существует, выберите другое имя для учебной библиотеки. В lib.rs нет main; функция должна быть pub fn label(title: &str) -> String. В основном файле вызов начинается с имени зависимости.

fn label(title: &str) -> String {
    format!("[{title}]")
}

fn main() {
    println!("{}", label("Встреча"));
    println!("{}", label("План"));
}
[Встреча]
[План]

Полный результат переноса в библиотеку

Папки organizer и organizer_label лежат рядом. Файл organizer_label/Cargo.toml уже создан командой cargo new --lib; его имя пакета должно быть organizer_label. В organizer_label/src/lib.rs:

pub fn label(title: &str) -> String {
    format!("[{title}]")
}

В organizer/Cargo.toml оставьте существующие поля [package] и добавьте в раздел [dependencies] эту строку:

organizer_label = { path = "../organizer_label" }

organizer/src/main.rs:

fn main() {
    println!("{}", organizer_label::label("Встреча"));
    println!("{}", organizer_label::label("План"));
}
[Встреча]
[План]

После проверки

После опыта с местным крейтом найдите подходящий крейт на crates.io: откройте документацию, версию, лицензию, дату обновления и список дополнительных зависимостей. При реальной необходимости команда cargo add ИМЯ запишет выбор в манифест и обновит lock-файл; cargo tree покажет цепочку. Не добавляйте библиотеку лишь ради этого упражнения. Для приложения сохраняйте Cargo.lock в Git. Официальное руководство Cargo по зависимостям.

Предыдущий урок · Оглавление

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Комментарии (0)

Пока нет комментариев. Будьте первым.