Приложение E: редакции
В главе 1 вы видели, что cargo new добавляет в файл Cargo.toml немного
метаданных о редакции. В этом приложении рассказывается, что это означает!
У языка Rust и компилятора шестинедельный цикл выпусков, а значит, пользователи получают постоянный поток новых возможностей. Другие языки программирования выпускают более крупные изменения реже; Rust выпускает меньшие обновления чаще. Через некоторое время все эти небольшие изменения накапливаются. Но от выпуска к выпуску бывает трудно оглянуться назад и сказать: «Ого, между Rust 1.10 и Rust 1.31 Rust сильно изменился!»
Примерно раз в три года команда 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.