[plt-scheme] 299.29

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sat Jan 29 09:54:11 EST 2005

The exp-tagged code in CVS for MzScheme and MrEd is now version 299.29.

This version includes a significant change in output buffering:

 * File-stream output ports (including file ports, the initial output
   port, and ports created by `subprocess') are now block-buffered by
   default, instead of line-buffered. The exception is when an output
   port corresponds to a terminal, in which case it is line-buffered
   by default. Also, the initial error port remains unbuffered.

   This change is especially likely to affect stdio-based communication
   among OS-level processes. For example, when communicating with an
   ispell subprocess, adding a newline at the end of a command
   previously would have been enough to send the command to ispell.
   Now, the output must be flushed explicitly (using `flush-output') or
   the buffer mode must be explicitly changed to by-line (using
   `file-stream-muffer-mode').

   TCP ports are not file-stream ports, and TCP output remains
   unbuffered.

These new buffering conventions are standard. I originally resisted the
standard conventions, because I find them confusing. For example, if
you put

 (let loop ([n 0])
   (fprintf (current-error-port) "ERR ~a~n" n)
   (fprintf (current-output-port) "OUT ~a~n" n)
   (loop (add1 n)))

in loop.ss and run

  mzscheme -r loop.ss

then your terminal shows alternating "ERR" and "OUT", but in csh

  mzscheme -r loop.ss >& out

groups many "ERR"s and "OUT"s together in the "out" file, instead of
always interleaving.

But I've often regretted MzScheme's deviation from standard buffering
conventions, and the v300 switchover seems like a good time to change.

As always, feedback on this change is welcome.


Other changes in v299.29:

 * Changed Mac OS preferences file name to "org.plt-scheme.prefs.ss".

 * Added binding of greek-lambda character (code point #x03BB) to
   syntax that expands to `lambda'. This lambda is exported by the
   `mzscheme' module.

   DrScheme's "Insert Lambda" menu item now merely inserts a lambda
   character, instead of a special object. (Old files with inserted
   lambdas still contain the special object.)

 * Changed the default mapping for the 'default font in PostScript from
   Times to Helvetica


Matthew



Posted on the users mailing list.