Spec-Zone.ru › Kotlin 1.7

Руководство по совместимости для 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

Последнее изменение: 26 сентября 2022 г.
Стабильность компонентов Kotlin (до 1.4) Руководство по совместимости для Kotlin 1.7

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