From: Robert Ramey (ramey_at_[hidden])
Date: 2002-05-16 13:51:38
I have just uploaded the third release of my proposed serialization library.
1) Library interface is only slightly changed.
2) Implementation is significantly improved. It incorporates almost all constructive
observations from boost members who downloaded the previous library.
3) Archive format is changed - hopefully for the last time.
This draft includes
1) Ability to specify serialization of other templates in a non-intrusive way. Includes and example which uses boost::shared_ptr.
1) More and better documentation
2) More test cases
3) More testing and documentation of obscure situtations
4) Better code organization for transparency
5) Wide character support implemented and tested with unicode.
Draft #2 was tested on MSVC 6 and 7 and MINGW (gcc 2.95). It would be desirable to
test this other platforms. At this writing, this version has been tested only on MSVC 7 and MinGW. I am hoping it can be tested on other platforms.
It is intention to address any bug reports or compiler/platform issues recieved in
the near future and then request formal inclusion of this library in boost.
Issues addressed by draft #2 were:
1) Archives are derived from a base class with virtual functions. This allows applications to implement custom archive formats. The library contains support for archives in character text, native binary data, and wide character text.
2) More checking has been implemented to detect erroneas library usage
3) Archives no longer need to store class names. This makes them smaller and portable across platforms.
4) Archives have a header to detect cases of erroneas usage.
5) Objects serialized through pointers no longer require a default constructor. Any constructor can be supported. This implies that const values and references can be saved and restored for objects serialized through pointers.
6) System should function on platorms that fail to properly implement partial ordering for function templates (e.g MSVC 6)
7) library, test and demo build and function properly on MINGW as well as MSVC 7.0 8) More complete documentation.
My original list of requirements was:
1) Code portability - depend only on ANSI C++ facilities.
2) Code economy - exploit features of C++ such as RTTI, templates, and multiple inheritence, etc where appropriate to make code shorter and simpler to use.
3) Independent versioning for each class definition. That is, when a class definition changed, older files can still be imported to the new version of the class.
4) Pointer persistence. Pointers and the objects they point to are restored to a state equivalent to the original state when the objects were stored. This includes proper restoration of multiple pointers to the same object.
5) Persistence of STL containers
6) Archive portability - should be portable from one platform to another.
7) Orthogonal specification of file stream output to permit seamless filtering (e.g. encryption, compression, etc).
8) Non-intrusive. permit serializaton to be applied to unaltered classes. That don't require that classes to be serialized be derived from a specific base class or implement specified member functions. This is necessary to easily permit serialization to be applied to classes from class libraries that we don't want to have to alter.
9) Absolute minimal coding required to add serialization to ones program Robert Ramey
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk