Статья посвящена одной из самых удивительных и трудноуловимых ошибок языка Kotlin. В 2016 году турецкий инженер заметил, что его сборка не проходит: компилятор выдаёт загадочную ошибку «
Unknown compiler message tag: INFO». При этом причина оказалась не в коде, а в… настройки локали! Оказалось, что на турецкой локали метод строкового преобразования toLowerCase() превращает «INFO» в «ınfo» (с безточечной «i») — и словарь мапы не находит соответствия. Дальше — ещё интереснее: спустя годы, с выходом корутин в Kotlin 1.3, ошибка проявилась снова при вызове функции
boxInt() — но машиной она была сгенерирована как boxİnt() (заглавная «İ») на машинах с турецкой локалью. И всё благодаря тому же проблемному
capitalize() без указания локали. В финале автор показывает, как разработчики Kotlin заменили все такие вызовы на версии с явно заданной локалью (Locale.US или аналог) и отключили использование старых функций toLowerCase()/toUpperCase(). Основная мысль: даже языковые конструкции вроде преобразования регистра строк, считавшиеся банальными, могут таить в себе серьёзные баги в глобальной среде. Это напоминание: при разработке — не игнорируйте культурно-языковые аспекты и локали. И да — турецкая локаль почти сломала Kotlin.
Статья: https://sam-cooper.medium.com/the-country-that-broke-kotlin-84bdd0afb237
Платформа: Android/Kotlin
