Как вы уже наверное знаете, технологической основой EVE Online является язык программирования Stackless Python. Когда мы начинали разрабатывать EVE, мы могли рассчитывать только на карманные часы, Stackless Python 1.5 и диск с записями группы Randver. Тогда Stackless Python оперировал так называемыми "продолжениями" ("Continuations"), использовать которые было весьма мудрено.
Позже мы перешли на Stackless Python 2.0. Кроме изменений в родительском языке - Питоне - вариант Stackless включил в себя "тасклеты" ("Tasklets") и "каналы" ("Channels"), которые мы изучили и полюбили.
С тех пор мы следим за развитием языка. Мы обновлялись вслед за выходом версий Python 2.1, 2.3 и 2.5.
Из-за объёма работ по переходу на новые версии - как в плане сложностей в реинтеграции кода, так и в плане количества времени разработчиков - мы пропускали все остальные версии. Но каждая новая версия приносит с собой и плюсы:
- новые возможности языка, которые делают разработку проще и эффективнее,
- библиотека Питона постоянно улучшается в кол-ве фич и в быстродействии,
- сам язык становится быстрее,
- разработка ведётся на текущей версии языка.
Подобные миграции - непростое дело. Множество модификаций языка должны рассмотрены. Масса кода на C должны быть перекомпилирована. В массу кода на Питоне должны быть внесены мелкие изменения.
Из-за этого мы очень внимательно следим за тем, чтобы не появилось никаких неожиданных проблем. Мы проводим масштабное регрессионное тестирование, чтобы удостовериться, что в игре всё работает также, как и раньше, и тестирование производительности, чтобы игра не работала медленнее чем раньше.
Пример: мы обнаружили, что некоторые текстовые поля ведут себя некорректно. Пользователь вводит цифру процента 5.55%, но этот процент округляется вниз - 5.5% - а не вверх, как должно быть. Выяснилось, что в Питоне 2.7 был немного изменён алгоритм округления чисел с плавающей запятой, и что 5.5% - это, на самом деле, правильное значение (из-за того, что значение 5.55 хранится как 5.4999). Для исправления этой ошибки мы использовали модуль decimal, работающий над значениями в десятичном формате.
Python 2.7 - последняя версия языка в ветке 2.x, с которой мы работаем; планов перехода на Python 2.8 у нас нет. Дальше мы будем работать над переходом на версию 3.2 - но произойдёт это не скоро. Переход с ветки 2 на ветку 3 - ещё более существенный шаг; между этими двумя ветками множество несовместимостей как на уровне языка, так и на уровне API. Кроме того, на данный момент мы не видим особых преимуществ от такого перехода.
Что версия 2.7 даст игрокам? В ближайшей перспективе - ничего. А вот в дальней перспективе новая версия языка позволит нам делать нашу работу проще, быстрее и лучше.
А ещё у нас появилась новая игла для граммофона. Stackless Python 2.7 и Randver будут нас развлекать ещё очень долго.
- CCP Porkbelly
Оригинал девблога.
Прим. перев.: клиент, основанный на Stackless Python 2.7 был выпущен с патчем Tyrannis 1.0.4.
Сообщение отредактировал AllSeeingI: 25 August 2010 - 8:18