Releases: USCiLab/cereal
v1.3.2
This is a minor bug fix and build enhancement release for cereal.
The primary reason for this release is to correctly increment the version for cereal in include/cereal/version.hpp
.
Bug fixes and enhancements
- Make doxygen docs reproducible by @mr-c in #740
- Add CMake options for building doc and sandbox by @AzothAmmo in #751
- Correct patch version for 1.3.2 by @AzothAmmo in #750
New Contributors
Full Changelog: v1.3.1...v1.3.2
v1.3.1
This is a bug fix and minor enhancement release for cereal.
This release contains numerous quality of life improvements and bug fixes that improve support on newer compilers. Continuous integration testing has also been overhauled and cereal now uses github actions in place of travis for linux and mac testing.
Many of these changes come from community contributions.
Highlighted fixes and enhancements include:
- Github actions in place of Travis CI (thanks to @isuruf, #727)
- Doctest updates (and upstream patches!) to support all targeted compilers (#714, #736)
- Cmake modernization (thanks to @ClausKlein, #659)
Bug fixes and minor enhancements:
- Fix typo in docs by @tankorsmash in #597
- Add MSVC 2019 to build, default ctor for static object by @AzothAmmo in #593
- Fix json.hpp compilation issue when int32_t is a long by @bblackham in #621
- [cpp20] explicitly capture 'this' as copy by @lukaszgemborowski in #640
- Fix rapidjson for Clang 10 by @groscoe2 in #645
- Fixes to prevent clang-diagnostic errors by @johngladp in #643
- cleanup cmake files to be a little more moderen by @ClausKlein in #659
- CVE-2020-11105: Store a copy of each serialized shared_ptr within the archive to prevent the shared_ptr to be freed to early. by @serpedon in #667
- add license files for components of cereal by @miartad in #676
- Catch short documents in JSON input by @johnkeeping in #677
- C++17: use inline globals for StaticObjects by @InBetweenNames in #657
- Use std::variant::emplace when loading by @kepler-5 in #699
- Use std::optional::emplace() when loading non-empty optional by @kepler-5 in #698
- Fix itsNextName not clearing when not found + style change by @AzothAmmo in #715
- Update doctest to 2.4.6 + local fixes slated for upstream by @AzothAmmo in #716
- Fixed loading of std::vector by @Darred in #732
- Update license to match BSD template by @AzothAmmo in #735
- Update doctest to 2.4.7 by @AzothAmmo in #736
- Use GNUInstallDirs instead of hard wiring install directories by @antonblanchard in #710
This is not an exhaustive list of changes or individual contributions. See the closed issues or complete changelog for more information.
New contributors
- @tankorsmash made their first contribution in #597
- @bblackham made their first contribution in #621
- @lukaszgemborowski made their first contribution in #640
- @groscoe2 made their first contribution in #645
- @johngladp made their first contribution in #643
- @ClausKlein made their first contribution in #659
- @serpedon made their first contribution in #667
- @miartad made their first contribution in #676
- @johnkeeping made their first contribution in #677
- @InBetweenNames made their first contribution in #657
- @kepler-5 made their first contribution in #699
- @Darred made their first contribution in #732
- @antonblanchard made their first contribution in #710
Want to contribute to cereal?
Open source projects take a considerable amount of time to maintain! Contributions are always appreciated, especially when they can be easily integrated.
- Check out the contribution guidelines
- Take a look at the current major projects for cereal
- Look through the open issues
cereal v 1.3.0
This is a feature and bug fix release for cereal.
This release contains a few new features, numerous quality of life improvements, and bug fixes. Many of these come from community contributions.
With this release, the develop
branch is being removed in favor of a single default branch. This means that tagged releases should be used in favor of trusting the master branch as being stable. The development branch for documentation, gh-pages-develop
, is also being removed. This change comes with two small side benefits: pull requests will always be against the correct branch, and it will be easy to see development activity at a glance.
New features include:
- Deferred serialization for smart pointers (#185)
- Initial support for C++17 standard library
variant
andoptional
(thanks to @arximboldi, #448) - Support for
std::atomic
(thanks to @bluescarni, #277)
Fixes and enhancements include:
- Vastly improved continuous integration testing (#568, #569)
- Fixed several issues related to compilation on newer compilers (#579, #587, #515)
- Fixed warnings with
-Wconversion
and-Wdocumentation
(thanks to @WSoptics, #423) - Performance improvements for polymorphic serialization (#354)
Minor fixes and enhancements include:
- Fixed a bug related to
CEREAL_REGISTER_DYNAMIC_INIT
with shared libraries (thanks to @m2tm, #523) - Avoid unnecessary undefined behavior with
StaticObject
(thanks to @erichkeane, #470) - New
version.hpp
file describes cereal version (#444) - Ability to disable
size=dynamic
attribute in the XML archive (thanks to @hoensr, #401)
Other Notes
- The static checking for
minimal
serialization has been relaxed as there were many legitimate cases it was interfering with (thanks to @h-2, #565) - The
vs2013
directory has been removed in favor of generating solutions with CMake (#574)
This is not an exhaustive list of changes or individual contributions. See the closed issues for more information.
Want to contribute to cereal?
Open source projects take a considerable amount of time to maintain! Contributions are always appreciated, especially when they can be easily integrated.
- Check out the contribution guidelines
- Take a look at the current major projects for cereal
- Look through the open issues
cereal v 1.2.2
This is a minor feature and bug fix release for cereal.
The majority of fixes and enhancements for this release come from the community. Thank you for your contributions!
Fixes and enhancements include:
- Polymorphic registrations should always occur as intended, especially on VS2015 (#356)
- Unit testing overhauled to prepare for modules; dependency on boost test dropped in favor of doctest (#139)
- Continuous integration testing for Windows using AppVeyor (thanks to @tusharpm, #373)
Minor fixes and enhancements include:
- Ongoing optimizations for polymorphism support (thanks in part to @dlardi, #335, also see #354 for continuing work)
- cereal now uses local
#include
to make it easier to drop into a project (thanks to @kklouzal, #347) - Fixed a bug related to threading support (thanks to @auric, #331)
- Fixed a bug related to loading bitsets (thanks to @drivehappy, #355)
- Avoid conflict with the
check
macro on OSX (thanks to @erichkeane, #341, #342) - Removed remaining traces of hardcoded RapidJSON namespaces to avoid conflicting with system library (thanks to @Enhex, #351)
cereal::size_type
can now be configured via macro (#379)- Improved traivs continuous integration testing (thanks to @tusharpm, #367)
- cereal no longer uses c-style casts interanlly (thanks to @laudrup, #363)
- Improved support for migrating from boost (thanks to @headupinclouds, #366)
See the closed issues for more information.
Known Issues
Polymorphic registration for large numbers of classes is currently slower than it should be. See the ongoing progress towards this at #354.
Want to contribute to cereal?
- Check out the contribution guidelines
- Take a look at the current major projects for cereal
- Look through the open issues
cereal v 1.2.1
This is a minor feature and bug fix release for cereal.
Notable changes include:
- Support for g++ 6 (#300)
- Enhancements to support optional thread safety (#315, #320, thanks to @ChrisBFX)
Minor fixes and enhancements include:
- Fixed compilation errors with g++ 4.7.3 (#311)
- New documentation for the PIMPL idiom (#324) as well as threading (#322)
See the closed issues for more information.
cereal v 1.2.0
This is a minor feature and bug fix release for cereal.
This release sat around (much) longer than expected - note that the develop branch can always be used to access the latest changes to cereal.
Notable changes include:
- RapidJSON updated to a recent version (#121)
load_and_construct
now supports versioning (#216)- Bug fixes for polymorphism and multiple inheritance (#188, #281). See the documentation regarding the new requirement for paths between base and derived classes and read the breaking changes below for more information.
Minor fixes and enhancements include:
- Improved control over endianness for portable binary archive (#115)
- Improved documentation (#201, #269, others)
- Polymorphic support pulled in automatically with
<memory>
(#193) - RapidJSON and RapidXML placed in cereal namespace (#121)
- Various CMAKE improvements (#222 thanks to @robiwano, #239 and #254 thanks to @tamaskenez)
See the closed issues for more information.
Breaking Changes:
- As part of improving support for polymorphic serialization, we have introduced a requirement for explicit relations between polymorphic class hierarchies. Whenever you serialize a smart pointer to a polymorphic type, cereal must be able to find a path from the derived type to the base type. cereal is able to do this automatically if you serialize the base class using
cereal::base_class
orcereal::virtual_base_class
. If you do not do this, you must explicitly tell cereal about the relationship using the new macroCEREAL_REGISTER_POLYMORPHIC_RELATION
, found in<cereal/types/polymorphic.hpp>
. std::bitset
has been optimized for binary archives to avoid conversion to a string representation (see #236, thanks to @lyager). As a result of this, any bitset long enough to previously use the string output will not be compatible with the new serialization.
Known Issues
There is currently an error in the compile-time type checking that cereal performs on non-member load_minimal
functions that will cause a static_assertion
to mistakenly prevent compilation from succeeding. This only affects users using non-member load_minimal
functions where the type to support load_minimal
requires an unknown template parameter. See #132 for more information and workarounds.
cereal v 1.1.2
This is a minor release for cereal
New Features
Minor fixes and enhancements include:
- Fixed an issue with partial matching for NVP lookup (#167)
See the closed issues for more information.
To see what else is upcoming in the next release, check out milestone 1.2.
cereal v1.1.1
This is a minor bug fix release for cereal
We're moving to more rapid intermediate releases between feature versions of cereal to make it easier for users to take advantage of bug fixes and various improvements. Although these fixes were and will continue to be available in the develop branch, many users are more comfortable using an official released version.
Minor fixes and enhancements include:
- Compliance with MSVC warning level 4 (#151, #178)
- Bug fixes related to tuples (thanks to @eschnett and @erichkeane, #175, #176)
- Empty string fixes for XML archives (#182)
- Fixes related to polymorphism and serialization function specialization (#180)
See the closed issues for more information.
Potential Breaking Changes
In fixing #180, the type traits is_input_serializable
and is_output_serializable
were changed to accurately reflect their names. Prior to this release, these traits would return false if a type had more than one serialization function but was restricted to use only one of them through specialization. With this release, these traits base their decision on whether a type is either specialized for exactly one serialization method or has exactly one non-specialized serialization method available. If you relied on the previous (incorrect) behavior in any custom type traits, you may need to make appropriate changes.
Upcoming Changes
We next plan to fix some compilation issues with NVCC for users of cuda 7.0 and then move on to core 1.2 features, which will mainly focus on modules and various enhancements to cereal.
To see what else is upcoming in the next release, check out milestone 1.2.
cereal v1.1.0
This is a minor feature and bug fix release for cereal.
This is our first release since 1.0, and the first release with significant contribution from the community, which will only increase with 1.2. cereal would like to thank its users and contributors for helping make this release possible.
Notable changes include:
- cereal serialization functions (e.g. load/save/serialize) can now be easily renamed via macros in
cereal/macros.hpp
(thanks to @mattyclarkson, #60) - XML archives properly handle whitespace in text (thanks to @volo-zyko, #109)
- Class versioning and polymorphic registration work properly with shared libraries (thanks in part to @ImplOfAnImpl, #113, #137)
Minor fixes and enhancements include:
- Fixed issues related to long serialization on OSX using libc++ (#81)
- Fixed support of char serialization for XML archives (#116)
- Fixes and enhancements related to minimal serialization (#79, #80)
- Properly utilizing R-values in various internal containers (#96)
- Improved support for ICC (Intel C++ compiler) (#120)
- Tuple elements are now serialized in proper order with unique names in text archives (thanks in part to @erichkeane, #143). See breaking changes for a special note on this.
- Additional miscellaneous bug fixes and code refactoring.
See the closed issues for more information.
Breaking Changes:
This release introduces two breaking changes. The first will affect any user that created a custom serialization archive and utilizes minimal serialization functions with that archive:
In fixing #79, we introduced the concept of relating input and output archives using type traits. You now need to use the macro CEREAL_SETUP_ARCHIVE_TRAITS(InArchive, OutArchive)
for your custom archives if you wish to support minimal serialization. You can look at the source of any of the cereal provided archives to see an example of this.
In addition, in fixing #80, we introduced a traits class that text based archives should inherit from. This has been applied to JSON and XML archives, but any users with custom text based archives are encouraged to have their text archive inherit from cereal::traits::TextArchive
. This is not currently used internally by cereal but may be used by users with the new cereal::traits::is_text_archive
traits class.
The second breaking change has to do with tuple serialization. We fixed the order of tuple serialization to go in ascending (get<0>(), get<1>()
) instead of descending order. See #143 for more information.
Known Issues
There is currently an error in the compile-time type checking that cereal performs on non-member load_minimal
functions that will cause a static_assertion
to mistakenly prevent compilation from succeeding. This only affects users using non-member load_minimal
functions where the type to support load_minimal
requires an unknown template parameter. See #132 for more information and workarounds. This is scheduled to be fixed in the next release.
Various cereal macros such as CEREAL_REGISTER_TYPE
do not work properly when used with templated class arguments (e.g. MyClass<OtherType>
). You can use a typedef (e.g. using SingleName = MyClass<OtherType>
) to avoid the issue. See #141 for the future solution we will use.
Upcoming Changes
The next version of cereal will introduce cereal modules, which will be collections of serialization functions or archives for types outside of the standard library. These will exist outside of the main cereal distribution to avoid cluttering the core of cereal. See module for more information.
To see what else is upcoming in the next release, check out milestone 1.2.
cereal v1.0.0
This is a major feature release for cereal. Notable changes include:
- Support for Visual Studio 2013 (#11)
- Support for out of order loading in text (XML/JSON) archives (#13, #14)
- Full API compatibility with Boost serialization (#8)
- Support for class versioning (#8)
- New API for types with no default constructor (#43, #44, #59)
- New minimal serialization functions (#23)
- Compliance with the compiler flags -Wextra, -Wshadow, and -pedantic (#17)
- Fixes related to libc++ compliance, especially on OSX (#49, #51, #72)
- Support for
std::enable_shared_from_this
(cereal hall of fame for most annoying standard library feature to support) (#47) - Miscellaneous bug fixes, documentation updates, small improvements, and code refactoring
See the closed issues for more information.
cereal is not designed to be inherently backwards compatible across significant releases. There are a few changes in this release that may break some existing use cases:
- The constructors for XML and JSON archives accept options in a different manner (#64)
- Types with no default constructor have a new API and new names for required functions
- Some built in types may have had their serialization format changed, especially in regards to text archives using name-value-pairs.
- Enums use the new minimal serialization (#23)
- JSON archives now serialize large types in base 10 instead of base 64 (#72)