\section{Built-in Module \sectcode{marshal}}
\label{module-marshal}

\bimodindex{marshal}
This module contains functions that can read and write Python
values in a binary format.  The format is specific to Python, but
independent of machine architecture issues (e.g., you can write a
Python value to a file on a PC, transport the file to a Sun, and read
it back there).  Details of the format are undocumented on purpose;
it may change between Python versions (although it rarely does).%
\footnote{The name of this module stems from a bit of terminology used
by the designers of Modula-3 (amongst others), who use the term
``marshalling'' for shipping of data around in a self-contained form.
Strictly speaking, ``to marshal'' means to convert some data from
internal to external form (in an RPC buffer for instance) and
``unmarshalling'' for the reverse process.}

This is not a general ``persistency'' module.  For general persistency
and transfer of Python objects through RPC calls, see the modules
\code{pickle} and \code{shelve}.  The \code{marshal} module exists
mainly to support reading and writing the ``pseudo-compiled'' code for
Python modules of \samp{.pyc} files.
\stmodindex{pickle}
\stmodindex{shelve}
\obindex{code}

Not all Python object types are supported; in general, only objects
whose value is independent from a particular invocation of Python can
be written and read by this module.  The following types are supported:
\code{None}, integers, long integers, floating point numbers,
strings, tuples, lists, dictionaries, and code objects, where it
should be understood that tuples, lists and dictionaries are only
supported as long as the values contained therein are themselves
supported; and recursive lists and dictionaries should not be written
(they will cause infinite loops).

{\bf Caveat:} On machines where C's \code{long int} type has more than
32 bits (such as the DEC Alpha), it
is possible to create plain Python integers that are longer than 32
bits.  Since the current \code{marshal} module uses 32 bits to
transfer plain Python integers, such values are silently truncated.
This particularly affects the use of very long integer literals in
Python modules --- these will be accepted by the parser on such
machines, but will be silently be truncated when the module is read
from the \code{.pyc} instead.%
\footnote{A solution would be to refuse such literals in the parser,
since they are inherently non-portable.  Another solution would be to
let the \code{marshal} module raise an exception when an integer value
would be truncated.  At least one of these solutions will be
implemented in a future version.}

There are functions that read/write files as well as functions
operating on strings.

The module defines these functions:

\renewcommand{\indexsubitem}{(in module marshal)}

\begin{funcdesc}{dump}{value\, file}
  Write the value on the open file.  The value must be a supported
  type.  The file must be an open file object such as
  \code{sys.stdout} or returned by \code{open()} or
  \code{posix.popen()}.
  
  If the value has (or contains an object that has) an unsupported type,
  a \code{ValueError} exception is raised -- but garbage data will also
  be written to the file.  The object will not be properly read back by
  \code{load()}.
\end{funcdesc}

\begin{funcdesc}{load}{file}
  Read one value from the open file and return it.  If no valid value
  is read, raise \code{EOFError}, \code{ValueError} or
  \code{TypeError}.  The file must be an open file object.

  Warning: If an object containing an unsupported type was marshalled
  with \code{dump()}, \code{load()} will substitute \code{None} for the
  unmarshallable type.
\end{funcdesc}

\begin{funcdesc}{dumps}{value}
  Return the string that would be written to a file by
  \code{dump(value, file)}.  The value must be a supported type.
  Raise a \code{ValueError} exception if value has (or contains an
  object that has) an unsupported type.
\end{funcdesc}

\begin{funcdesc}{loads}{string}
  Convert the string to a value.  If no valid value is found, raise
  \code{EOFError}, \code{ValueError} or \code{TypeError}.  Extra
  characters in the string are ignored.
\end{funcdesc}
