← Оглавление

0.2 Первое заклинание

Мастерская готова. Это почти не имеет значения - готовность лишь устанавливает тишину. Некоторые вещи существуют только когда их называют; в этой мастерской называние и есть создание. Первое заклинание всегда слишком короткое и всегда точное - именно оно превращает возможность в присутствие.

Что нужно

Мастерская оснащена, но tq ещё не существует. Не как файл, не как проект - вообще. Чтобы что-то построить, нужно сначала создать место, где это будет строиться. В мире Rust таким местом служит пакет - директория с исходным кодом и манифестом, который описывает, что здесь строится и как это называется.

Сборка

cargo new создаёт пакет. Одна команда, и структура готова:

cargo new tq

Cargo сообщит об успехе:

     Created binary (application) `tq` package

В текущей директории появится:

tq/
├── Cargo.toml
└── src/
    └── main.rs

Два файла. Один описывает пакет, другой содержит код.

Cargo.toml - манифест. Cargo читает его при каждой сборке:

[package]
name = "tq"
version = "0.1.0"
edition = "2024"

name - имя артефакта. version - его версия. edition - версия языка; 2024 актуальна для новых проектов и менять её без причины не нужно.

src/main.rs Cargo сгенерировал сам:

fn main() {
    println!("Hello, world!");
}

fn main() - точка входа: каждая Rust-программа начинает работу отсюда. println! выводит строку в терминал. Запускаем:

cargo run
   Compiling tq v0.1.0 (.../tq)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.42s
     Running `target/debug/tq`
Hello, world!

Cargo скомпилировал код и запустил результат. Пока tq говорит чужим голосом. Открой src/main.rs и замени строку:

fn main() {
    println!("Hello, tq!");
}
cargo run
   Compiling tq v0.1.0 (.../tq)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.38s
     Running `target/debug/tq`
Hello, tq!

Результат

tq существует. У него есть имя, есть место и есть голос - пока скромный, но настоящий.

Код tq для этой главы находится в 0-the-workshop/02-the-first-incantation/.


Lore: что делает cargo run

cargo run - это три шага подряд: проверка кода, компиляция и запуск результата. Если код не менялся с последней сборки, Cargo пропустит компиляцию: строка Finished появится почти мгновенно без Compiling.

Скомпилированный файл лежит в target/debug/tq. Его можно запустить напрямую:

./target/debug/tq

Результат тот же. cargo run просто избавляет от необходимости помнить этот путь.


Lore: edition

Rust выходит каждые шесть недель, но синтаксис языка меняется редко и только через editions - объявленные точки несовместимости. edition = "2024" означает, что пакет использует правила языка редакции 2024 года; это текущий дефолт начиная с Rust 1.85.

В старых проектах и большинстве книг ты встретишь edition = "2021" - это предыдущая редакция, которая остаётся полностью рабочей. Разные пакеты в одном проекте могут использовать разные edition, Cargo умеет их соединять без конфликтов. Для нового проекта 2024 - правильный выбор.