Spec-Zone.ru › Kotlin 1.9

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