{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,5]],"date-time":"2026-05-05T15:36:41Z","timestamp":1777995401280,"version":"3.51.4"},"reference-count":59,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","license":[{"start":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T00:00:00Z","timestamp":1759968000000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["2145367"],"award-info":[{"award-number":["2145367"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,10,9]]},"abstract":"<jats:p>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.<\/jats:p>","DOI":"10.1145\/3763050","type":"journal-article","created":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T08:49:50Z","timestamp":1759999790000},"page":"1-28","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":2,"title":["Exploring the Theory and Practice of Concurrency in the Entity-Component-System Pattern"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-5702-0860","authenticated-orcid":false,"given":"Patrick","family":"Redmond","sequence":"first","affiliation":[{"name":"University of California, Santa Cruz, Santa Cruz, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-8548-3683","authenticated-orcid":false,"given":"Jonathan","family":"Castello","sequence":"additional","affiliation":[{"name":"University of California, Santa Cruz, Santa Cruz, USA"}]},{"ORCID":"https:\/\/orcid.org\/0009-0001-1145-2032","authenticated-orcid":false,"given":"Jos\u00e9 Manuel","family":"Calder\u00f3n Trilla","sequence":"additional","affiliation":[{"name":"Haskell Foundation, Ottawa, Canada"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1374-7715","authenticated-orcid":false,"given":"Lindsey","family":"Kuper","sequence":"additional","affiliation":[{"name":"University of California, Santa Cruz, Santa Cruz, USA"}]}],"member":"320","published-online":{"date-parts":[[2025,10,9]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Carter Anderson and Bevy Contributors. 2024. Bevy Engine. https:\/\/bevyengine.org\/"},{"key":"e_1_2_1_2_1","article-title":"I-structures: data structures for parallel computing","volume":"11","author":"Nikhil Rishiyur S.","year":"1989","unstructured":"Arvind, Rishiyur S. Nikhil, and Keshav K. Pingali. 1989. I-structures: data structures for parallel computing. ACM Trans. Program. Lang. Syst., 11, 4 (1989), Oct..","journal-title":"ACM Trans. Program. Lang. Syst."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1038\/324446a0"},{"key":"e_1_2_1_4_1","unstructured":"Alex Beimler. 2024. Entity-Component-System Benchmarks. https:\/\/github.com\/abeimler\/ecs_benchmark"},{"key":"e_1_2_1_5_1","unstructured":"Bevy Contributors. 2024. bevy_ecs::archetype - Rust. Documentation https:\/\/docs.rs\/bevy_ecs\/latest\/bevy_ecs\/archetype\/index.html"},{"key":"e_1_2_1_6_1","unstructured":"Bevy Contributors. 2024. Entity in bevy_ecs::entity - Rust. Documentation https:\/\/docs.rs\/bevy_ecs\/latest\/bevy_ecs\/entity\/struct.Entity.html"},{"key":"e_1_2_1_7_1","unstructured":"Bevy Contributors. 2024. Module bevy_ecs::system. Documentation https:\/\/docs.rs\/bevy_ecs\/0.14.2\/bevy_ecs\/system\/index.html#system-ordering"},{"key":"e_1_2_1_8_1","unstructured":"Bevy Contributors. 2024. ParallelCommands in bevy_ecs::system. Documentation https:\/\/docs.rs\/bevy_ecs\/0.14.2\/bevy_ecs\/system\/struct.ParallelCommands.html"},{"key":"e_1_2_1_9_1","unstructured":"Scott Bilas. 2002. A Data-Driven Game Object System. Presentation https:\/\/www.gamedevs.org\/uploads\/data-driven-game-object-system.pdf"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/1640089.1640097"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/1926385.1926447"},{"key":"e_1_2_1_12_1","unstructured":"Ida Borisova. 2024. Unofficial Bevy Cheat Book \u2013 Intro: Your Data. https:\/\/bevy-cheatbook.github.io\/programming\/intro-data.html"},{"key":"e_1_2_1_13_1","unstructured":"Michele Caini. 2024. Crash Course: entity component system. Heading \u201cMultithreading\u201d. https:\/\/github.com\/skypjack\/entt\/wiki\/Crash-Course:-entity-component-system\/aa053854f18d4589fe7ce6284752dfdbe1d5d3b0#multithreading"},{"key":"e_1_2_1_14_1","unstructured":"Michele Caini. 2024. Crash Course: entity component system. Heading \u201cThe Registry the Entity and the Component\u201d. https:\/\/github.com\/skypjack\/entt\/wiki\/Crash-Course:-entity-component-system\/aa053854f18d4589fe7ce6284752dfdbe1d5d3b0#the-registry-the-entity-and-the-component"},{"key":"e_1_2_1_15_1","unstructured":"Michele Caini. 2024. Crash Course: entity component system. Heading \u201cAll or nothing\u201d. https:\/\/github.com\/skypjack\/entt\/wiki\/Crash-Course:-entity-component-system\/465d90e0f5961adc460cd9d1e9358370987fbcd3#all-or-nothing"},{"key":"e_1_2_1_16_1","unstructured":"Michele Caini. 2024. EnTT: Gaming meets Modern C++. https:\/\/skypjack.github.io\/entt\/"},{"key":"e_1_2_1_17_1","volume-title":"Apecs: A Type-Driven Entity-Component-System Framework. Preprint https:\/\/github.com\/jonascarpay\/apecs\/blob\/master\/apecs\/prepub.pdf","author":"Carpay Jonas","year":"2018","unstructured":"Jonas Carpay. 2018. Apecs: A Type-Driven Entity-Component-System Framework. Preprint https:\/\/github.com\/jonascarpay\/apecs\/blob\/master\/apecs\/prepub.pdf"},{"key":"e_1_2_1_18_1","unstructured":"Jonas Carpay. 2018. apecs: Fast ECS framework for game programming (v0.5.0.0). Release https:\/\/hackage.haskell.org\/package\/apecs-0.5.0.0"},{"key":"e_1_2_1_19_1","unstructured":"Jonas Carpay. 2018. Apecs.Concurrent (v.0.4.1.1). Module https:\/\/hackage.haskell.org\/package\/apecs-0.4.1.1\/docs\/Apecs-Concurrent.html"},{"key":"e_1_2_1_20_1","unstructured":"Jonas Carpay. 2019. Apecs Shmup example. Source https:\/\/github.com\/jonascarpay\/apecs\/blob\/be72edab17eaaf9f771e45392b3837d31d8ff663\/examples\/Shmup.lhs#L338-L350"},{"key":"e_1_2_1_21_1","unstructured":"Jonas Carpay. 2024. Apecs.TH makeWorld (v0.9.6). Source https:\/\/hackage.haskell.org\/package\/apecs-0.9.6\/docs\/Apecs-TH.html#v:makeWorld"},{"key":"e_1_2_1_22_1","unstructured":"Jonas Carpay. 2024. Apecs.Util nextEntity (v0.9.6). Source https:\/\/hackage.haskell.org\/package\/apecs-0.9.6\/docs\/src\/Apecs.Util.html#nextEntity"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1016\/0012-365X(84)90108-0"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/237721.237805"},{"key":"e_1_2_1_25_1","volume-title":"International Summer School on Applied Semantics","author":"Fournet C\u00e9dric","unstructured":"C\u00e9dric Fournet and Georges Gonthier. 2000. The join calculus: A language for distributed mobile programming. In International Summer School on Applied Semantics. Springer, 268\u2013332."},{"key":"e_1_2_1_26_1","volume-title":"Legion: High performance entity component system (ECS) library. Releases https:\/\/crates.io\/crates\/legion","author":"Gillen Thomas","year":"2021","unstructured":"Thomas Gillen. 2021. Legion: High performance entity component system (ECS) library. Releases https:\/\/crates.io\/crates\/legion"},{"key":"e_1_2_1_27_1","unstructured":"Stephen Gutekanst. 2022. Let\u2019s build an Entity Component System (part 2): databases. Blog https:\/\/devlog.hexops.com\/2022\/lets-build-ecs-part-2-databases\/"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.simpat.2020.102243"},{"key":"e_1_2_1_29_1","volume-title":"Proceedings of the IFIP Congress, J. L. Rosenfeld (Ed.). North-Holland.","author":"Kahn G.","year":"1974","unstructured":"G. Kahn. 1974. The Semantics of a Simple Language for Parallel Programming. In Information Processing \u201974: Proceedings of the IFIP Congress, J. L. Rosenfeld (Ed.). North-Holland."},{"key":"e_1_2_1_30_1","unstructured":"Eyal Kalderon. 2021. Amethyst Game Engine. Releases https:\/\/crates.io\/crates\/amethyst"},{"key":"e_1_2_1_31_1","volume-title":"Source https:\/\/github.com\/indianakernick\/EnTT-Pacman\/blob\/8d0ad586decc80aebe1431456b092507be26b372\/src\/core\/game.cpp\/#L79-L89","author":"Kernick Indiana","unstructured":"Indiana Kernick. 2020. EnTT Pacman. Source https:\/\/github.com\/indianakernick\/EnTT-Pacman\/blob\/8d0ad586decc80aebe1431456b092507be26b372\/src\/core\/game.cpp\/#L79-L89"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804319"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/2502323.2502326"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/2535838.2535842"},{"key":"e_1_2_1_35_1","unstructured":"Adam Martin. 2007. Entity Systems are the future of MMOG development - Part 1. Blog https:\/\/t-machine.org\/index.php\/2007\/09\/03\/entity-systems-are-the-future-of-mmog-development-part-1\/"},{"key":"e_1_2_1_36_1","unstructured":"Adam Martin. 2007. Entity Systems are the future of MMOG development - Part 3. Blog https:\/\/t-machine.org\/index.php\/2007\/12\/22\/entity-systems-are-the-future-of-mmog-development-part-3\/"},{"key":"e_1_2_1_37_1","unstructured":"Sander Mertens. 2020. Building an ECS #2: Archetypes and Vectorization. Blog https:\/\/ajmmertens.medium.com\/building-an-ecs-2-archetypes-and-vectorization-fe21690805f9"},{"key":"e_1_2_1_38_1","unstructured":"Sander Mertens. 2020. Making the most of ECS identifiers. Blog https:\/\/ajmmertens.medium.com\/doing-a-lot-with-a-little-ecs-identifiers-25a72bd2647"},{"key":"e_1_2_1_39_1","unstructured":"Sander Mertens. 2023. Why it is time to start thinking of games as databases. Blog https:\/\/ajmmertens.medium.com\/why-it-is-time-to-start-thinking-of-games-as-databases-e7971da33ac3"},{"key":"e_1_2_1_40_1","volume-title":"Flecs: A fast entity component system (ECS) for C & C++.  https:\/\/www.flecs.dev\/flecs\/","author":"Mertens Sander","year":"2024","unstructured":"Sander Mertens. 2024. Flecs: A fast entity component system (ECS) for C & C++. https:\/\/www.flecs.dev\/flecs\/"},{"key":"e_1_2_1_41_1","volume-title":"Flecs: Systems.  https:\/\/www.flecs.dev\/flecs\/md_docs_2Systems.html#immediate-systems","author":"Mertens Sander","year":"2024","unstructured":"Sander Mertens. 2024. Flecs: Systems. https:\/\/www.flecs.dev\/flecs\/md_docs_2Systems.html#immediate-systems"},{"key":"e_1_2_1_42_1","volume-title":"Flecs: FAQ \"Can I use my own scheduler implementation?\".  https:\/\/www.flecs.dev\/flecs\/md_docs_2FAQ.html#can-i-use-my-own-scheduler-implementation","author":"Mertens Sander","year":"2025","unstructured":"Sander Mertens. 2025. Flecs: FAQ \"Can I use my own scheduler implementation?\". https:\/\/www.flecs.dev\/flecs\/md_docs_2FAQ.html#can-i-use-my-own-scheduler-implementation"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/97945.97958"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jlap.2012.06.003"},{"key":"e_1_2_1_45_1","unstructured":"Mojang AB and Microsoft Corporation. 2024. Minecraft Attributions. https:\/\/www.minecraft.net\/en-us\/attribution"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","unstructured":"Simon Peyton Jones Roman Leshchinskiy Gabriele Keller and Manuel M T Chakravarty. 2008. Harnessing the Multicores: Nested Data Parallelism in Haskell. In IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science Ramesh Hariharan Madhavan Mukund and V Vinay (Eds.) (Leibniz International Proceedings in Informatics (LIPIcs) Vol. 2). Schloss Dagstuhl \u2013 Leibniz-Zentrum f\u00fcr Informatik Dagstuhl Germany. 383\u2013414. isbn:978-3-939897-08-8 issn:1868-8969 https:\/\/doi.org\/10.4230\/LIPIcs.FSTTCS.2008.1769 10.4230\/LIPIcs.FSTTCS.2008.1769","DOI":"10.4230\/LIPIcs.FSTTCS.2008.1769"},{"key":"e_1_2_1_47_1","volume-title":"Languages and Compilers for Parallel Computing","author":"Prokopec Aleksandar","unstructured":"Aleksandar Prokopec, Heather Miller, Tobias Schlatter, Philipp Haller, and Martin Odersky. 2013. FlowPools: A Lock-Free Deterministic Concurrent Dataflow Abstraction. In Languages and Compilers for Parallel Computing, Hironori Kasahara and Keiji Kimura (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. 158\u2013173. isbn:978-3-642-37658-0"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/3331150"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.16890907"},{"key":"e_1_2_1_50_1","volume-title":"Jos\u00e9 Manuel Calder\u00f3n Trilla, and Lindsey Kuper","author":"Redmond Patrick","year":"2025","unstructured":"Patrick Redmond, Jonathan Castello, Jos\u00e9 Manuel Calder\u00f3n Trilla, and Lindsey Kuper. 2025. Exploring the Theory and Practice of Concurrency in the Entity-Component-System Pattern. arxiv:2508.15264. arxiv:2508.15264"},{"key":"e_1_2_1_51_1","unstructured":"Lucas Sardois. 2021. Generational indices guide. Blog https:\/\/lucassardois.medium.com\/generational-indices-guide-8e3c5f7fd594"},{"key":"e_1_2_1_52_1","unstructured":"Thomas Schaller. 2022. LazyUpdate in specs::world. Documentation https:\/\/docs.rs\/specs\/0.20.0\/specs\/world\/struct.LazyUpdate.html"},{"key":"e_1_2_1_53_1","unstructured":"Thomas Schaller. 2023. The Specs Book. https:\/\/amethyst.github.io\/specs\/docs\/tutorials\/"},{"key":"e_1_2_1_54_1","unstructured":"Lukas Schmierer. 2017. Benchmarks of various Rust Entity Component Systems. https:\/\/github.com\/lschmierer\/ecs_bench"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/1468075.1468134"},{"key":"e_1_2_1_56_1","unstructured":"Unity Technologies. 2024. ECS for Unity. https:\/\/unity.com\/ecs"},{"key":"e_1_2_1_57_1","unstructured":"Catherine West. 2018. Using Rust for Game Development (and What You Can Learn From It). Presentation https:\/\/kyren.github.io\/rustconf_2018_slides\/index.html"},{"key":"e_1_2_1_58_1","unstructured":"Mick West. 2007. Evolve Your Hierarchy. Blog https:\/\/cowboyprogramming.com\/2007\/01\/05\/evolve-your-heirachy\/"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","DOI":"10.1145\/3498696"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763050","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763050","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T17:42:40Z","timestamp":1760031760000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3763050"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,10,9]]},"references-count":59,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2025,10,9]]}},"alternative-id":["10.1145\/3763050"],"URL":"https:\/\/doi.org\/10.1145\/3763050","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,10,9]]},"assertion":[{"value":"2024-10-16","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-08-12","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-10-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}