Уроки эволюции С-кода и шаблоны архитектуры реального времени на основе проекта ioquake3
https://doi.org/10.15514/ISPRAS-2026-38(2)-4
Аннотация
В современных компиляторах все сильнее действуют запреты на код, который может выполнять потенциально опасные действия. Опытные разработчики часто с улыбкой оглядываются на свой старый код, удивляясь его недостатками и тому, как он вообще функционировал, а на масштабных проектах такой взгляд назад может показать все недостатки подхода к программированию в прошлые эпохи. В этой статье рассматриваются проблемы компиляции и рефакторинга legacy (унаследованного) кода на примере игрового движка Quake III (1999). Будучи знаковым проектом ранней эры 3D-графических ускорителей, игровой движок, по сути, представляет собой систему реального времени, оптимизированную для ограниченного аппаратного обеспечения – сопоставимого с современными мобильными или встроенными устройствами. Его открытая кодовая база на C, выпущенная в виде ioquake3 проекта, теперь компилируемая для всех современных архитектур, предоставляет уникальную возможность для анализа улучшения качества кода, исходя из предупреждений компилятора. В этой статье мы изучаем различия между оригинальным исходным кодом Quake III и кодом современного проекта ioquake3, кластеризуя изменения в diff-файле между этими проектами. Мы также исследуем, как исходный код игры ведет себя под современным GCC со всеми включенными предупреждениями. Категоризируя предупреждения компилятора и уже сделанные разработчиками необходимые исправления, мы выделяем шаблоны небезопасных практик и демонстрируем необходимые шаги по рефакторингу. Результаты работы призваны связать исторические практики программирования с современными стандартами надежности, предоставляя практические выводы для преподавателей программирования на C, разработчиков, сопровождающих унаследованные системы и разработчиков, интересующихся качеством кода.
Об авторе
Сергей Михайлович СТАРОЛЕТОВРоссия
Кандидат физико-математических наук, доцент. Сфера научных интересов: формальная верификация, проверка моделей, киберфизические системы, операционные системы.
Список литературы
1. Kushner D. Masters of Doom: How two guys created an empire and transformed pop culture. Random House Trade Paperbacks, 2004.
2. Reseigh-Lincoln D. How Doom changed PC gaming forever, 2021. Available at: https://www.techradar.com/news/how-doom-changed-pc-gaming-forever, accessed 25.11.2025.
3. id Software. Quake-III-Arena, 2011. Available at: https://github.com/id-Software/Quake-III-Arena/, accessed 25.11.2025.
4. ioquake community. ioquake3, 2025. Available at: https://github.com/ioquake/ioq3, accessed 25.11.2025.
5. Hook B. 1999 GCC: The Quake 3 Rendering Engine, 1999. Available at: https://archive.org/details/1999-gdc-brianhookquake3, accessed 25.11.2025.
6. Hook B., Jaquays P. Quake III Arena. Shader Manual, 1999. Available at: https://fabiensanglard.net/fd_proxy/quake3/Q3%20Shaders.pdf, accessed 25.11.2025.
7. Munro J., Boldyrell C, Caplinppi A. Architectural studies of games engines-The quake series. In Proc of 2009 International IEEE Consumer Electronics Society's Games Innovations Conference. IEEE, 2009. pp. 246-255.
8. Sanghard F. Game engine Black Book: Doom. Software Wizards, 2018.
9. Sanghard F. Quake 3 source code review: architecture, 2021. Available at: https://fabiensanglard.net/quake3/, accessed 25.11.2025.
10. McEnirly C. The mathematics behind the fast inverse square root function code. Tech. rep, 2007. Available at: https://0x5f37642f.com/documents/McEnirlyMathematicaBehind.pdf, accessed 25.11.2025.
11. Tony Cricenti Hecq, Dominique and Philip Branch. 2011. Quake III Arena game structures. Available: https://figshare.swinburne.edu.au/articles/report/Quake_III_Arena_game_structures/26254658/1/files/47591027.pdf, accessed 25.11.2025.
12. Microsoft. Microsoft Introduces Visual C++ 6.0, 1998. Available at: https://news.microsoft.com/source/1998/06/29/microsoft-introduces-visual-c-6-0/, accessed 25.11.2025.
13. Independent review and test of the Loongson 3A6000 laptop, loongarch64: Linux, games, x86 emulation, GPU (In Russian). Available at: https://youtu.be/DZ9uBMin6xs, accessed 25.11.2025.
14. Jiang Y., Adams B., German D.M. Will my patch make it? And how fast? Case study on the Linux kernel. In proc. of 2013 10th Working conference on mining software repositories (MSR). IEEE, 2013, pp. 101 110.
15. Serrano L., Nguyen V., Thung F., Jiang L., Lo D, Lawall J., Muller G. SPINFER: Inferring Semantic Patches for the Linux kernel. In Proc. of 2020 USENIX Annual Technical Conference (USENIX ATC), 2020, pp.235-248.
16. Andersen J., Lawall J. Generic patch inference. Automated software engineering 17, 2010, pp.119-148.
17. Sun C, Le V., Su Z. Finding and analyzing compiler warning defects. In Proc. of the 38th International Conference on Software Engineering, 2016, pp. 203-213.
18. Melo J., Flesborg E., Brabrand C., Wasowski A. A quantitative analysis of variability warnings in Linux. In Proc. of the 10th International Workshop on Variability Modelling of Software-Intensive Systems, 2016, pp. 3-8.
19. Staroletov S.M., Starovoytov N.A, Golovnev N.A. Analyzing hot bugs in the Linux kernel by clustering fixing commit messages. Trudy ISP RAN/Proc.ISP RAS, vol 35, issue 3, 2023., pp. 215-242. EDN OWVILK.
20. Starovoytov N.A, Staroletov S.M. Exploring the taxonomy of commits in cyber-physical systems for enhanced error fixes investigation. Trudy ISP RAN/Proc.ISP RAS, vol 36, issue 2, 2024., pp. 33-46. EDN OSKQAQ.
21. Falleri J.R., Morandat F., Blanc X., Martinez M., Monperru, M. Fine-grained and accurate source code differencing. In Proc. of the 29th ACM/IEEE international conference on Automated software engineering, 2014. pp. 313-324.
22. Feathers M. Working effectively with legacy code. Prentice Hall Professional, 2005. Available at: https://archive.org/details/working-effectively-with-legacy-code/page/n1/mode/2up, accessed 25.11.2025.
23. Kirchmayr W., Moser M., Nocke L., Pichler J., Tobler R. Integration of static and dynamic code analysis for understanding legacy source code. In proc. of 2016 IEEE international conference on software maintenance and evolution (ICSME). IEEE, 2016, pp. 543-552.
24. Morisaki S., Kasai N, Kanamori K, Yamamoto S. Detecting source code hotspot in games software using low analysis. In proc. of 20th IEEE/ACIS International Conference on Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing (SNPD). IEEE, 2019, pp. 484-489.
25. Carmack J. Static Code Analysis, 2022. Available at: https://pvs-studio.com/en/blog/posts/a0087/, accessed 25.11.2025.
26. Staroletov S. Source files for the article, 2025. Available at: https://github.com/SergeyStaroletov/ioquake_vs_q3, accessed 25.11.2025.
27. Daya Guo, Dejian Yang, Haowei Zhang, Junxiao Song, Ruoyu Zhang, Runxin Xu, Qihao Zhu, Shirong Ma, Peiyi Wang, Xiao Bi, et al. Deepseek-Rl: Incentivizing reasoning capability films via reinforcement learning. arXiv preprint arXiv:2501.12948, 2025. Available at: https://arxiv.org/abs/2501.12948, accessed 25.11.2025.
28. Xing Hu, Feifei Niu, Junski Chen, Xin Zhou, Junwei Zhang, Junda He, Xin Xia, and David Lo. Assessing and Advancing Benchmarks for Evaluating Large Language Models in Software Engineering Tasks. arXiv preprint arXiv:2505.08903, 2025. Available at: https://www.arxiv.org/pdf/2505.08903v2, accessed 25.11.2025.
29. Rongkai Liu, Heyuan Shi, Shuming Liu, Chao Hu, Sisheng Li, Yuheng Shen, Rumzhe Wang, Nasohai Shi, and Yu Jiang. 2025. PatchScope-LLM-Enhanced Fine-Grained Stable Patch Classification for Linux Kernel. In proc. of the ACM on Software Engineering, ISSTA, 2025, pp.1513-1535.
30. Wei Li, Xin Zhang, Zhonghai Guo, Shaoguang Mao, Wen Luo, Guangyue Peng, Yangyu Huang, Houfeng Wang, and Scarlett Li. 2025. Fea-bench: A benchmark for evaluating repository-level code generation for feature implementation. arXiv preprint arXiv:2503.06680. Available at: https://arxiv.org/abs/2503.06680, accessed 25.11.2025.
31. Zhou J. Fine-Tuning Large Language Models for Practical Software Engineering: Case Studies in Automated Patch Generation, 2024.
32. DeepSeek. Example clusterization of part of diff of changes (in Russian), 2025. Available at: https://chat.deepseek.com/share/i0an6j0bkpidm20ibi, accessed 25.11.2025.
33. DeepSeek. Final clusterization of multiple parts of changes (in Russian), 2025. Available at: https://chat.deepseek.com/share/iimmmeykoyplj4by23, accessed 25.11.2025.
34. Hoare T. Null references: The billion dollar mistake (March 2009), abstract of QCon London Keynote, 2009. Available at: https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/, accessed 25.11.2025.
35. NVD, CVE-2014-1266 detail, 2014. Available at: https://nvd.nist.gov/vuln/detail/CVE-2014-1266, accessed 25.11.2025.
Рецензия
Для цитирования:
СТАРОЛЕТОВ С.М. Уроки эволюции С-кода и шаблоны архитектуры реального времени на основе проекта ioquake3. Труды Института системного программирования РАН. 2026;38(2):53-68. https://doi.org/10.15514/ISPRAS-2026-38(2)-4
For citation:
STAROLETOV S.M. С-code Evolution Lessons and Real-time Architecture Patterns from the ioquake3 Project. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2026;38(2):53-68. https://doi.org/10.15514/ISPRAS-2026-38(2)-4






