All Projects → SuperV1234 → Ecst

SuperV1234 / Ecst

Licence: afl-3.0
[WIP] Experimental C++14 multithreaded compile-time entity-component-system library.

Programming Languages

cpp
1120 projects
cpp11
221 projects
cpp14
131 projects

Projects that are alternatives of or similar to Ecst

Libgrape Lite
🍇 A C++ library for parallel graph processing 🍇
Stars: ✭ 169 (-59.57%)
Mutual labels:  parallel, library
Parallel Ssh
Asynchronous parallel SSH client library.
Stars: ✭ 864 (+106.7%)
Mutual labels:  parallel, library
Geotic
Entity Component System library for javascript
Stars: ✭ 97 (-76.79%)
Mutual labels:  entity, library
Klib
A standalone and lightweight C library
Stars: ✭ 3,442 (+723.44%)
Mutual labels:  generic, library
Sc
Common libraries and data structures for C.
Stars: ✭ 161 (-61.48%)
Mutual labels:  generic, library
Libgenerics
libgenerics is a minimalistic and generic library for C basic data structures.
Stars: ✭ 42 (-89.95%)
Mutual labels:  generic, library
Pubg mobile memory hacking examples
Pubg Mobile Emulator Gameloop Memory Hacking C++ code examples. Ex: Name, Coord, Bones, Weapons, Items, Box, Drop etc.
Stars: ✭ 224 (-46.41%)
Mutual labels:  entity, library
Scroll
Scroll - making scrolling through buffers fun since 2016
Stars: ✭ 100 (-76.08%)
Mutual labels:  generic, parallel
Lwrb
Lightweight generic ring buffer manager library
Stars: ✭ 215 (-48.56%)
Mutual labels:  generic, library
Observable
The easiest way to observe values in Swift.
Stars: ✭ 346 (-17.22%)
Mutual labels:  generic, library
Cloe
Cloe programming language
Stars: ✭ 398 (-4.78%)
Mutual labels:  parallel
Laravel Paystack
💳 📦 💰 Laravel 6, 7 and 8 Package for Paystack
Stars: ✭ 398 (-4.78%)
Mutual labels:  library
Decentralized Internet
A SDK/library for decentralized web and distributing computing projects
Stars: ✭ 406 (-2.87%)
Mutual labels:  library
Entitycomponentsystemsamples
No description or website provided.
Stars: ✭ 4,218 (+909.09%)
Mutual labels:  entity
Virtualenv
Virtual Python Environment builder
Stars: ✭ 4,017 (+861%)
Mutual labels:  library
Bouncylayout
Make. It. Bounce.
Stars: ✭ 4,035 (+865.31%)
Mutual labels:  library
V8n
☑️ JavaScript fluent validation library
Stars: ✭ 3,858 (+822.97%)
Mutual labels:  library
Ptshowcaseviewcontroller
An initial implementation of a "showcase" view( controller) for iOS apps... Visualizes images, videos and PDF files beautifully! (by @pittleorg) [meta: image, photo, video, document, pdf, album, gallery, showcase, gallery, iOS, iPhone, iPad, component, library, viewer]
Stars: ✭ 395 (-5.5%)
Mutual labels:  library
Fire Hpp
Fire for C++: Create fully functional CLIs using function signatures
Stars: ✭ 395 (-5.5%)
Mutual labels:  library
Laravel Imap
Laravel IMAP is an easy way to integrate both the native php-imap module and an extended custom imap protocol into your Laravel app.
Stars: ✭ 416 (-0.48%)
Mutual labels:  library

ecst

Experimental & work-in-progress C++14 multithreaded compile-time Entity-Component-System header-only library.

stability license gratipay badge.cpp

Overview

Successful development of complex real-time applications and games requires a flexible and efficient entity management system. As a project becomes more intricate, it’s critical to find an elegant way to compose objects in order to prevent code repetition, improve modularity and open up powerful optimization possibilities.

The Entity-Component-System architectural pattern was designed to achieve the aforementioned benefits, by separating data from logic.

  • Entities can be composed of small, reusable, and generic components.

  • Components can be stored in contiguous memory areas, thus improving data locality and cache- friendliness.

  • Application logic can be easily parallelized and abstracted away from the objects themselves and their storage policies.

  • The state of the application can be serialized and shared over the network with less effort.

  • A more modular, generic and easily-testable codebase.

"ecst" was developed as my BCS graduation project.


Getting started


More information


Terminology

  • Entities: defined by Adam Martin (see thesis) as “fundamental conceptual building blocks” of a system, which represent concrete application ob-jects. They have no application-specific data or logic.

  • Components: small, reusable, types that compose entities. Again, citing Adam Martin in (see thesis), a component type “labels an entity as possess-ing a particular aspect”. Components store data but do not contain any logic.

  • Systems: providers of implementation logic for entities possessing a specific set of component types.

  • Outer parallelism: term used in ECST which defines the concept of running multiple systems that do not depend on each other in parallel. Its implementation details will be analyzed in Chapter 10 (see thesis). Conceptually, an implicit directed acyclic graph is created at compile-time thanks to the knowledge of system dependencies. The execution of the implicit DAG is handled by a system scheduler type specified during settings definition.

  • Inner parallelism: other that running separate systems in parallel, ECST supports splitting a single system into multiple sub-tasks, which can be executed on separate threads. Many systems, such as the ones that represent functionally pure com- putations, do not contain side-effects that modify their own state or that define interactions between the subscribed entities: these are prime examples of “embarrassingly parallel” computations.


FAQ

  • "Where can I find documentation for the API?"

  • "Can we have components that aren't default constructible?"

    • This has come up before in the past. The answer is no - see issue #8.
  • "I'm trying to read/write to/from my component, but I'm getting a compilation error. What is happening?"

    • Systems need to know at compile-time which component types they will access and how (read-only or write access). This has to be specified when defining system signatures. See issue #4 for more info.
  • "Is it possible to iterate over the components attached to entities, without being inside of a system's process function?"

  • "How do control whether my system runs in parallel, or as a single thread?"

    • Context-wide inner parallelism must be enabled by calling allow_inner_parallelism() in order to allow systems to be split in multiple sub-tasks. Inner parallelism strategies can be customized and composed at compile-time for particular systems, during system signature definition.
  • "What is the difference between making my system single-threaded vs disabling inner paralellism?"

    • Disabling inner parallelism prevents all systems to be split in multiple sub-tasks, regardless of their inner parallelism strategy. Making a system single-threaded prevents only that system from being split in multiple sub-tasks: this may be necessary for systems that maintain data-structures or that rely on iterating over all entities in the same thread.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].