Spec-Zone.ru › Kotlin 1.8

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

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

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

В данном документе они обобщены, предоставляя справочные материалы для миграции с Kotlin 1.7.0 и 1.7.10 на Kotlin 1.7.20.

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

В этом документе мы вводим несколько видов совместимости:

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

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

  • поведенческий: изменение считается поведенчески несовместимым, если одна и та же программа демонстрирует различное поведение до и после применения изменения.

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

Язык

Попытка отката для исправления обработки ограничений

Проблема: 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

Последнее изменение: 10 января 2023 г.
Руководство по совместимости для Kotlin 1.8 Руководство по совместимости для Kotlin 1.7

© 2010–2023 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