EVE переезжает на Python 3 — и почему это может задеть твой кошелёк
Под каждым прыжком через врата, каждым ордером на рынке и каждой флотской дракой лежит очень много кода на Python. И до недавнего времени — на его версии, которую весь остальной мир похоронил шесть лет назад.
EVE вышла в 2003 году на Stackless Python — особой сборке языка, которая умела дёшево жонглировать тысячами задач одновременно. Именно поэтому один сервер держит толпу пилотов в одной системе.
Версию языка последний раз меняли в 2010 году. С тех пор выросло поколение, которое успело родиться, отучиться в школе и начать летать на фрегатах, а игра всё это время работала на том же Python 2.7. Работала, надо признать, отлично — потому и не трогали.
Проблема в том, что Python 2 официально закончился в 2020-м. Современные библиотеки, отладчики и профилировщики пишутся под тройку, и каждый год на старой версии означает, что ещё какой-то полезный инструмент становится недоступен, а вместо улучшения игры приходится самим латать то, что у всех остальных работает из коробки.
Масштаб, от которого делается неуютно
2 400 000 строк кода
20 000 файлов
Первый замер, впрочем, оказался приятным сюрпризом: 95,9% файлов уже нормально собираются обеими версиями языка. Того, что вообще отказывается запускаться, набралось около 3 300 строк:
- примерно 1500 старых команд печати
- около 800 чисел, записанных в древнем формате
- порядка 600 обработчиков ошибок в синтаксисе, который устарел ещё до выхода самой игры
- и 50 штук оператора «не равно», записанного значком настолько старым, что половина живых программистов его никогда не видела
Всё это чинится почти механически, инструментами, которые сообщество писало ровно для таких переездов.
А вот теперь интересное
Механическая часть — разминка. Настоящая работа впереди, и её примерно двадцать тысяч строк: код, который прекрасно собирается обеими версиями, но ведёт себя по-разному.
Классический пример разработчики приводят сами: деление. В старом языке «единица разделить на два» даёт ноль. В новом — ноль целых пять десятых.
А теперь вспомним, чем в игре бывают числа. Уроном. Координатами. Деньгами.
Двадцать тысяч мест, где может незаметно поехать арифметика, и каждое требует, чтобы человек посмотрел глазами и решил, как правильно. Автоматом такое не чинится.
Что это значит для нас
Официальная позиция: в ближайшее время — ничего, и это цель. Успех переезда измеряется тем, что игрок не заметил вообще ничего, кроме того, что кое-где стало пошустрее.
Первый этап уже выкачен на боевой сервер. Отдельно упомянуто, что готовят к переезду серверную часть агентских миссий — так что если ты как раз собрался ходить миссии, есть некоторая вероятность оказаться первым, кто заметит странность в награде или репутации.
Если что-то покажется неправильным — это ровно тот случай, когда репорт действительно полезен. При таком объёме ручной работы часть ошибок неизбежно найдут именно игроки.
Стоит ли переживать
Не особо. Гораздо интереснее другое: работа затевается не ради галочки, а ради того, чтобы игру стало можно нормально развивать. Свежие версии языка принесли самые заметные приросты скорости за всю его историю — а это упирается прямо в то, что болит: массовые сражения и рынок в час пик.
Двадцать три года на одной версии — это, если разобраться, комплимент тем, кто её тогда выбирал.