Спецпроекты

Открытое ПО Искусственный интеллект

«Яндекс» представил открытое решение на базе большой языковой модели для ускорения миграции iOS-кода на Swift

Разработчики «Яндекса» выложили в открытый доступ первое решение на базе большой языковой модели (LLM) для автоматизации миграции iOS-проектов с Objective-C на Swift — современный язык программирования Apple. Оно решает проблему длительной миграции в крупных проектах, накопивших сотни тысяч строк устаревшего кода, ускоряя процесс в 2,5 раза и позволяя разработчикам переключиться с монотонной рутины на проверку качества. Подход будет полезен любым iOS-проектам с такой же задачей. Об этом CNews сообщил представитель «Яндекса».

Решение разработано при миграции кодовой базы «Яндекс Браузера». Как и тысячи компаний, чьи приложения появились до 2018 г., команда столкнулась с проблемой переписывания кода: огромные затраты времени и ресурсов, неизбежные при ручной работе ошибки, а также необходимость параллельно развивать проект. В результате за пять лет удалось сократить технический долг только наполовину.

Внедрение нового подхода на базе LLM не только ускорило миграцию, но и позволило сместить фокус разработчиков с монотонного переписывания кода на валидацию корректности миграции и выполнение сложного рефакторинга. За два месяца команда интегрировала 106 пул-реквестов, переписав около 97,5 тыс. строк устаревшего кода и более двух тысяч файлов — объем, который при ручной работе занял бы больше года.

В отличие от существующих инструментов-конвертеров, не учитывающих контекст проекта, разработанная система использует LLM, способную понимать не только грамматику языка, но и архитектуру конкретного проекта. В основе подхода — система из четырех специализированных промптов, каждый из которых отвечает за определенный этап. Первый определяет оптимальный порядок миграции файлов, переписывает код и проверяет результат через компиляцию и тесты. Второй адаптирует полученный код под лучшие практики Swift. Третий проводит автоматическую проверку по чек-листу: заголовки файлов, корректность замены типов, соответствие стандартам. Четвертый очищает код от устаревших аннотаций, когда необходимость в них отпадает.

Для проверки универсальности подхода команда применила его к стороннему проекту — приложению Wikipedia для iOS. Был успешно мигрирован один из пакетов, отвечающий за форматирование wiki-разметки, и открыт пул-реквест в репозиторий проекта. Эксперимент продемонстрировал, что подход не привязан к специфике монорепозитория «Яндекса». Чтобы внедрить подобное решение в своём проекте, достаточно заполнить конфигурационный шаблон, который также выложен в открытый доступ. В него нужно внести архитектуру проекта, систему сборки, стандарты кода, структуру тестов, а также словарь типов и паттернов для замены. Далее важно определить правильный порядок миграции: начинать с компонентов, которые не зависят от старого кода — так называемых листьев графа зависимостей. Это позволит писать чистый Swift без промежуточных слоёв совместимости.

Регионы переходят на оптические диски для долговременного хранения документов
Регионы переходят на оптические диски для долговременного хранения документов Цифровизация

Для сохранения качества кода в процессе миграции можно использовать дополнительный промпт для генерации интеграционных тестов.

Готовые промпты автоматически подгружаются в контекст диалога в большинстве современных агентских IDE, поэтому решение совместимо с популярными инструментами для работы с кодом.

Все промпты, скрипты и шаблоны уже доступны на GitHub и SoucreCraft.

Короткая ссылка