Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Приложение E: редакции

В главе 1 вы видели, что cargo new добавляет в файл Cargo.toml немного метаданных о редакции (edition). В этом приложении разберёмся, что это значит!

Язык Rust и его компилятор выходят по шестинедельному циклу, то есть пользователи постоянно получают новые возможности. Другие языки программирования выпускают крупные изменения реже; Rust выпускает небольшие обновления чаще. Со временем все эти мелкие изменения накапливаются. Но от релиза к релизу трудно оглянуться назад и сказать: «Ого, между Rust 1.10 и Rust 1.31 язык сильно изменился!»

Примерно раз в три года команда Rust выпускает новую редакцию Rust. Каждая редакция собирает накопившиеся возможности в цельный пакет с полностью обновлёнными документацией и инструментами. Новые редакции выходят в рамках обычного шестинедельного цикла релизов.

Для разных людей редакции значат разное:

  • Для тех, кто активно пишет на Rust, новая редакция собирает постепенные изменения в понятный пакет.
  • Для тех, кто на Rust не пишет, новая редакция — сигнал, что в языке появились крупные улучшения и, возможно, на Rust стоит взглянуть ещё раз.
  • Для тех, кто разрабатывает сам Rust, новая редакция — общая точка сбора для всего проекта.

На момент написания книги доступны четыре редакции Rust: Rust 2015, Rust 2018, Rust 2021 и Rust 2024. Эта книга написана с использованием идиом редакции Rust 2024.

Ключ edition в Cargo.toml указывает, какую редакцию компилятор должен использовать для вашего кода. Если ключа нет, ради обратной совместимости Rust использует редакцию 2015.

Каждый проект может выбрать редакцию, отличную от редакции по умолчанию 2015. Редакции могут содержать несовместимые изменения — например, новое ключевое слово, которое конфликтует с идентификаторами в коде. Но пока вы сами не перейдёте на новую редакцию, ваш код будет компилироваться, даже если вы обновите версию компилятора Rust.

Любая версия компилятора Rust поддерживает все редакции, существовавшие до её выхода, и умеет компоновать вместе крейты любых поддерживаемых редакций. Редакции влияют только на то, как компилятор изначально разбирает код. Поэтому, если ваш проект на Rust 2015, а одна из зависимостей — на Rust 2018, проект скомпилируется и сможет использовать эту зависимость. Обратная ситуация — проект на Rust 2018, а зависимость на Rust 2015 — тоже работает.

Уточним: большинство возможностей доступно во всех редакциях. Разработчики на любой редакции Rust будут получать улучшения с каждым новым стабильным релизом. Однако в некоторых случаях — в основном когда добавляются новые ключевые слова — отдельные возможности могут быть доступны только в более поздних редакциях. Чтобы ими воспользоваться, придётся сменить редакцию.

Подробнее — в The Rust Edition Guide. Это полноценная книга, в которой перечислены различия между редакциями и объяснено, как автоматически перевести код на новую редакцию с помощью cargo fix.