Приложение E: Редакции (Editions)
В Главе 1 вы видели, что cargo new добавляет немного метаданных в ваш файл Cargo.toml о редакции. Это приложение рассказывает, что это значит!
Язык 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.