Spec-Zone.ru › Kotlin 2

Руководство по совместимости для Kotlin 1.7.20

Поддержание актуальности языка и Удобство обновлений — одни из основных принципов проектирования языка Kotlin. Первый означает, что конструкции, препятствующие развитию языка, следует удалять, а второй — что о таких изменениях следует заранее сообщать, чтобы переход на новую версию кода проходил как можно проще.

Обычно несовместимые изменения происходят только в выпусках с новыми возможностями, однако в этот раз нам пришлось внести два таких изменения в промежуточный выпуск, чтобы ограничить распространение проблем, вызванных изменениями в Kotlin 1.7.

В этом документе кратко описаны эти изменения и приведены рекомендации по переходу с Kotlin 1.7.0 и 1.7.10 на Kotlin 1.7.20.

Основные термины

В этом документе рассматриваются несколько видов совместимости:

  • исходная: изменение, нарушающее совместимость исходного кода, не позволяет скомпилировать код, который раньше компилировался без ошибок и предупреждений

  • бинарная: два бинарных артефакта считаются бинарно совместимыми, если их взаимная подмена не приводит к ошибкам загрузки или связывания

  • поведенческая: изменение считается нарушающим поведенческую совместимость, если одна и та же программа до и после его применения ведёт себя по-разному

Помните, что эти определения относятся только к чистому Kotlin. Совместимость кода Kotlin с точки зрения других языков (например, Java) не входит в область рассмотрения этого документа.

Язык

Отмена попытки исправить обработку ограничений proper

Проблема: KT-53813

Компонент: основной язык

Тип несовместимого изменения: исходная совместимость

Краткое описание: Отмена попытки исправить проблемы при обработке ограничений вывода типов, возникшие в версии 1.7.0 после реализации изменения, описанного в KT-52668. Эта попытка была предпринята в версии 1.7.10, но сама привела к новым проблемам.

Цикл устаревания:

  • 1.7.20: возврат к поведению версии 1.7.0

Запрет некоторых случаев вывода типов на основе билдера, чтобы избежать проблем при взаимодействии нескольких лямбд и разрешения перегрузок

Проблема: KT-53797

Компонент: основной язык

Тип несовместимого изменения: исходная совместимость

Краткое описание: В Kotlin 1.7 появилась возможность неограниченного вывода типов на основе билдера, благодаря которой такой вывод типов мог применяться даже к лямбдам, переданным в параметры без аннотации @BuilderInference. Однако это могло приводить к различным проблемам, если при вызове функции встречалось несколько таких лямбд.

В Kotlin 1.7.20 будет выдаваться ошибка, если для нескольких лямбд, соответствующие параметры которых не аннотированы @BuilderInference, требуется вывод типов на основе билдера для завершения вывода типов в лямбде.

Цикл устаревания:

  • 1.7.20: выдача ошибки для таких лямбд,
    -XXLanguage:+NoBuilderInferenceWithoutAnnotationRestriction можно использовать для временного возврата к поведению, существовавшему до версии 1.7.20

16 сентября 2024 г.
Что нового в Kotlin 1.7.0Руководство по совместимости для Kotlin 1.7.0

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/compatibility-guide-1720.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API