caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Pierre Weis <Pierre.Weis@inria.fr>
To: skaller@ozemail.com.au (John Max Skaller)
Cc: tl001@online.no, caml-list@inria.fr
Subject: Re: [Caml-list] Evaluation Order
Date: Tue, 12 Jun 2001 17:12:40 +0200 (MET DST)	[thread overview]
Message-ID: <200106121512.RAA05131@pauillac.inria.fr> (raw)
In-Reply-To: <3B2384BE.5587F31F@ozemail.com.au> from John Max Skaller at "Jun 11, 101 00:31:26 am"

> Tore Lund wrote:
> 
> >   # let _ =
> >       print_string "before";
> >       print_string "MIDDLE";
> >       print_string "after";;
> >   beforeMIDDLEafter- : unit = ()
> > 
> > but not in this one:
> > 
> >   # let _ =
> >       print_string "before";
> >       Format.print_string "MIDDLE";
> >       print_string "after";;
> >   beforeafterMIDDLE- : unit = ()
> > 
> > What's going on here?  
> 
> 	Buffering I guess. print_string buffers using stdio buffers.
> Format.* has its own buffer, which is flushed into the
> stdout buffer too late.
> 
> 
> -- 
> John (Max) Skaller, mailto:skaller@maxtal.com.au
> 10/1 Toxteth Rd Glebe NSW 2037 Australia voice: 61-2-9660-0850
> checkout Vyper http://Vyper.sourceforge.net
> download Interscript http://Interscript.sourceforge.net
> -------------------
> Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
> To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr

Thank you for pointing out this delicate point.

I added your example and some basic explanation to the FAQ: 

----------------------------------------------------------------------
<H2 ALIGN=LEFT><A NAME="impression_format"> Why some printing material
is mixed up and does not appear in the right order ?</A></H2>

<P>If you use printing functions of the <CODE>format</CODE> module,
you might not mix printing commands from <CODE>format</CODE> with
printing commands from the basic I/O system. In effect, the material
printed by functions from the <CODE>format</CODE> module is delayed
(stored into the pretty-printing queue) in order to find out the
proper line breaking to perform with the material at hand. By contrast
low level output is performed with no more buffering than usual I/O
buffering. So that you can observe the following output differences between
pure low level output:

<PRE>
# print_string "before";
  print_string "MIDDLE";
  print_string "after";;
beforeMIDDLEafter- : unit = ()
</PRE> 

and mixed calls to low and high level printing:

<PRE>
# print_string "before";
  Format.print_string "MIDDLE";
  print_string "after";;
beforeafterMIDDLE- : unit = ()
</PRE>

<P>To avoid this kind of problems you should not mix printing orders
from <CODE>format</CODE> and basic printing commands; that's the reason why
when using functions from the <CODE>format</CODE> module, it is
considered good programming habit to open <CODE>format</CODE> globally
in order to completely mask low level printing functions by the high
level printing functions provided by <CODE>format</CODE>.

<P>N.B: <CODE>format</CODE> printings are automatically flushed after
each evaluation in the interective system. Explicit flushes are
also performed by calling the <CODE>print_newline</CODE> function that
emits a line break and empties the pretty printer queue.
----------------------------------------------------------------------

All constructive criticisms are warmly welcome.

Best regards,

Pierre Weis

INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://pauillac.inria.fr/~weis/


-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


  reply	other threads:[~2001-06-12 15:12 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-09 15:59 David McClain
2001-06-09 20:17 ` Brian Rogoff
2001-06-09 23:12   ` David McClain
2001-06-09 23:28     ` David McClain
2001-06-10  1:04       ` Dave Mason
2001-06-10  2:25         ` David McClain
2001-06-11 13:03           ` Dave Mason
2001-06-12 17:55             ` John Max Skaller
2001-06-13 16:54               ` Frederick Smith
2001-06-13 21:43                 ` John Max Skaller
2001-06-10  1:06       ` Charles Martin
2001-06-10  2:27         ` David McClain
2001-06-10 11:18         ` Tore Lund
2001-06-10 13:11           ` Tore Lund
2001-06-10 14:31           ` John Max Skaller
2001-06-12 15:12             ` Pierre Weis [this message]
2001-06-10 10:40       ` Joerg Czeranski
2001-06-10 14:06       ` John Max Skaller
2001-06-11 12:59         ` Dave Mason
2001-06-12 17:34           ` John Max Skaller
2001-06-10 13:47   ` John Max Skaller
2001-06-10 16:47     ` Brian Rogoff
2001-06-10 17:27       ` Dave Mason
2001-06-12 16:10       ` John Max Skaller
2001-06-09 23:19 ` John Max Skaller
2001-06-10  2:44 David McClain
2001-06-10  2:48 ` Patrick M Doane
2001-06-10  5:51   ` David McClain
2001-06-10 17:59 Damien Doligez
2001-06-10 18:28 ` Dave Mason
2001-06-15 17:00 Manuel Fahndrich
2009-06-14 16:36 evaluation order Christophe Raffalli
2009-06-14 19:40 ` [Caml-list] " Jon Harrop
2009-06-14 21:12   ` Christophe Raffalli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200106121512.RAA05131@pauillac.inria.fr \
    --to=pierre.weis@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=skaller@ozemail.com.au \
    --cc=tl001@online.no \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).