EVE Online начала переход кодовой базы на Python 3
EVE Online начала миграцию с Python 2.7 на Python 3: первый этап протестирован на Singularity и развернут на Tranquility.
EVE Online начала переход на Python 3 в рамках инициативы EVE Forever. В официальном сообщении говорится, что под прыжками через врата, рыночными ордерами и флотскими боями работает большой объем Python-кода, который поддерживал New Eden более двух десятилетий.
Цель миграции сформулирована как незаметный для игроков процесс: кроме отдельных случаев, когда что-то может работать плавнее, изменения не должны ощущаться. Первый набор изменений уже тестировали на Singularity, после чего он был развернут на Tranquility. Это названо началом длительного процесса.
Почему EVE Online переходит на Python 3
EVE Online вышла в 2003 году и была построена на Stackless Python. В сообщении отмечается, что легковесные tasklets этой версии Python позволяли одному серверному узлу обслуживать тысячи пилотов одновременно. Fenris Creations не только использовала Stackless, но и стала одним из его значимых участников.
В 2007 году EVE переходила на Stackless Python 2.5, а в 2010 году — на Stackless Python 2.7. С тех пор версия Python в игре не менялась. Python 2.7 официально завершил жизненный цикл в 2020 году, но EVE оставалась на этой версии, поскольку она была достаточно надежной, а крупная миграция считалась потенциально рискованной.
По официальному сообщению, дальнейшее сохранение Python 2 все сильнее ограничивает EVE. Переход на Python 3 должен дать более поддерживаемую основу, современные библиотеки, отладчики и профилировщики, а также инструменты, которые помогают быстрее находить и исправлять проблемы.
Отдельно упомянута производительность: в свежих версиях Python 3 появились крупные ускорения для языка. В EVE Online это рассматривают как основу для более быстрой работы игры со временем, но точные последствия пока не названы.
Что меняется в языке и коде
В сообщении перечислены изменения Python 3, важные для кодовой базы EVE. Текст обрабатывается через единый тип строк, что должно сделать локализацию надежнее. Целые числа больше не имеют произвольных ограничений размера и растут автоматически при необходимости. Система классов Python унифицирована, что убирает старое поведение и делает объектно-ориентированный код более последовательным.
При этом все данные, записанные кодом на Python 2, должны корректно читаться под Python 3. В сообщении отдельно перечислены персонажи, skill points, активы в ангарах и ISK в кошельках.
Достижимость перехода связывают с EVE Frontier: этот проект уже запускает Carbon engine на современном Python 3. Однако для Tranquility задача сложнее из-за 23 лет накопленного кода и реальных данных игроков. Также указывается, что Tranquility должен продолжать работать 23,75 часа из каждых 24.
Первый этап миграции
Кодовая база EVE включает 2,4 млн строк Python. Значительная часть кода старше Python 2.7 и написана по стандартам эпохи 2.3 и 2.5, которые Python 3 не разбирает.
Миграция будет идти в несколько этапов. Часть этапов использует инструменты сообщества Python, включая Python Futurize, другие будут сосредоточены на особенностях EVE. На ключевых этапах планируются тесты на Singularity, где можно наблюдать поведение обновленных частей системы в условиях, близких к Tranquility.
Текущий первый этап делает код готовым к Python 3, пока он все еще работает на Python 2.7. Для этого используется Python-Future, основанный на механизме переписывания кода 2to3. Инструмент применяет автоматические исправления устаревших шаблонов в формы, которые принимают и Python 2.7, и Python 3.
После того как код сможет работать под обеими версиями, начнется более сложная часть: участки, которые компилируются в обеих версиях, но ведут себя по-разному.
Оценка объема работы
Для оценки прогресса каждый из примерно 20 тысяч Python-файлов компилируется реальным интерпретатором Python 2.7 и реальным интерпретатором Python 3. В сообщении это названо способом определить, разбирается ли код.
Первое сканирование показало, что 95,9% файлов уже компилируются под обеими версиями. Строк, использующих синтаксис, который Python 3 отклоняет, оказалось около 3300 из 2,4 млн.
Среди найденных блокирующих случаев указаны примерно 1500 старых операторов print, около 800 числовых литералов long вида 123L, примерно 600 старых записей исключений и 50 использований <> как записи «не равно».
Синтаксический разбор назван простой частью. То же сканирование насчитало примерно 20 тысяч строк, которые компилируются в обеих версиях, но в Python 3 ведут себя иначе. Пример из сообщения — деление: в Python 2 выражение 1 / 2 дает 0, а в Python 3 — 0,5. В EVE такие числа могут относиться к урону, ISK или координатам, поэтому для таких строк требуется решение человека, а не механическая правка. Эта работа относится ко второму этапу.
Что игроки должны заметить
В краткосрочной перспективе игроки не должны заметить изменений: первый этап задуман как невидимый. В долгосрочной перспективе переход описан как инфраструктурная основа для будущего EVE Online, включая более быстрый интерпретатор для флотских боев и рыночных хабов, современные инструменты для поиска и исправления ошибок и кодовую базу, с которой новым разработчикам проще работать.
В конце июля первый набор изменений проверяли на Singularity. Теперь эти изменения развернуты на Tranquility. Также готовится backend агентских миссий для Python 3, и в сообщении подчеркивается, что игроки не должны ничего заметить.
Официальная новость описывает это как первый шаг из многих: механическая очистка кода названа простой частью, а основная работа с построчным чтением кода еще впереди.
Если хочешь быть на связи, подписывайся: Telegram, Twitch, YouTube. И залетай на стримы.
Всех вас, обнял, приподнял - до хруста! =)