Flecs v4.0.1
Highlights
Lots of performance improvements! ๐
- Queries for sparse components are up to 20x faster
get
,get_mut
,has
andowns
are 1.5-3x faster- Cached queries are 5x faster to create, and match 1.5x faster with new tables
- Simple uncached queries are up to 2x faster than v4.0.0 (5x faster than v3.2.12)
Release notes
This version includes the following bugfixes:
[cpp]
Fix crash when copying world object during shutdown (thanks @jpeletier!)[cpp]
Callpopulate_self
recursively for simple query results (thanks @Indra-db!)[core]
Fix assert when toggling component from stage[core]
Fix command batching issue that could prevent query rematching[core]
Fix issues with commands for sparse components[core]
Fix issue with cloning named entities[core]
Fix assert when callingemplace
afterremove
while deferred[queries]
Fix issue with not operator, traversal and wildcards[queries]
Fix issue with toggleable components and terms with#0
source[queries]
Fix issue withup
traversal and (re)matching empty tables[observers]
Fix issue with updating observers to different callback kind[observers]
Fix issue with observer for sparse component (thanks @Megafunk!)[systems]
Fix issue with updating system to different callback kind[script]
Fix issue where anonymous entities wouldn't clear after script update[script]
Fix syntax error for scripts with only ausing
statement[script]
Fix issue where unresolved component in template didn't throw an error[script]
Fix issue with anonymous template instance creation[script]
Fix issues with partial component assignments[script]
Fix issues with assigning non-trivial components[json]
Fix issues in new deserializer, serialize full paths by default[json]
Fix issue with serializing entity to JSON from stage[json]
Fix issues with serializing sparse components[json]
Fix issue with serializing inherited components without reflection data[rest]
Ensure REST HTTP server always has valid delta_time value[rest]
Only enable time measurements when OS time API is initialized
This version includes the following improvements:
[cpp]
Addflecs::ref<T>
constructor that just takes an entity (thanks @RoyAwesome!)[cpp]
Add support for iterating sparse component queries with run callback[core]
Removeid
andsize
fields fromecs_column_t
[core]
Use one size/count member for all table columns[core]
Addcomponent_map
to tables to improveget
/get_mut
/has
/owns
performance[core]
Improve performance ofecs_table_get_*_index
functions[queries]
Add dedicated iterator mode for queries that are fully cached[queries]
Add dedicated iterator mode for queries that are fully trivial[queries]
Don't evaluate first term of uncached queries twice[queries]
Reduce branching in trivial iterator code[queries]
Remove iterator mode that returned entities one by one[queries]
Replaceecs_iter_t::columns
with table records array[queries]
Removeecs_iter_t::ptrs
[queries]
Reduce number of observers created per query[queries]
Reuse staticsources
/ids
arrays for cached results where possible[queries]
Don't generate query plan for trivial queries[queries]
Implement fast query validation for simple queries[meta]
Add option to provide 0 offset without triggering automatic offset computation (thanks @Indra-db!)[script]
Suppress variable shadowing warning for parser on msvc[json]
Remove legacy (v3) deserializer[log]
Fix incorrect log color comparison (thanks @kagetu!)[docs]
Replaceno_readonly
withimmediate
in system manual[docs]
Fix link to migration guide[docs]
Fix grammar in Rust query examples (thanks @waywardmonkeys!)[docs]
Fix find/replace typos (thanks @waywardmonkeys!)[docs]
Remove references toEcsIteratble
(thanks @waywardmonkeys!)[misc]
Create.gitattributes
to preserve line endings on Windows (thanks @epreston!)[ci]
Prevent running workflows concurrently for same branch
Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/bda57ec04f1cb9ebeacab8a17cf9a0c3353d267b
Breaking changes
- Query results with inherited components now must be explicitly handled in C API (#466 (comment))
- Sparse components must now be obtained with
ecs_field_at
(#466 (comment)) - The
columns
/ptrs
members got removed from iterators (#466 (comment)) - Member target query results have changed (#466 (comment))
New Contributors
Full Changelog: v4.0.0...v4.0.1