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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Changelog
This is the changelog preview of
EnTT3.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_anyas well as the newanyclass support const references.organizerclass to create a minimal dependency graph for your systems.EnTTtype system was improved andtype_infois now an opaque type returnd bytype_id<T>.polyfor automated static polymorphism.Long version (aka all you can find in v3.6.0)
config:ENTT_DISABLE_ASSERTto fully disable asserts.core:type_seqto provide sequential identifiers for types.type_hashto provide unique identifiers for types.type_nameto provide demangled names for types.type_infoas a replacement for the template classtype_info<T>.type_idfunction template to generate untypedtype_infoobjects from types:type_list_contains[_v].size_of_v, an extension forsizeofthat doesn't complain when used with functions or incomplete types.type_list<T...>::sizeto 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_invocablewith tuples.is_empty[_v](mainly used for internal purposes) that is true only ifENTT_NO_ETOisn't defined.ENTT_PAGE_SIZE) to 4096.hashed_string::valueis nowconstexpr, suitable for uses with string views in constant expressions.constness_as[_t]to transfer the constness between types._hsand_hws) have been moved to the namespaceentt::literals.is_complete[_v]to detect complete types.entt::anywith a default SBO size ofsizeof(double[2]).entt::anysupport for both const and non-const references (extended to meta and poly, see below).entt::any_castoverloads similar to what the standard library offers.as_refto create aliases to unmanaged objects withany.value_listandvalue_list_cat[_t](similar totype_listandtype_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_lists, similar tostd::tuple_element_t.value_list_element[_v]forvalue_lists, similar tostd::tuple_element_t.entity:storage_adapter_mixinandsigh_pool_mixinare now independent from each other. It's also easy to set a signal-less default pool:::size_hintmember function.registry::visitandregistry::ctxreturn now a wholetype_infoobject rather than the sole identifier.entt::handle.organizerto create a minimal dependency graph for your systems, see the documentation for further details.storage::emplacereturns now the newly created object.value_typeas a replacement forobject_type(storage, pool).basic_group<...>::each()andbasic_view<...>::each()as a replacement for::proxy.view_packclass 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::assignalso requires the head of the list of destroyed entities now and is much (much!) faster.registry::destroyedto get the head of the list of destroyed entities (to use with::rawand::assign).view<...>::use<T>to multi-type views to force the pool to use a given storage (useful when using iterators).handle_viewclass, a more restricted version ofhandlewhich also specifies the types it operates on (conversion operators available).try_getmember functions for (custom) storage classes.entt::get_as_tuplefunction to get the content of a storage given an entity as a (possibly empty) tuple.storage_traitsclass to provide information on storage classes.::size_hintmember function.registry(currently based on pool-less views).basic_handle<Entity>::destroy).poly_storage, fully customizablepoly_storage_traitsand const/non-constregistry::storagefor opaque proxies to pools (aka welcome back stamp, copy, ...). 🙂meta:meta_type::size_ofto know the size of the underlying type.meta_type::infoas 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_anythat doesn't contain a pointer-like object can be safely dereferenced and will return an invalid instance.meta_anyusesentt::anyinternally rather thanmeta_storage.meta_anyusing a single fake vtable function internally.as_refto create aliases to unmanaged objects withmeta_any.as_cref_tpolicy to receive data members and return values as const references.meta_any::allow_castas a better, more flexible alternative formeta_any::convert.meta_any::getandmeta_any::invoke.meta_any:operator*,as_sequence_containerandas_associative_containertometa_any.operator*.poly:polyfor 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, storageremoveand range-remove, ...).Breaking changes
configENTT_STANDALONEhas been removed.ENTT_HS_SUFFIXhas been removed.ENTT_HWS_SUFFIXhas been removed.core:type_indexhas been removed, usetype_seqinstead.has_type_index[_v]utility has been removed.type_infois not longer a class template. See the untyped version oftype_info, thetype_idfunction template, other thantype_seq,type_hashandtype_namefor further details.type_list_size[_v], usetype_list<T...>::sizeinstead.is_eto_eligible[_v]is nowis_empty[_v].entt::literalsnamespace is required in order to use user defined literals for hashed strings (_hsand_hws).entity:registry::visitandregistry::ctxreturn now a wholetype_infoobject rather than the sole identifier.::emptybecause it was misleading, use::size_hintinstead.::sizebecause it was misleading, use::size_hintinstead.::size<T>,raw<T>anddata<T>because they were misleading.object_type, usevalue_typeinstead (storage, pool).basic_group<...>::proxyandbasic_view<...>::proxy, use::each()instead.std::tuple<T>when the type isn't provided to the::getmember function (uniformity purpose for extended selection).registry::assignalso requires the head of the list of destroyed entities (see::destroyed).pool_traitsis replaced bystorage_traits.::size<T>,::empty<T..>anddata<T>from groups, they provide misleading information.::rawfor groups, it provides misleading information.::emptybecause it was misleading, use::size_hintinstead.::sizebecause it was misleading, use::size_hintinstead.meta:meta_type::hash, usemeta_type::infoinstead.resolve_id, useresolveinstead.resolve_type, useresolveinstead.meta_storage, replaced byentt::any.as_reftag, no replacement available.meta_any::ref, useas_ref(any)instead.meta_any::convert, usemeta_any::allow_castinstead.EnTTacross boundaries:To make EnTT work across boundaries, you've to provide support for contiguous identifiers.
See the examples in the
testdirectory 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
EnTTin Action with more and more examples.There are a couple of extra pages available in the documentation:
polymodule.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