SERIALIZE-IN-BOOKS.html -- ACL2 Version 6.3

## SERIALIZE-IN-BOOKS

using serialization efficiently in books

    Major Section:  SERIALIZE

Our serialize scheme was developed in order to allow very large ACL2 objects to be loaded into books. Ordinarily this is carried out using `serialize-read` within a `make-event`, e.g.,

      (make-event (mv-let (obj state)
                          (serialize-read "my-file")
                          (value `(defconst *my-file* ',obj))))

But this scheme is not particularly efficient.

During `certify-book`, the actual call of `serialize-read` is carried out, and this is typically pretty fast. But then a number of possibly inefficient things occur.

> - The ACL2 function `bad-lisp-object` is run on the resulting object. This is memoized for efficiency, but may still take considerable time when the file is very large.

> - The checksum of the resulting object is computed. This is also memoized, but as before may still take some time.

> - The object that was just read is then written into book.cert, essentially with `serialize-write`. This can take some time, and results in large certifiate files.

Then, during include-book, the `make-event` expansion of is loaded. This is now basically just a `serialize-read`.

The moral of the story is that using serialize will only help your `certify-book` time, and it only impacts a portion of the overall time.

To avoid this overhead, we have developed an UNSOUND alternative to `serialize-read`, which is available only by loading an additional book. So, if the above scheme is not performing well for you, you may wish to see the community book `serialize/unsound-read`.