Когда заканчивается срок службы выпусков Rust, таких как 2015 год?

#rust

#Ржавчина

Вопрос:

У Rust разные выпуски. Самым старым изданием является Rust 2015. Текущая версия — Rust 2018. Запланированный выпуск Rust на 2021 год. Когда срок службы Rust 2015 закончится и не будет поддерживаться rustc ?

Комментарии:

1. связанные: internals.rust-lang.org/t /…

2. Официальные документы утверждают, что все они будут продолжать получать обновления doc.rust-lang.org/edition-guide/editions/index.html Just to be clear: most features will be available on all editions. People using any edition of Rust will continue to see improvements as new stable releases are made.

3. @Gus Это выглядит как правильный ответ, а не просто комментарий

Ответ №1:

Официальные документы утверждают, что официальные издания будут продолжать получать обновления.

Совместимость

Когда новая версия становится доступной в компиляторе, ящики должны явно выбрать ее, чтобы воспользоваться всеми преимуществами. Этот выбор позволяет выпускам содержать несовместимые изменения, такие как добавление нового ключевого слова, которое может конфликтовать с идентификаторами в коде, или превращение предупреждений в ошибки. Компилятор Rust будет поддерживать все выпуски, существовавшие до выпуска компилятора, и может связывать ящики любых поддерживаемых выпусков вместе. Изменения в выпуске влияют только на то, как компилятор изначально анализирует код. Поэтому, если вы используете Rust 2015, а одна из ваших зависимостей использует Rust 2018, все работает просто отлично. Также работает обратная ситуация.

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

(курсив добавлен)

Ответ №2:

Выпуск Rust вне времени, реализация попадет в EOL. Это из Programming Rust Second Edition,

Любой код, скомпилированный на Rust 1.0, должен так же хорошо компилироваться на Rust 1.50 или, если он когда-либо будет выпущен, на Rust 1.900. […] Rust обещает, что компилятор будет принимать все существующие версии языка, и программы могут свободно смешивать произведения, написанные в разных редакциях.

Итак, в основном rustc находится под semvar *. Когда выпуск Rust выходит из употребления, rustc оставляет за собой право прекратить поддержку этого конкретного выпуска Rust. Когда это произойдет, они обновят основную версию, и у нас будет версия rustc 2.0.

До тех пор предположим, что все выпуски Rust будут поддерживаться rustc.


Это не совсем так, есть некоторые исключения, подобные тому, которое упоминается в сообщении в блоге, анонсирующем Rust 2021

Вместо этого мы решили добавить реализацию trait во все выпуски (начиная с Rust 1.53.0), но добавить небольшой хак, чтобы избежать поломок до Rust 2021. В коде Rust 2015 и 2018 компилятор по-прежнему будет преобразовывать array.into_iter() в (amp;array).into_iter(), как и раньше, как если бы реализация признака не существовала. Это относится только к синтаксису .into_iter() вызова метода. Это не влияет на какой-либо другой синтаксис, такой как for e in [1, 2, 3] , iter.zip([1, 2, 3]) или IntoIterator::into_iter([1, 2, 3]) . Они начнут работать во всех выпусках.

Это означает, что вы можете написать код в Rust 1.53.0 для Eddition 2018, который не работает в коде, скомпилированном в Rust 1.52.0. Как бы это ни было вероятно, я не уверен.

Комментарии:

1. Цитаты, которые вы приводите, хороши; но я думаю, что ваша интерпретация их не совсем верна. Rust, как проект, не «оставляет за собой право отказаться от поддержки»; скорее, обещание обратной совместимости предназначено специально для запрета этого. Другими словами, да, Rust следует за semver («версия» как в «версии»), но в рамках проекта существует твердое намерение никогда не выпускать «rustc версии 2.0». Я не совсем понимаю ваш пример Rust 2021. Выпуски не «замораживаются», по мере добавления новых функций rustc разрешает код, который ранее не компилировался, но это не критическое изменение.