一句话:提出 Core ECS 形式模型,刻画确保调度无关确定性的 ECS 程序类,并调查现实框架的不足。
实体-组件-系统(ECS)模式长期用于游戏开发,强调实体(身份)、组件(数据)与系统(行为)的分离,其程序天然并发且兼具模块化与性能优势,然而该模式在少数领域之外鲜为人知、缺乏严格理解:现有解释要么纠缠于具体框架的实现细节,要么依赖不精确的比喻或反面描述。本文提出形式模型 Core ECS,抽离具体实现以揭示 ECS 程序的本质,并识别出一类无论调度如何都表现确定性的 Core ECS 程序,从而使 ECS 可作为“构造即确定”的并发编程模型。作者以 Core ECS 为参照调查多个实际 ECS 框架,发现它们均未充分利用确定性并发的机会,由此指出新的实现技术空间。
The Entity-Component-System (ECS) software design pattern, long used in game development, encourages a clean separation of identity (entities), data properties (components), and computational behaviors (systems). Programs written using the ECS pattern are naturally concurrent, and the pattern offers modularity, flexibility, and performance benefits that have led to a proliferation of ECS frameworks. Nevertheless, the ECS pattern is little-known and not well understood outside of a few domains. Existing explanations of the ECS pattern tend to be mired in the concrete details of particular ECS frameworks, or they explain the pattern in terms of imperfect metaphors or in terms of what it is not. We seek a rigorous understanding of the ECS pattern via the design of a formal model, Core ECS, that abstracts away the details of specific implementations to reveal the essence of software using the ECS pattern. We identify a class of Core ECS programs that behave deterministically regardless of scheduling, enabling use of the ECS pattern as a deterministic-by-construction concurrent programming model. With Core ECS as a point of comparison, we then survey several real-world ECS frameworks and find that they all leave opportunities for deterministic concurrency unexploited. Our findings point out a space for new ECS implementation techniques that better leverage such opportunities.
@article{paperbot2995,
title = {Exploring the Theory and Practice of Concurrency in the Entity-Component-System Pattern},
author = {Patrick Redmond and Jonathan Castello and José Manuel Calderón Trilla and Lindsey Kuper},
journal = {Proceedings of the ACM on Programming Languages},
volume = {9},
number = {OOPSLA2},
year = {2025},
doi = {10.1145/3763050}
}