EVE Online начала первый этап перехода к Python 3
EVE Online переводят с Python 2.7 на Python 3: первый этап изменений опубликован на Tranquility после тестов на Singularity.
В официальном сообщении EVE Online рассказали о начале перехода кодовой базы игры к Python 3 в рамках инициативы EVE Evolved. Первый набор изменений, ранее проверенный игроками на тестовом сервере Singularity, опубликован на основном сервере Tranquility.
В сообщении подчеркивается, что переход должен быть незаметен для игроков. Ожидаемый эффект для пользователей описан как больше инструментов для исправления старых ошибок, пространство для новых функций и со временем более быстрые клиент и сервер EVE.
Почему EVE переводят на Python 3
По данным сообщения, значительная часть EVE Online работает на Python. Игра была запущена в 2003 году и построена на Stackless Python. В 2007 году был выполнен переход на Stackless Python 2.5, а в 2010 году — на Stackless Python 2.7. С тех пор версия Python в EVE не менялась.
Python 2.7 достиг официального конца жизненного цикла в 2020 году. В сообщении указано, что дальнейшее пребывание на Python 2 ограничивало бы развитие игры, а миграция на Python 3 должна сделать игру более здоровой и поддерживаемой.
Среди причин перехода также названа производительность: последние релизы Python 3 принесли серьезные улучшения производительности языка. При этом в сообщении отдельно уточняется, что сейчас нельзя сказать, где именно игроки получат прирост.
Еще одна причина — экосистема. Современные библиотеки, инструменты дебага и профилирования строятся на Python 3. По словам разработчиков, оставаться на Python 2 означает терять доступ к этим инструментам и тратить больше времени на поддержку кода вместо развития игры.
Что уже известно о масштабе работы
Кодовая база EVE содержит 2,4 миллиона строк Python-кода. Часть этого кода написана по стандартам эпохи Python 2.3 и 2.5, и интерпретатор Python 3 не может работать с ним без изменений.
Разработчики проверили около 20 тысяч Python-файлов на совместимость с интерпретаторами Python 2.7 и Python 3. По результатам первой проверки 95,9% файлов корректно собирались на обеих версиях, а около 3300 строк из 2,4 миллиона не обрабатывались интерпретатором Python 3.
В сообщении приведены примеры таких проблем: около 1500 старых выражений вывода информации, 800 длинных выражений чисел, 600 исключений, объявленных устаревшими еще до выхода EVE, и 50 использований знака <> для обозначения «не равно».
Отдельная сложность связана не с компиляцией, а с различиями в поведении. Разработчики нашли около 20 тысяч строк кода, которые корректно собираются, но могут выдавать разные результаты в Python 2 и Python 3. В качестве примера указано деление: в Python 2 выражение 1 / 2 дает 0, а в Python 3 — 0.5. В EVE такие значения могут относиться к урону, искам и координатам, поэтому эти случаи требуют ручного решения, а не только механического исправления.
Первый этап и дальнейшая работа
Первый этап перехода уже выполнен, но технически EVE все еще работает на Python 2.7. Для подготовки используется Python-Future, основанный на механизме 2to3. Он применяет автоматические исправления, которые совместимы с Python 2.7 и принимаются кодом Python 3.
Разработчики отмечают, что после запуска кода на Python 3 начинается более сложная часть: код может работать на обеих версиях, но вести себя по-разному. Поэтому механические проблемы были вынесены в первый этап, а дальнейшая работа будет сосредоточена на местах, где нужно решение человека.
В сообщении также приводится пример EVE Frontier: этот проект уже работает на современном движке Carbon и Python 3. Его миграция затронула 12 минорных версий Python за один шаг. При этом Tranquility имеет 23 года ежедневной работы с кодом и 23 года данных игроков, поэтому к переходу требуется осторожный подход.
Для игроков первый этап должен пройти без заметных изменений. Разработчики благодарят участников тестирования на Singularity к концу июля и просят продолжать играть обычным образом. Если что-то покажется необычным, в сообщении просят отправить баг-репорт через F12 внутри игры.
Дополнительно разработчики готовят агентские задания к переходу на Python 3, но игроки, согласно сообщению, не должны ничего заметить. Этот этап назван первым из многих: дальше предстоит построчно проверять код и принимать решения по несовместимым участкам.
Если хочешь быть на связи, подписывайся: Telegram, Twitch, YouTube. И залетай на стримы.
Всех вас, обнял, приподнял - до хруста! =)