Replies: 5 comments 23 replies
-
Please provide a short summary (or teaser with some buzzwords 😏 ). Biggest? release so far! 🥳 |
Beta Was this translation helpful? Give feedback.
-
Old topic, but again
... why is it not v4.0.0 ? (sorry for bothering) |
Beta Was this translation helpful? Give feedback.
-
@Green-Sky I think we'd be up to major release three million by now if each release with breaking changes was a new major version. I've seen this point made from reddit users as well with the announcement posts. This library has been and likely will continue to be highly experimental and this is the nature of the beast. Semantic versioning isn't the right fit for every project. |
Beta Was this translation helpful? Give feedback.
-
What about adding some kind of a hook for tags that will automatically re-generate single include file? I see users have many problems with its version being out of date. |
Beta Was this translation helpful? Give feedback.
-
So I presume it returns some value for those incomplete types. 0? -1? |
Beta Was this translation helpful? Give feedback.
-
Changelog
This is the changelog preview of
EnTT
3.6.0, that is, the currentmaster
. Any feedback is appreciated.Of course, feel free to comment even just to correct my English, which is certainly not the best! 🙂
If there are no relevant issues, I'll cut a new release in the next few days or early 2021 at the latest.
Short version (aka most wanted/relevant changes)
registry
.meta_any
as well as the newany
class support const references.organizer
class to create a minimal dependency graph for your systems.EnTT
type system was improved andtype_info
is now an opaque type returnd bytype_id<T>
.poly
for automated static polymorphism.Long version (aka all you can find in v3.6.0)
config
:ENTT_DISABLE_ASSERT
to fully disable asserts.core
:type_seq
to provide sequential identifiers for types.type_hash
to provide unique identifiers for types.type_name
to provide demangled names for types.type_info
as a replacement for the template classtype_info<T>
.type_id
function template to generate untypedtype_info
objects from types:type_list_contains[_v]
.size_of_v
, an extension forsizeof
that doesn't complain when used with functions or incomplete types.type_list<T...>::size
to know the number of types of a type list.operator+
for type lists (similar totype_list_cat[_t]
, but for variables rather than types):is_applicable[_v]
andis_applicable_r[_v]
, a sort ofstd::is_invocable
with tuples.is_empty[_v]
(mainly used for internal purposes) that is true only ifENTT_NO_ETO
isn't defined.ENTT_PAGE_SIZE
) to 4096.hashed_string::value
is nowconstexpr
, suitable for uses with string views in constant expressions.constness_as[_t]
to transfer the constness between types._hs
and_hws
) have been moved to the namespaceentt::literals
.is_complete[_v]
to detect complete types.entt::any
with a default SBO size ofsizeof(double[2])
.entt::any
support for both const and non-const references (extended to meta and poly, see below).entt::any_cast
overloads similar to what the standard library offers.as_ref
to create aliases to unmanaged objects withany
.value_list
andvalue_list_cat[_t]
(similar totype_list
andtype_list_cast[_t]
, but for values rather than types).type_identity[_t]
trait (waiting for a C++20 version ofEnTT
).type_list_element[_t]
fortype_list
s, similar tostd::tuple_element_t
.value_list_element[_v]
forvalue_list
s, similar tostd::tuple_element_t
.entity
:storage_adapter_mixin
andsigh_pool_mixin
are now independent from each other. It's also easy to set a signal-less default pool:::size_hint
member function.registry::visit
andregistry::ctx
return now a wholetype_info
object rather than the sole identifier.entt::handle
.organizer
to create a minimal dependency graph for your systems, see the documentation for further details.storage::emplace
returns now the newly created object.value_type
as a replacement forobject_type
(storage, pool).basic_group<...>::each()
andbasic_view<...>::each()
as a replacement for::proxy
.view_pack
class template to combine views and decide what type leads the iteration:The view pack is a view-like object, similar to a multi-type view. It's also iterable and it offers both
each(func)
andeach()
as well:each()
) also offer reverse iterators.registry::assign
also requires the head of the list of destroyed entities now and is much (much!) faster.registry::destroyed
to get the head of the list of destroyed entities (to use with::raw
and::assign
).view<...>::use<T>
to multi-type views to force the pool to use a given storage (useful when using iterators).handle_view
class, a more restricted version ofhandle
which also specifies the types it operates on (conversion operators available).try_get
member functions for (custom) storage classes.entt::get_as_tuple
function to get the content of a storage given an entity as a (possibly empty) tuple.storage_traits
class to provide information on storage classes.::size_hint
member function.registry
(currently based on pool-less views).basic_handle<Entity>::destroy
).poly_storage
, fully customizablepoly_storage_traits
and const/non-constregistry::storage
for opaque proxies to pools (aka welcome back stamp, copy, ...). 🙂meta
:meta_type::size_of
to know the size of the underlying type.meta_type::info
as a replacement formeta_type::hash
.resolve
, it accepts now a type as a template parameter, or an unique identifier or type info object as an argument.meta_any
that doesn't contain a pointer-like object can be safely dereferenced and will return an invalid instance.meta_any
usesentt::any
internally rather thanmeta_storage
.meta_any
using a single fake vtable function internally.as_ref
to create aliases to unmanaged objects withmeta_any
.as_cref_t
policy to receive data members and return values as const references.meta_any::allow_cast
as a better, more flexible alternative formeta_any::convert
.meta_any::get
andmeta_any::invoke
.meta_any
:operator*
,as_sequence_container
andas_associative_container
tometa_any
.operator*
.poly
:poly
for automated static polymorphism.See the official documentation for all the details and usage instructions.
signal
:emitter
.The single include file also contains the version now.
Allow compilation for Windows with GNU-like compilers.
Performance improvements here and there (
registry::create
,registry::clear
, storageremove
and range-remove
, ...).Breaking changes
config
ENTT_STANDALONE
has been removed.ENTT_HS_SUFFIX
has been removed.ENTT_HWS_SUFFIX
has been removed.core
:type_index
has been removed, usetype_seq
instead.has_type_index[_v]
utility has been removed.type_info
is not longer a class template. See the untyped version oftype_info
, thetype_id
function template, other thantype_seq
,type_hash
andtype_name
for further details.type_list_size[_v]
, usetype_list<T...>::size
instead.is_eto_eligible[_v]
is nowis_empty[_v]
.entt::literals
namespace is required in order to use user defined literals for hashed strings (_hs
and_hws
).entity
:registry::visit
andregistry::ctx
return now a wholetype_info
object rather than the sole identifier.::empty
because it was misleading, use::size_hint
instead.::size
because it was misleading, use::size_hint
instead.::size<T>
,raw<T>
anddata<T>
because they were misleading.object_type
, usevalue_type
instead (storage, pool).basic_group<...>::proxy
andbasic_view<...>::proxy
, use::each()
instead.std::tuple<T>
when the type isn't provided to the::get
member function (uniformity purpose for extended selection).registry::assign
also requires the head of the list of destroyed entities (see::destroyed
).pool_traits
is replaced bystorage_traits
.::size<T>
,::empty<T..>
anddata<T>
from groups, they provide misleading information.::raw
for groups, it provides misleading information.::empty
because it was misleading, use::size_hint
instead.::size
because it was misleading, use::size_hint
instead.meta
:meta_type::hash
, usemeta_type::info
instead.resolve_id
, useresolve
instead.resolve_type
, useresolve
instead.meta_storage
, replaced byentt::any
.as_ref
tag, no replacement available.meta_any::ref
, useas_ref(any)
instead.meta_any::convert
, usemeta_any::allow_cast
instead.EnTT
across boundaries:To make EnTT work across boundaries, you've to provide support for contiguous identifiers.
See the examples in the
test
directory for more details.Deprecated features
All previously deprecated functions and classes have been removed.
This release contains many breaking changes. There was no way to make a smooth transition because of the amount and nature of these changes.
Because of that, I decided to not deprecate functions when possible and remove them directly instead.
See the above section for a migration guide.
Examples
I'm adding some examples (see
test/example
) to answer the most frequently asked questions.Custom storage/views also deserve a fair number of examples. I'll add them time by time as possible.
Any other business
The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.
I've also updated the FAQs and the section
EnTT
in Action with more and more examples.There are a couple of extra pages available in the documentation:
poly
module.I started a long term process to reduce the number of instantiations and therefore speed up the compilation.
This release contains some more changes in this regard. Still a work in progress though.
Beta Was this translation helpful? Give feedback.
All reactions