Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PolymorphicVirtualCaster StaticObject instantiation takes a very long time at app startup #354

Closed
ForestRingGames opened this issue Oct 18, 2016 · 40 comments

Comments

@ForestRingGames
Copy link

I recently updated to a newer version of cereal and it seems like some things have changed.

On startup Cereal creates these "StaticObject" instances now for every polymorphic registration.
My app now takes around 60 seconds to startup, compared to 1 second previously. I'm on iOS with an iPad Pro.

Why does this happen now?
What's the benefit of these StaticObjects?
Can I turn this off somehow?

@AzothAmmo
Copy link
Contributor

cereal has always made these StaticObject objects for polymorphism support. Can you give us some more information - which version of cereal were you using before, and which version are you using now? Do you have profiling results which point to StaticObject as the source of the problem?

Is the behavior reproducible with a simple test case to isolate cereal as the cause of the problem?

@ForestRingGames
Copy link
Author

Hmm Interesting....I'm using Xcode, so when I pause the application on startup to see what's taking so long, it's always busy initializing global variables - These StaticObjects.

I was using this version here: https://www.dropbox.com/sh/zutlvwslrqvfdwy/AACoCxAiiZYnB9rSBLTt_Usna?dl=0

I did some slight modifications to it in order to compile for the Android NDK (replace std::to_string)
Now, I tried using the latest version, I just downloaded as a zip file yesterday.

@AzothAmmo
Copy link
Contributor

I'm not exactly sure which version that is since we don't include the version number in the source, but the biggest difference I can see is that the old version you were using was prior to us properly a detail related to dynamic casting between polymorphic types. This fix involved the creation of a new StaticObject, so potentially your issue is related to this, but I would need more information to either reproduce or know exactly which parts seem to be slowing you down.

Do you have a complicated class hierarchy at work, or a lot of polymorphic registrations? I can't think of anything we do that would cause such a dramatic increase in your runtime, unless there is some obscure edge case you are hitting.

@ForestRingGames
Copy link
Author

Haha, yeah that's why I couldn't tell you the version.

Well, yes. I'm working on a strategy video game and implemented a custom Entity Component System. I'm registering every single entity and component class at the end of the header file. It's probably around 100 headers plus registering some multiple times (different template instantiations). In total it might be 200-300 registrations.

In the previous version, all is fine and I was super happy that cereal did such a great job (especially serializing between iOS and Android, which would have been very painful). But the new version is just unusable unfortunately.

I can't send you my huge project obviously....I could offer a skype call and show you how long it takes / let you step through my debugger if that helps.

@AzothAmmo
Copy link
Contributor

Can you do me a favor and try the current development version of cereal? You'll have to clone it from github. If we are lucky it may already solve the problem, but I don't think that will be the case.


I think I can guess what is causing your problem, but I'll have to make a huge test case to see if I can reproduce it. If you can profile, I'm guessing the time is spent in PolymorphicVirtualCaster().

We fixed a bug related to polymorphism that required us to implement a way for cereal to know how to dynamic cast either direction in any polymorphic hierarchy. We get these relations automatically whenever you use something like cereal::base_class, but we also added in a new macro CEREAL_REGISTER_POLYMORPHIC_RELATION(Base, Derived) for cases when we can't figure it out.

One thing we try to do at initialization is to find all shortest paths of casting between polymorphic types. For example, you might have a hierarchy A->B->C, and let's say each one of those classes serializes its base, so we explicitly know the paths A<->B, and B<->C. We then try to see if we can do any of these transitions shorter, and discover that A->B->C can be reduced to A<->C.

Since you have so many registrations, I'm guessing that cereal spends a large amount of time trying to optimize these paths. The current algorithm is probably very inefficient, glancing at it it looks to be something like O(n^2) in the number of registrations.


Another workaround you can try, is in the newer version of cereal you already downloaded, comment out everything in PolymorphicVirtualCaster() after line 232 (the code dealing with finding chainable relations, see https://github.com/USCiLab/cereal/blob/master/include/cereal/details/polymorphic_impl.hpp#L232), and then fix any run-time errors you get along the lines of

unknown location(0): fatal error in "json_polymorphic": std::runtime_error: Trying to save a registered polymorphic type with an unregistered polymorphic cast.
Could not find a path to a base class (PolyBaseA) for type: PolyDerivedD
Make sure you either serialize the base class at some point via cereal::base_class or cereal::virtual_base_class.
Alternatively, manually register the association with CEREAL_REGISTER_POLYMORPHIC_RELATION.

by using CEREAL_REGISTER_POLYMORPHIC_RELATION as necessary.

@ForestRingGames
Copy link
Author

ForestRingGames commented Oct 20, 2016

@AzothAmmo
Sure, no problem. I just tried it and it did not fix the problem unfortunately.


It's interesting that you say that....I was facing many issues with Polymorphism recently...very often when I was trying to serialize a std::shared_ptr<BaseClass> and the actual object behind the pointer was like 5 class hierarchy steps away from BaseClass it would just crash, sometimes with Polymorphism errors. Sometimes saying, that DerivedClass was not aware of a path to DerivedClass. It was really weird. Sometimes it was thinking that DerivedClass wanted to serialize itself as with cereal::base_class. But other times it would just crash at a random point while deserializing. But I also got these errors with the version from yesterday. I fixed it now, but using a template serialization function that always uses the correct type of the class to serialize. This issue seems to only exist for the root node in a hierarchy. Hence, the std::shared_ptr that I put into the archiver needs to have the correct types, and then afterwards polymorphism seems to work.

Anyway....that's another issue. I might also open another ticket once this one here is sorted - just wanted to tell you that I've faced some of those.


bildschirmfoto 2016-10-20 um 01 55 56

Here's a Screenshot from the Xcode Time Profiler, profiling on an iPad Pro (hence the fastest device I currently target).

Since the Profiler performed a release build, the time it took went down drastically to around 2 seconds, instead of 30-60. But even with this, I would still opt for the old cereal version, since it will take 10 seconds at least on older Android devices.

These _cxx_global_var_init_ things show what's slowing it down so much on startup. I hope you can read something from it.


Removing the piece of code that you suggested lead to exactly the expected results: Super fast startup times, but Unregistered_Polymorphic_Exceptions.

@AzothAmmo
Copy link
Contributor

I've already planned out an efficient algorithm to replace what we are currently using, and hopefully this will resolve the issue.

@AzothAmmo AzothAmmo changed the title StaticObject instantiation takes a very long time at app startup PolymorphicVirtualCaster StaticObject instantiation takes a very long time at app startup Oct 20, 2016
@AzothAmmo AzothAmmo added this to the v1.2.2 milestone Oct 20, 2016
AzothAmmo added a commit that referenced this issue Oct 27, 2016
-This version has all of the debug messages left in, next commit will remove them
-Algorithm description provided in comments
-relates #354
AzothAmmo added a commit that referenced this issue Oct 27, 2016
-Also forgot to mention that I think there was a bug with upcasting before where the casting was
 incorrectly done in the reverse order.

 -relates #354
@AzothAmmo
Copy link
Contributor

Try out the latest develop commit and see if this works for you, I haven't been able to test this on a large test case yet.

@ForestRingGames
Copy link
Author

With this Version my App takes 38 seconds to start up on an iPad Pro.
With the previous version I was using it takes 3 seconds to start up.

I'm sorry to tell that it didn't help much.

@AzothAmmo
Copy link
Contributor

Ok, I'll have to make a test case with a large number of classes to try and narrow this down. Right now we try to update the relations on every registration (since there is no way of knowing when registrations are done), but perhaps this could be deferred to either be manually done (e.g., in main), or the first time a serialization is done. Maybe this will be a compile time flag to control when this is done, I'm not sure yet.

@ForestRingGames
Copy link
Author

Ah, so you mean that it is slow because it's trying to update the relations every single time for all registrations? Doing it one time in main might be super fast then?
Thanks for creating a test case and narrowing it down.

@AzothAmmo
Copy link
Contributor

Yes, every time cereal gets a registration it tries to update all paths related to the registration. It basically traverses a tree (not technically a tree because of diamond inheritance) for the current class hierarchy being registered and updates all parent nodes with the shortest path to children. So it's not wasting a lot of time on unrelated registrations, but the deeper a class hierarchy is the more work must be done.

@ForestRingGames
Copy link
Author

Okay, I see. So it shouldn't take too much time actually. It'll be interesting if not doing it for every registration would bring the time back down to 3 seconds instead of 30 or if it would be still like 5+ seconds.

If none of the improvements are of any help, I'd have to manually mark the parent / child relations right?

I'm definitely curious to see where this is going / what the solution might be, thanks again.

@AzothAmmo AzothAmmo modified the milestones: v1.2.3, v1.2.2 Nov 4, 2016
@AzothAmmo
Copy link
Contributor

I'm trying to build a test for this - can you give me an idea of how many classes are in your hierarchies? How wide/deep are they, how many, etc. Approximates are fine, I just need to create a test case to hone in on this.

@ForestRingGames
Copy link
Author

Sure: I'm registering around 200 classes and the typical depth is 5.

Of course some go deeper to 7-9 and some others only 2-3, but 5 is definitely the average.

Am 09.11.2016 um 23:34 schrieb Shane Grant notifications@github.com:

I'm trying to build a test for this - can you give me an idea of how many classes are in your hierarchies? How wide/deep are they, how many, etc. Approximates are fine, I just need to create a test case to hone in on this.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub #354 (comment), or mute the thread https://github.com/notifications/unsubscribe-auth/AUWZTCdbO2gA7DqP18CSjDH6LpqU82rWks5q8kpdgaJpZM4KZ96Q.

@ForestRingGames
Copy link
Author

ForestRingGames commented Jan 2, 2017

Hey, I just wanted to check back and ask if you've been able to get some kind of progress / improvement working yet. We're still using a very old version of cereal since we can't update due to the incredibly long startup time.

@cwlbraa
Copy link

cwlbraa commented Jan 5, 2017

@AzothAmmo We recently pulled in cereal's master branch and are experiencing similar issues as @ForestRingGames around startup, but with much beefier computers. I might be able to offer additional assistance tracking down the source of the slowdown.

We've got around 200 message classes as well (183-ish to be precise), almost all of which have only 1 or 2 parents. I've got some perf-based profiling working as well, and through that, on master, I can see an inordinately large amount of time being spent creating, erasing, and copying the red-black tree nodes underlying the polymorphic relation map https://github.com/USCiLab/cereal/blob/master/include/cereal/details/polymorphic_impl.hpp#L116

I'm not familiar with the evolution of the polymorphism feature, and it seems likely that that knowledge will lead to a better understanding of what changed, but one thing that strikes me is that an unordered_map might be more appropriate there...

But first, I'm going to run a compile and couple of experiments against develop and see if I get similar results.

@cwlbraa
Copy link

cwlbraa commented Jan 5, 2017

and as it turns out, your develop branch makes a big difference on my startup times [factor of 10ish], so it may be the depth or complexity of @ForestRingGames classgraph...

@AzothAmmo
Copy link
Contributor

I can optimize the implementation further when I get around to making a test case. I haven't been working on cereal over the holidays but I'm going to make a push to close some issues and get the next release out soon.

@ForestRingGames
Copy link
Author

@AzothAmmo Okay, sounds good! I can still offer you to do a skype session and show you the profiler running on my project to help you figure out what the issue is exactly. If you're up for that just message me via max {at} forestringgames {dot} com

@AzothAmmo
Copy link
Contributor

There may be a solution to that as a result of #388, which I need to test. The downside to this solution is that it will require specificity when registering types, i.e. binding a polymorphic type to a specific type of archive, instead of it applying to any future archive.

I'm also curious to test boost under similar circumstances, since our implementation is a modified version of theirs.

I'm going to take the optimizations for runtime that are present here and push them to develop soon - there is likely room for future optimization but this is a good starting point for now.

@ForestRingGames
Copy link
Author

I'd actually be fine with that. We're only using one type of archive anyway (BinaryPortable to be able to exchange the same data between all kinds of iOS and Android devices).

Testing boost would be interesting, before choosing cereal I wanted to try boost but it looked very heavy-weight and heard to get to compile for iOS and Android. I think it was a non-header-only lib of boost.

We're looking forward to test any possible improvement.

@ForestRingGames
Copy link
Author

I forgot to ask: Do you know of any possible (hack-) fix, how we can avoid the huge memory usage on compiling? We'd just like to get the project to compile, so that we can start working with the windows machine. Is there maybe an old version that didn't have the issue or something similar?

@AzothAmmo
Copy link
Contributor

AzothAmmo commented Apr 12, 2017 via email

@AzothAmmo
Copy link
Contributor

This is going to take a bit more investigation than I thought - I just ran a single test showing 2x the memory use of boost for compilation, so the issue may be more nuanced.

@ForestRingGames
Copy link
Author

Okay, thanks for the update.

Do you also see crazy memory consumption like 8+ GB for 300+ polymorphic registrations?
Do you think those segmentation errors that we face might be due to too much memory consumption?

@AzothAmmo
Copy link
Contributor

It varies quite a bit depending on which test I run. I have one which does somewhere around 100 registrations against every archive type which uses at least 8GB, but the same registrations done against a single archive type are topping out at 2GB. I've never seen any adverse affect at runtime though (e.g. segfaults), but if you are getting segfaults with your compiler perhaps it is due to memory limitations.

AzothAmmo added a commit that referenced this issue May 3, 2017
still needs more work but this is an improvement for now
see #354
headupinclouds added a commit to headupinclouds/cereal that referenced this issue Aug 15, 2017
commit aa891a4
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Jun 26 13:42:08 2017 -0700

    Resolves USCiLab#414

commit fcef0da
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri May 5 11:37:12 2017 -0700

    Fix shadowing issue for USCiLab#401, recent osx compile issue re: USCiLab#354

commit 950aca4
Merge: ad90557 35a36af
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri May 5 11:09:34 2017 -0700

    Merge branch 'hoensr-xml-no-size-attributes' into develop

commit 35a36af
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri May 5 10:54:25 2017 -0700

    Standardize interface for options (xml)
    see USCiLab#401

commit ad90557
Merge: f031131 2ab15f7
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed May 3 11:39:02 2017 -0700

    Merge branch 'develop' of github.com:USCiLab/cereal into develop

commit f031131
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed May 3 11:38:35 2017 -0700

    modifications for g47 and comment out memory intensive testing

commit c4dcc8d
Merge: 68f56ee 676d329
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed May 3 11:11:08 2017 -0700

    Merge branch 'issue_354' into develop

    still needs more work but this is an improvement for now
    see USCiLab#354

commit 52b03d5
Author: Robin Hoens <robin.hoens@qiagen.com>
Date:   Mon Apr 10 17:13:39 2017 +0200

    Add option to turn off the size=dynamic attributes of lists

commit 2ab15f7
Merge: 68f56ee 7723503
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Tue Apr 11 16:17:51 2017 -0700

    Merge pull request USCiLab#397 from albertziegenhagel/issue_396

    Add remove_reference to determine whether template argument to BinaryData is const

commit 7723503
Author: Albert Ziegenhagel <albert.ziegenhagel@scai.fraunhofer.de>
Date:   Tue Apr 11 10:32:55 2017 +0200

    Add remove_reference to determine whether template argument to BinaryData is const

commit 68f56ee
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Apr 10 11:22:38 2017 -0700

    Remove undefined behavior, see USCiLab#390

commit 676d329
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Feb 22 14:43:31 2017 -0800

    adventures in microoptimization USCiLab#354

commit 546fd9b
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sun Feb 19 16:25:32 2017 -0800

    tinkering on USCiLab#354

commit 8b8f581
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Feb 15 13:39:42 2017 -0800

    Fix macro for double comparison in unit test
    relates USCiLab#338

commit 51cbda5
Merge: 70c4420 e38d6fe
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sun Feb 12 14:06:58 2017 -0800

    Merge branch 'develop' for release 1.2.2

commit e38d6fe
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sun Feb 12 13:46:25 2017 -0800

    fix update doc script

commit 70c4420
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sun Feb 12 00:25:30 2017 -0800

    Update README.md

    add appveyor badge

commit 2590f21
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sat Feb 11 23:47:00 2017 -0800

    Properly use multimap for lookup in poly casting
    relates USCiLab#356, still need final testing on MSVC

commit a917374
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Feb 8 10:47:02 2017 -0800

    size_type now specified by macro CEREAL_SIZE_TYPE
    resolves USCiLab#379

commit ee17db5
Merge: b827b95 f577fc4
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Feb 6 22:51:29 2017 -0800

    Merge branch 'develop' of github.com:USCiLab/cereal into develop

commit b827b95
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Feb 6 22:50:56 2017 -0800

    Fixes need for special MSVC case, see USCiLab#373

commit f577fc4
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sun Feb 5 22:13:08 2017 -0800

    Turn on warnings as errors for MSVC, warning level to 3
    Can't do level 4 warnings yet - need to make an upstream change to doctest

commit fb6606d
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Sun Feb 5 18:13:37 2017 -0800

    Do not build coverage or valgrind for MSVC

commit a2d5a15
Merge: 4a92e29 e4d543d
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Jan 27 10:29:51 2017 -0800

    Merge branch 'tusharpm-develop' into develop

    see USCiLab#373

    Still need to address why windows needed a modifcation to polymorphic test to compile

commit e4d543d
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Thu Jan 26 16:53:47 2017 +0530

    Fix merge issues

commit 2261fee
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Sun Dec 18 17:32:04 2016 +0530

    Pull requests to not increment build numbers

commit 4ff4db8
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Sun Dec 11 20:03:02 2016 +0530

    boost new version

commit 655696a
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Sun Dec 11 15:42:00 2016 +0530

    AppVeyor integration

commit df44243
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Sun Dec 11 01:01:10 2016 +0530

    Enable cross-platform portability test

    CMake fix 32-bit executable with generator Win64

commit 0a908bc
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Sat Dec 10 17:27:28 2016 +0530

    Make tests pass with Windows

commit 4a92e29
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Jan 25 11:04:24 2017 -0800

    no longer need boost test in travis

commit a8e9963
Merge: 75e50ee 1d67d44
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Jan 25 10:56:38 2017 -0800

    Merge branch 'develop_doctest' into develop

    see USCiLab#139

commit 75e50ee
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 13:48:46 2016 -0800

    remove old code from sandbox relates USCiLab#363

commit 507f97d
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 11:53:56 2016 -0800

    add -Wold-style-casts see USCiLab#363

commit f69ad7c
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 11:50:23 2016 -0800

    tab to space

commit d21b0c0
Merge: 29829c1 e63f08f
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 11:47:53 2016 -0800

    Merge branch 'laudrup-master' into develop
    see USCiLab#363

commit e63f08f
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 11:47:24 2016 -0800

    minor adjustments to casts, see comments on USCiLab#363

commit 29829c1
Merge: 9978e0c ad92746
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 10:41:27 2016 -0800

    Merge branch 'FlexCoreLib-doxygen_access_from_extern' into develop

    see USCiLab#365

commit ad92746
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 10:41:02 2016 -0800

    comment out obsolete doxygen

commit 9978e0c
Merge: 1edc5c6 6e71766
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 10:37:17 2016 -0800

    Merge pull request USCiLab#366 from headupinclouds/pr.is_loading.is_saving

    Add is_loading and is_saving values to cereal::{Input,Output}Archive

commit 1edc5c6
Merge: 72d7936 6086234
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Mon Nov 28 10:35:24 2016 -0800

    Merge pull request USCiLab#367 from tusharpm/develop

    Travis configuration updates

commit 6086234
Author: Tushar Maheshwari <tushar27192@gmail.com>
Date:   Sun Nov 27 13:57:26 2016 +0530

    Travis configuration updates
    - Switch to trusty container-based infrastructure for linux systems
    - Add a job to test with clang compiler (skips portability test)
    - Add a job to test on macOS with Xcode8

commit 6e71766
Author: David Hirvonen <dhirvonen@elucideye.com>
Date:   Sat Nov 26 12:31:56 2016 -0500

    Remove spurious character

commit 9376ca6
Author: Kasper Laudrup <laudrup@stacktrace.dk>
Date:   Wed Nov 23 01:34:53 2016 +0100

    Don't use C style casts

    Change C style casts to C++ static casts.

    This makes the code compile with the -Wold-style-cast warning enabled

commit 1d67d44
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Nov 4 16:07:00 2016 -0700

    Removed boost_test as a requirement
    -Now build 32 bit unit tests if portability testing is enabled
    -No more boost+clang issues over std::string abi
    see USCiLab#139, USCiLab#123

commit 66528b6
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Nov 4 15:51:57 2016 -0700

    last? conversions for USCiLab#139

commit 978b3b5
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Nov 4 12:11:51 2016 -0700

    typo fix in comment USCiLab#139

commit 13ae560
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Nov 4 12:10:24 2016 -0700

    more USCiLab#139

commit 07818f4
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Nov 4 12:00:16 2016 -0700

    more USCiLab#139

commit b5e500d
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Nov 2 16:32:35 2016 -0700

    more USCiLab#139

commit a6e59d7
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Nov 2 13:38:33 2016 -0700

    more for USCiLab#139

commit cd46374
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Wed Nov 2 12:20:22 2016 -0700

    more converted for USCiLab#139

commit 38e1548
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Tue Nov 1 11:59:40 2016 -0700

    headers USCiLab#139

commit 15c7339
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Tue Nov 1 11:59:02 2016 -0700

    more conversions USCiLab#139

commit 928cd36
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Tue Nov 1 11:41:28 2016 -0700

    more conversions to CHECK_EQ
    see USCiLab#139

commit 0a262ec
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Tue Nov 1 11:36:22 2016 -0700

    More tests split, switch to CHECk_EQ over CHECK
    see USCiLab#139

commit 671999e
Author: Shane Grant <w.shane.grant@gmail.com>
Date:   Fri Oct 28 14:28:37 2016 -0700

    Initial progress on removing boost test and moving to doctest to better support modules

    relates USCiLab#123

commit a066808
Author: Caspar Kielwein <Caspar@Kielwein.de>
Date:   Sun Oct 2 16:09:04 2016 +0200

    Add cereal.doxytags as tagfile to allow external projects to link to cereal documentation.

commit 3fb59db
Author: Caspar Kielwein <Caspar@Kielwein.de>
Date:   Sun Oct 2 15:53:28 2016 +0200

    Build doxygen documentation with separate CMakeLists.

    Extracted CMakelists.txt to doc subdirectory.
    Changed paths in doxyfile.in and CMakeLists accordingly.
    added doc as subdirectory in main CMakeLists.txt.
WSoptics pushed a commit to WSoptics/cereal that referenced this issue Sep 1, 2017
WSoptics pushed a commit to WSoptics/cereal that referenced this issue Sep 1, 2017
WSoptics pushed a commit to WSoptics/cereal that referenced this issue Sep 1, 2017
WSoptics pushed a commit to WSoptics/cereal that referenced this issue Sep 1, 2017
jrmadsen pushed a commit to jrmadsen/cereal that referenced this issue Jul 7, 2019
jrmadsen pushed a commit to jrmadsen/cereal that referenced this issue Jul 7, 2019
jrmadsen pushed a commit to jrmadsen/cereal that referenced this issue Jul 7, 2019
jrmadsen pushed a commit to jrmadsen/cereal that referenced this issue Jul 7, 2019
@AzothAmmo
Copy link
Contributor

I'm revisiting issues I had previously worked on and see that there were a few commits to develop based on the work here, but it's a bit unclear what the remaining issues are. Perhaps it would be best to open new tickets, link to this one, and close the discussion here.

JerryRyan pushed a commit to JerryRyan/cereal that referenced this issue Jan 6, 2020
JerryRyan pushed a commit to JerryRyan/cereal that referenced this issue Jan 6, 2020
fryguy503 added a commit to wayfarershaven/server that referenced this issue Jan 11, 2023
Cereal updated for work being done in another branch. This bump fixes some issues with the library. Tested

v1.3.1

Bug fixes and minor enhancements:
Fix typo in docs by @tankorsmash in Fix typo in docs USCiLab/cereal#597
Add MSVC 2019 to build, default ctor for static object by @AzothAmmo in Add MSVC 2019 to build, default ctor for static object USCiLab/cereal#593
Fix json.hpp compilation issue when int32_t is a long by @bblackham in Fix json.hpp compilation issue when int32_t is a long USCiLab/cereal#621
[cpp20] explicitly capture 'this' as copy by @lukaszgemborowski in [cpp20] explicitly capture 'this' as copy USCiLab/cereal#640
Fix rapidjson for Clang 10 by @groscoe2 in Fix rapidjson for Clang 10 USCiLab/cereal#645
Fixes to prevent clang-diagnostic errors by @johngladp in Fixes to prevent clang-diagnostic errors USCiLab/cereal#643
cleanup cmake files to be a little more moderen by @ClausKlein in cleanup cmake files to be a little more moderen USCiLab/cereal#659
GHSA-wgww-fh2f-c855: Store a copy of each serialized shared_ptr within the archive to prevent the shared_ptr to be freed to early. by @serpedon in CVE-2020-11105: Store a copy of each serialized shared_ptr within the archive to prevent the shared_ptr to be freed to early. USCiLab/cereal#667
add license files for components of cereal by @miartad in add license files for components of cereal USCiLab/cereal#676
Catch short documents in JSON input by @johnkeeping in Catch short documents in JSON input USCiLab/cereal#677
C++17: use inline globals for StaticObjects by @InBetweenNames in C++17: use inline globals for StaticObjects USCiLab/cereal#657
Use std::variant::emplace when loading by @kepler-5 in Use std::variant::emplace when loading USCiLab/cereal#699
Use std::optional::emplace() when loading non-empty optional by @kepler-5 in Use std::optional::emplace() when loading non-empty optional USCiLab/cereal#698
Fix itsNextName not clearing when not found + style change by @AzothAmmo in Fix itsNextName not clearing when not found + style change USCiLab/cereal#715
Update doctest to 2.4.6 + local fixes slated for upstream by @AzothAmmo in Update doctest to 2.4.6 + local fixes slated for upstream USCiLab/cereal#716
Fixed loading of std::vector by @Darred in Fixed loading of std::vector<bool> USCiLab/cereal#732
Update license to match BSD template by @AzothAmmo in Update license to match BSD template USCiLab/cereal#735
Update doctest to 2.4.7 by @AzothAmmo in Update doctest to 2.4.7 USCiLab/cereal#736
Use GNUInstallDirs instead of hard wiring install directories by @antonblanchard in Use GNUInstallDirs instead of hard wiring install directories USCiLab/cereal#710
This is not an exhaustive list of changes or individual contributions. See the closed issues or complete changelog for more information.
v1.3.0

New features include:

Deferred serialization for smart pointers (Stack overflow for large chains of shared_ptr (or smart pointers in general) USCiLab/cereal#185)
Initial support for C++17 standard library variant and optional (thanks to @arximboldi, Add serialization support for C++17 std::optional and std::variant USCiLab/cereal#448)
Support for std::atomic (thanks to @bluescarni, Implementation and testing of std::atomic serialization. USCiLab/cereal#277)
Fixes and enhancements include:

Vastly improved continuous integration testing (Appveyor updates + boost testing fixes USCiLab/cereal#568, Update Travis CI USCiLab/cereal#569)
Fixed several issues related to compilation on newer compilers (Fixing various compilation warnings USCiLab/cereal#579, Add fall through comments to json.hpp USCiLab/cereal#587, Fix warning unused private member itsValueItEnd USCiLab/cereal#515)
Fixed warnings with -Wconversion and -Wdocumentation (thanks to @WSoptics, Develop USCiLab/cereal#423)
Performance improvements for polymorphic serialization (PolymorphicVirtualCaster StaticObject instantiation takes a very long time at app startup USCiLab/cereal#354)
Minor fixes and enhancements include:

Fixed a bug related to CEREAL_REGISTER_DYNAMIC_INIT with shared libraries (thanks to @m2tm, Issue correctly using CEREAL_REGISTER_DYNAMIC_INIT USCiLab/cereal#523)
Avoid unnecessary undefined behavior with StaticObject (thanks to @erichkeane, Change StaticObject instance management to hopefully avoid UBSAN USCiLab/cereal#470)
New version.hpp file describes cereal version (detect cereal version at compile time / version.hpp USCiLab/cereal#444)
Ability to disable size=dynamic attribute in the XML archive (thanks to @hoensr, Add option to turn off the size=dynamic attributes of lists USCiLab/cereal#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, remove const check from load_minimal USCiLab/cereal#565)
The vs2013 directory has been removed in favor of generating solutions with CMake (Remove vs2013 directory USCiLab/cereal#574)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants