v0.8.7 #23
richardbiely
announced in
Announcements
v0.8.7
#23
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This is an important bug-fix release with some interesting internal changes.
First and foremost, despite all the unit tests and memory sanitization, some nasty bugs made it through which have been addressed now. Most of them were logical errors, some were more involved, though. The list of fixes is quite extensive so make sure to update. The core should be very stable now.
A few smaller features were added to the project to make your live easier.
Among them, implicit pairs:
Component layouts are now defined via GAIA_LAYOUT. The previous version has been deprecated and is no longer recommended:
The query engine started transitioning to a virtual machine. What this is means is that before the query is first run, it breaks the process into a sequence of specialized instructions in the process called compilation. This eliminates the need to run some logic every time a new archetypes is encountered and makes queries more efficient. The virtual machine is going to keep improving over time and will make queries even faster. It will also make it easier to extend the query engine significantly.
One big new feature, although still only in preview, is the introduction of systems as entities. An undocumented way to use systems until now was:
Systems can now be defined as entities:
This will allow systems to be queried and create complex relationships among them. For instance, you will be able to tell "give me all systems that operate on XYZ and turn them off", or "give me all systems which are a dependency of this one". This has many practical applications in debugging, monitoring and more which we will get into once the system is fully implemented.
Another preview feature is the introduction of a new storage type for components. So far, only archetype storage has been used. Although great in many things, archetypes are a bit slower when it comes to adding/removing components because content of all entities belonging to archetype A needs to be moved to archetype B. To mitigate this issue a new sparse storage made its way into the project. A packed array or a sparse set storage can be used to store components which are likely to be added and removed or if stability of reference is required. Components living inside the sparse storage never move and thus they are fast to add or remove.
Data structures are implemented, they are not connected to Gaia yet, though. I will write more about this feature and its implications once it fully lands. For now, it can be used like this:
Release notes
Fixes:
Fixed: Invalid discord link
Fixed: Dangling archetypes possible in the entity->archetype map
Fixed: Build issues with certain preprocessor macro combinations
Fixed: Missing restrict keyword
Fixed: ThreadPool would not handle spurious wake ups
Fixed: shift_elements_right_aos(_n) not working correctly for all kind of types
Fixed: Exclusive NO queries regression
Fixed: Matching of wildcard queries
Fixed: Matching of NO queries
Fixed: Proper return value resolution for container functions front and back
Fixed: Dummy example build + stack allocator on MSVC
Fixed: Out-of-bounds array access in duel
Fixed: Unaligned free used after aligned alloc
Fixed: Empty chunks and archetypes deleted again
Fixed: CantCombine not working properly
Fixed: move_elements_aos would use a const pointer for the address to move from
Fixed: Wrong path in build_clang.sh
Fixed: "no" query operation would not match Is relationships properly
Fixed: world::is and world::in did the opposite of what they should
Fixed: Reliance on an undefined behavior in the unit test
Fixed: Incorrect destructor called when swapping entities inside chunks
Fixed: Wrong memory written to when adding components
Fixed: Make sure docker script files are always in linux format
Fixed: Unused variable that could trigger a warning
Changes:
Changed: ecs::DependsOn –> ecs::Requires
Changed: Use mold/gold linkers when available by default because they perform better than the default linker for clang/GNU
Changed: Dont use mold on Apple
Changed: Catch2 updated to v3.6.0
Changed: Tracy updated to version 0.11.1
Tweaks:
Tweaked: Simplified check for (,) pairs in World::has
Tweaked: Query size update
Tweaked: Further reduction of Query size. Serialization buffer made temporary and moved to World.
Tweaked: Query invalidation made automatic based on the command properties
Tweaked: Deletion performance
Tweaked: Slightly faster entity name fetch
Tweaked: Slightly improved entity lookup performance
Tweaked: Internal variables related to component layout renamed to avoid collisions with user variables
New:
Added: Support for implicit pairs
Added: Query::changed(Entity)
Added: Systems as entities prototype
Added: Exclusive property
Added: GAIA_LAYOUT convenience macro
Added: Docker on Windows
Added: Address sanitizer annotation support for dynamic containers
Added: Virtual machine for compiling queries (early iteration)
Added: VM profiler scopes
Added: Delete entity benchmark
Added: Sparse storage
Added: sparse_storage optimized for tags
Added: GAIA_STORAGE
Full Changelog: v0.8.6...v0.8.7
This discussion was created from the release v0.8.7.
Beta Was this translation helpful? Give feedback.
All reactions