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 - правильный выбор.