RU UA
Технологии

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 штук оператора «не равно», записанного значком настолько старым, что половина живых программистов его никогда не видела

Всё это чинится почти механически, инструментами, которые сообщество писало ровно для таких переездов.

А вот теперь интересное

Механическая часть — разминка. Настоящая работа впереди, и её примерно двадцать тысяч строк: код, который прекрасно собирается обеими версиями, но ведёт себя по-разному.

Классический пример разработчики приводят сами: деление. В старом языке «единица разделить на два» даёт ноль. В новом — ноль целых пять десятых.

А теперь вспомним, чем в игре бывают числа. Уроном. Координатами. Деньгами.

Двадцать тысяч мест, где может незаметно поехать арифметика, и каждое требует, чтобы человек посмотрел глазами и решил, как правильно. Автоматом такое не чинится.

Что это значит для нас

Официальная позиция: в ближайшее время — ничего, и это цель. Успех переезда измеряется тем, что игрок не заметил вообще ничего, кроме того, что кое-где стало пошустрее.

Первый этап уже выкачен на боевой сервер. Отдельно упомянуто, что готовят к переезду серверную часть агентских миссий — так что если ты как раз собрался ходить миссии, есть некоторая вероятность оказаться первым, кто заметит странность в награде или репутации.

Если что-то покажется неправильным — это ровно тот случай, когда репорт действительно полезен. При таком объёме ручной работы часть ошибок неизбежно найдут именно игроки.

Стоит ли переживать

Не особо. Гораздо интереснее другое: работа затевается не ради галочки, а ради того, чтобы игру стало можно нормально развивать. Свежие версии языка принесли самые заметные приросты скорости за всю его историю — а это упирается прямо в то, что болит: массовые сражения и рынок в час пик.

Двадцать три года на одной версии — это, если разобраться, комплимент тем, кто её тогда выбирал.

← Ко всем новостям

Ещё почитать