Новости
Уроки эволюции С-кода и шаблоны архитектуры реального времени на основе проекта ioquake3
Аннотация
В современных компиляторах все сильнее действуют запреты на код, который может выполнять потенциально опасные действия. Опытные разработчики часто с улыбкой оглядываются на свой старый код, удивляясь его недостатками и тому, как он вообще функционировал, а на масштабных проектах такой взгляд назад может показать все недостатки подхода к программированию в прошлые эпохи. В этой статье рассматриваются проблемы компиляции и рефакторинга legacy (унаследованного) кода на примере игрового движка Quake III (1999). Будучи знаковым проектом ранней эры 3D-графических ускорителей, игровой движок, по сути, представляет собой систему реального времени, оптимизированную для ограниченного аппаратного обеспечения – сопоставимого с современными мобильными или встроенными устройствами. Его открытая кодовая база на C, выпущенная в виде ioquake3 проекта, теперь компилируемая для всех современных архитектур, предоставляет уникальную возможность для анализа улучшения качества кода, исходя из предупреждений компилятора. В этой статье мы изучаем различия между оригинальным исходным кодом Quake III и кодом современного проекта ioquake3, кластеризуя изменения в diff-файле между этими проектами. Мы также исследуем, как исходный код игры ведет себя под современным GCC со всеми включенными предупреждениями. Категоризируя предупреждения компилятора и уже сделанные разработчиками необходимые исправления, мы выделяем шаблоны небезопасных практик и демонстрируем необходимые шаги по рефакторингу. Результаты работы призваны связать исторические практики программирования с современными стандартами надежности, предоставляя практические выводы для преподавателей программирования на C, разработчиков, сопровождающих унаследованные системы и разработчиков, интересующихся качеством кода.
Ключевые слова
Издание
Труды Института системного программирования РАН, том 38, вып. 2, 2026, стр. 53-68.
ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).
DOI: 10.15514/ISPRAS-2026-38(2)-4
Для цитирования
Полный текст статьи в формате pdf (на английском)
Вернуться к содержанию тома