Skip to content

Latest commit

 

History

History
194 lines (127 loc) · 7.87 KB

File metadata and controls

194 lines (127 loc) · 7.87 KB

Changelog

Features

  • Adds command buffers support for deferred structural operations (#670).
  • Adds the possibility to specify that a query column is read-only (#677).
  • Adds DiskVector and DiskStructArray to use the disk for components in very large simulations (#656).
  • Adds GPUVector{:CPU} and GPUStructArray{:CPU} to use a GPU storage on devices which do not have a GPU (#701).
  • Adds the boxed keyword argument to the world constructor, which cuts the compilation cost of Ark, at the price of some slowdown in performance.
  • Adds get_components, set_components! and has_components for a Query, to access the components of a query for a single entity without iterating or closing the query. EntityHandle now works with queries as well, i.e. query[entity][Position].

Breaking changes

  • unregister! and register! now require the world as an argument (#660).
  • API functions for Query and Filter now require the world as an argument (#662).
  • length for a filter has been renamed to count_tables (#662).

Performance

  • Structural operations are now up to 2x faster (#662, #690).
  • Operations executed on the CPU with a GPU storage are almost overhead-less in respect to CPU only storage (#701).
  • Compile time performance is improved through a better internal specialization mechanism (#662).
  • Component registration no longer compiles one Dict insertion per component type during world construction.
  • Getting components performance improved by 10% (#664).

Bugfixes

  • Fixed some unsound usages of internals and function not respecting assumptions in generated functions (#651)

Breaking changes

  • Components are registered as relations at world construction instead of at type definition for better extensibility (#626, #627).
  • The relationship API has been rewritten to be less verbose and redundant, by coupling together the components with the chosen relation in one statement (#614, #625).
  • observe!(world, observer; unregister=true) has been removed in favour of register!(observer) and unregister!(observer) (#574)
  • EventType is renamed to Event (#573)

Features

  • Adds support for sorting tables based on filters (#600, #615)
  • Adds support for partitioning tables based on filters (#620)
  • Adds support for adding an arbitrary number of events, before it was capped to 64 (#573)

Performance

  • Inference on API has been improved substantially, fixing some issues with dynamic dispatch (#637)
  • Queries with relations are now non-allocating (#641)
  • Many batch operations are up to 3x faster thanks to simd (#575)
  • Many single entity operations are now 10-20% faster thanks to table caching in transitions (#555)
  • Inactive component columns are shared between tables to reduce memory usage in fragmented worlds (#648)

Bugfixes

  • Fixes bugs related to relationship being accepted even for stale entities with recycled ids (#605, #604)
  • Fixes a bug where removing multiple relation targets of the same entity caused an error (#611, fixes #606)

Breaking changes

  • Storage modes wrap the storage types instead of using unrelated types (#437)

Features

  • Adds support for user-defined storage types (#437)
  • Adds new types GPUVector and GPUStructArray which can be used to offload work to the GPU (#470, #476, #483)
  • Makes the locking mechanism thread-safe for parallel queries (#536, #537)
  • Adds support for shuffling tables based on filters (#527)
  • Adds support for UniqueVector storage (#481)

Performance

  • Add an unchecked macro to trade-off safety for speed (#521, #522, #531)

Bugfixes

  • Fix copy on special mutable types (#515, fixes #514)

Documentation

  • Adds a demo of a nbody model to show GPU computing (#523)

Other

  • Closing an already closed query is a no-op instead of raising an error (#493)

Bugfixes

  • Fixes error on batch-remove relation targets (#506, fixes #498)
  • Fixes filter matching wrong, recycled relation target (#508, fixes #497)
  • Fixes skipping filters that were unregistered (#510, fixes #499)

Bugfixes

  • Fixes recycling relation tables, which caused missed entities (#484, fixes #477)

Breaking changes

  • Batch entity creation uses a callback/do-block instead of an iterator (#400)

Features

  • Adds entity relationships (#340, #349)
  • Adds events for relationship changes (#370)
  • Adds re-usable filters for query construction (#375, #413)
  • Adds cached/registered filters for faster query iteration with many archetypes (#378)
  • Adds batch entity removal (#396, #402)
  • Adds batch-setting entity relation targets (#406)
  • Adds batched versions of adding, removing and exchanging components (#408)
  • Makes Ark compatible with Mooncake.jl (#405)

Performance

  • Uses a hash table for some component transitions, with up t0 30% speedup (#348)
  • Uses push! instead of resize!+setindex! for moving and creating components (#439)
  • Caches the last component transition, with 15-35% speedup (#448)

Documentation

  • Adds a chapter on Ark's architecture to the user manual (#391, #394)

Bugfixes

  • Fixes missing swaps in archetypes when removing components (#432, fixes #430)

Other

  • Ark.jl moved from the personal account of its initiator to the ark-ecs organization

Breaking changes

  • Removes the macros for the convenient tuple syntax, the syntax is used in ordinary functions now (#305)
  • Throws more explicit exception types instead of generic ErrorException (#202)
  • Query argument optional adds further components instead of making existing ones optional (#253)

Features

  • Adds an event system with events for structural changes as well as custom events (#155)
  • Adds storage modes Vector and StructArray, which can be selected per component type (#207, #225)
  • Adds field view, so field access for query columns works equally for Vector and StructArray storages (#213)
  • Adds support to manage an arbitrary number of components in the World (#230, #327, #330)
  • Adds @copy_entity! for copying an entity and optionally adding and removing components (#262, #266)
  • Adds keyword argument initial_capacity to World constructor (#288)
  • Adds function reset! for resetting and reusing a world to avoid reallocations (#292)
  • Adds function length for queries and batches (#298)
  • Adds function count_entities for queries and batches (#316)

Performance

  • Adaptive bit-mask size, depending on the number of components in the world (#237, #250)
  • Avoids unions in queries without optional components, speeding up query iteration (#246)

Documentation

  • Adds an animated logo demo (#268)
  • Adds a basic SIR demo (#324)
  • Adds a demo of an evolutionary model for grazers (#325)
  • Adds a demo with travelers on a network (#334)
  • Adds a boids/flocking demo (#337)
  • Adds a page listing all demos with screenshots in the user manual (#339)

Other

  • Improves error messages when passing components types as (A, B) instead of the required Val.((A, B)) (#191)
  • Checks for duplicate components on query construction (#255)
  • Improves string representations of all exposed types (#275)

Bugfixes

  • Fix broken archetype pre-selection in queries (#301)

Initial release of Ark.jl.