[Python-Dev] Re: marshal / unmarshal

Michael Hudson mwh at python.net
Sun Apr 10 20:08:56 CEST 2005


Tim Peters <tim.peters at gmail.com> writes:

> marshal shouldn't be representing doubles as decimal strings to begin
> with.  All code for (de)serialing C doubles should go thru
> _PyFloat_Pack8() and _PyFloat_Unpack8().  cPickle (proto >= 1) and
> struct (std mode) already do; marshal is the oddball.
>
> But as the docs (floatobject.h) for these say:
>
> ...
>  * Bug:  What this does is undefined if x is a NaN or infinity.
>  * Bug:  -0.0 and +0.0 produce the same string.
>  */
> PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
> PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
> ...
>  * Bug:  What this does is undefined if the string represents a NaN or
>  * infinity.
>  */
> PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
> PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);

OTOH, the implementation has this comment:

/*----------------------------------------------------------------------------
 * _PyFloat_{Pack,Unpack}{4,8}.  See floatobject.h.
 *
 * TODO:  On platforms that use the standard IEEE-754 single and double
 * formats natively, these routines could simply copy the bytes.
 */

Doing that would fix these problems, surely?[1]

The question, of course, is how to tell.  I suppose one could jsut do
it unconditionally and wait for one of the three remaining VAX
users[2] to compile Python 2.5 and then notice.

More conservatively, one could just do this on Windows, linux/most
architectures and Mac OS X.

Cheers,
mwh

[1] I'm slighyly worried about oddball systems that do insane things
    with the FPU by default -- but don't think the mooted change would
    make things any worse.

[2] Exaggeration, I realize -- but how many non 754 systems are out
    there?  How many will see Python 2.5?

-- 
  If you give someone Fortran, he has Fortran.
  If you give someone Lisp, he has any language he pleases.
    -- Guy L. Steele Jr, quoted by David Rush in comp.lang.scheme.scsh


More information about the Python-Dev mailing list