Questions about SRFI-38

Charles Turner chturne@gmail.com
Thu May 12 00:44:00 GMT 2011


On 12/05/2011 01:22, Per Bothner wrote:
 > OTOH you could argue this is a symptom of my penchent for 
micro-optimization

Heh, I'd appreciate your concerns when such issues crop up. I'm fresh 
out of the dreaded first-year university Java course, where development 
of efficiency intuition wasn't done at all. I suppose at some point I 
should check out the JVM specification from the library to get a feel 
for what's costly and what isn't. I've heard it's a pleasant read for a 
specification.

> On 05/11/2011 03:06 PM, Jamison Hope wrote:
>> Per, a comment near the top of gnu.text.PrettyWriter mentions that it's
>> based upon SBCL's pprint.lisp; how slight is that connection at this 
>> point?
>> Would reading the analogous Lisp source help Charles to understand 
>> what's
>> going on, or just confuse him more?
>
> I guess it might.  I don't remember how well-commented pprint.lisp is -
> probably not any better than PrettyWriter.java.  It also depends on 
> how fluent
> Charles is on reading Lisp as opposed to reading Java.

As I understand new parts of the pretty printer, I'm documenting my 
understanding heavily. Almost to the point where it might be a bit too 
much for a source file I fear. I could maybe create a separate document 
describing how the data structures are used (hopefully at some point 
this will be a possibility :-)) that's disjoint from the source code. A 
poor man's Literate Program.

I did investigate the pprint.lisp file from the sbcl source. The are no 
further comments in that file than Per's port, the port to Java is still 
very similar to the current pprint.lisp file in use with sbcl. The 
comments are mostly copied verbatim to Java. I did try understanding how 
the Lisp version worked, but unfortunately I couldn't follow it 
precisely enough to get my head around how the data structures are used 
(I am making some progress now with the Java version). I don't yet 
understand how CL's structures work, or how macro's work (I haven't done 
much with macro's in Scheme either I'm afraid). Basically, it was 
different enough to Scheme to take the air out of my sails. It's 
worrying how much trouble I'm having reading the Java version when Per 
just went through the Lisp version and seemingly translated it to Java 
without any trouble. :-P

>> Will the output of the first pass be saved somewhere for the entire
>> contents of the ReplDocument, or will the pretty printer just take
>> the document contents as previously displayed (i.e. one huge String),
>> remove all the line breaks, and insert new line breaks appropriate for
>> the new width?
> The problem is this ties us to Swing, which is rather old and not
> super-portable: We want to able to pretty-print when outputting to
> a terminal/console, to a webpage, to swt, and so on.

I haven't got this far yet. I'm still trying to figure out how to add 
the extra formatting tokens into the pretty printer's data structures. 
My proposals time line has changed a bit in lieu of SRFI-38 being my 
top-priority, so I hope to finish the integration and re-breaking 
feature by the midterm evaluation. Thanks for the information though.
>
>> I suppose my real question is: what information is there in the output
>> of the first pass which is lost by the time s-expressions (or whatever)
>> are written to the Document?
>
> The logical structure (grouping).  Also, the different kinds of spaces
> and newlines.
And hopefully at some point back references and position makers for 
print-circle notation.

 > Note "non-ragged paragraphs" is the goal of "justification".  We're not
 > attempting that - just "line-breaking".
 >
 > Also note that enforcing a minimal width isn't really possible unless
 > you also support something akin to "hyphenation".
 >>
 >> Ugh, even if Kawa supported such a thing, I think I would rather 
leave words
 >> intact. Just have the pretty printer adjust white space; if 
some-really-long-symbol
 >> extends beyond the desired width, either move the whole thing to the 
next
 >> line, or just make sure the next token is on the next line. (Of 
those two
 >> options, the second is probably simpler, as you might otherwise end up
 >> attempting to insert an infinite number of newlines before an 
81-character
 >> symbol...

Sorry, I realise I used completely the wrong terminology here, but at no 
point was I considering worrying about justifying Scheme :-). My point 
on the minimum window width (and by window I'm referring to a Swing 
pane) is to limit how small in the horizontal direction a user can 
resize to, but I suppose there's no knowing how long a symbol might be 
even in a miser printing. I'm no longer sure why DrRacket does this now. 
I suppose there's really no getting around the fact that in certain 
situations, the pretty printer won't be able to make the output pretty.

Side note: It seems that other Lisp system have dispatch tables for 
their pretty printers, which allows users to supply pretty printing 
information for custom structures. This seems like a nice feature, I 
wonder if it would be wanted in Kawa? I was perusing the Allegro 
documentation when I came across that idea.





More information about the Kawa mailing list