[racket-dev] `define-serializable-struct` and the `deserialize-info...` export

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Fri Nov 8 13:35:48 EST 2013

Currently, `(define-serializable-struct id ....)` expands to `(provide
deserialize-info:id-v0)`. The `deserialize-info...` identifier needs to
be exported to make things work, but the export is a hassle: the
programmer doesn't care about it, it's not usually documented,
re-exporting modules don't want to re-export it, and so on.

I'm planning to change `define-serializable-struct` so that the export
is put in a `deserialize-info` submodule, where it should cause less
trouble. This is a slightly backward-incompatible change; I found a
couple of modules that explicitly excluded `deserialize-info...` on
import, and so those exclusions would have to be dropped.

The change could also be backward-incompatible by changing the protocol
for providers of deserialization other than `define-serializeable-struct`.
That problem is easier to address: `deserialize` can try a
`deserialze-info` submodule first, and if the export isn't found, then
it can try the original module.


Posted on the dev mailing list.