###

# Serialization

## To Do

Portable Binary Archives
Performance Testing and Profiling
Back Versioning
Testing for Environments with No RTTI
Additional Case Studies

These are enhancements that the serialization library needs but have not been done. Some of these projects, though tricky, are not huge and would be suitable for someone who has a limited time to spend on them. In particular, they might be of interest as student projects such as the Google Summer of Code.

## Portable Binary Archives

Currently there is a portable binary archive in the examples directory. It is not regularly submitted to the exhaustive boost testing regimen but it is tested occasionally and has been used in production code.

Its missing the following:

- Addition of portable floating point types. This is not trivial. In addition to handling floating point types of varying sizes, It requires handling invalid floating point numbers (NaNs) in a portable manner.
- Some way to test archive portability within the Boost testing regimen.
- Integration into the Boost testing similar to the other archive classes.

## Performance Testing and Profiling

I've managed to setup performance profiling using the following:

- current (as I write this) Boost.Build tools.
- the gcc compiler.
- and a shell script - profile.sh
- library_status program from the tools/regression/src directory

Invoking profile script produces a table which shows the results of each test and links to the actual profile.

The first thing I did was include some of the serialization library tests. It became immediatly apparent that these tests were totally unsuitable for performance testing and that new tests needed to be written for this purpose. These tests would highlight the location of any performance bottlenecks in the serialization library. Whenever I've subjected my code in the past to this type of analysis, I've always been suprised to find bottlenecks in totally unanticipated places and fixing those has always lead to large improvements in performance. I expect that this project would have a huge impact on the utility of the serialization library.

## Back Versioning

It has been suggested that a useful feature of the library would be the ability to create "older versions" of archives. Currently, the library permits one make programs that are guarenteed the ability to load archives with classes of a previous version. But there is not way to save classes in accordance with a previous version. At first I dismissed this a a huge project with small demand. A cursory examination of the code revealed that this would not be very difficult. It would require some small changes in code and some additional tests. Also it would require special treatment in the documentation - perhaps a case study.

## Environments without RTTI

I note that some have commented that this library requires RTTI. This is not strictly true. The examples and almost all the tests presume the existence of RTTI. But it should be possible to use the library without it. The example used for testing is an `extended_typeinfo` implemenation which presumes that all classes names have been exported. So, to make this library compatible for platforms without RTTI, a set of tests, examples and new manual section would have to be created

Revised 1 November, 2008

© Copyright Robert Ramey 2002-2008. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)