[plt-scheme] Printing Structures without using custom-write

From: Sam TH (samth at ccs.neu.edu)
Date: Wed Oct 10 16:26:50 EDT 2007

On 10/10/07, Eli Barzilay <eli at barzilay.org> wrote:
> On Oct 10, Sam TH wrote:
> > On 10/10/07, Eli Barzilay <eli at barzilay.org> wrote:
> > > On Oct 10, Sam TH wrote:
> > > > On 10/10/07, Eli Barzilay <eli at barzilay.org> wrote:
> > > > > On Oct 10, Sam TH wrote:
> > > > > > I have this already, because it would be very hard to some things
> > > > > > otherwise.  But it's not a total solution - you can't debug your write
> > > > > > handler with printf, because you immediately get an infinite loop.
> > > > > >
> > > > > > Also, it requires having all your structures defined with a macro that
> > > > > > expands to define-struct, which is the case for me, but limits the
> > > > > > applicability of the technique.
> > > > >
> > > > > Can't you have a parameter that conrols your own output, and based on
> > > > > that your printers will spit out the nice output or something that
> > > > > looks like the standard output?
> > > >
> > > > Yes, but then you have to re-implement the standard printer.
> > >
> > > ...which is a one liner, so it shouldn't be a problem in practice.
> >
> > This is false.  It's one line per structure, which is significant for
> > any complex set of structs.
>
> (define simple-output (make-parameter #f))
> (define (printer-wrapper printer)
>   (lambda (obj port write?)
>     (if (simple-output)
>       ((if write? write display) (struct->vector obj) port)
>       (printer obj port write?))))
>
> ...And all you need is to wrap your printers.

And now we've reimplemented the MzScheme behavior.  Which we will have
to fix when it changes.  This is the same problem as the Stepper, on a
much smaller scale.  Reimplementing the behavior of the implementation
is a bad idea.  I don't feel like this should be controversial.

>
>
> > > Conceptually, there may be future extensions to struct printing that
> > > you'll want to have -- but even with that I think that if you want
> > > your own output then you should go all the way with that.
> >
> > I don't even understand what you're suggesting here.
> >
> > Perhaps I didn't make my point clearly enough in my original
> > message.  Mzscheme doesn't currently provide a way to print structs
> > without using custom-write procedures.  Before I implement such a
> > way, I'm interested in people's feelings on the design of such a
> > feature.
>
> I don't understand that.  What's wrong with what it prints by default?
> Or are you talking about readable printouts (which requires
> serialization of random values).

What it prints by default is whatever the custom-write property
prints, which is what we are trying to avoid.

-- 
sam th
samth at ccs.neu.edu


Posted on the users mailing list.