Buffering up in Tcl - the empty coke can comparison
Archive - Originally posted on "The Horse's Mouth" - 2007-11-10 06:33:13 - Graham EllisA comment on buffering in Tcl ....
if {1 == 0} {
When you finish drinking a can of Coke, you don't call
your local recycling plant up straight away and have them
send a truck around to collect the empty - that would be
inefficient to put it mildly. And in the same way,
a computer doesn't always save its output character by
character to the disc or screen - rather it buffers it up.
In most languages a clever strategy controls when the buffer
really is written (flushed) so that it's not very common for
the programmer to have to add an explicit flush request.
With Tcl, the default is that the output buffer flushes
each time it receives a new line character, which works
well enough most of the time. However, there are occasions
that you'll want to use the -nonewline option to puts to
allow you to generate a prompt and leave the cursor hanging
on the same line awaiting input from the user, and in such
cases you'll need an extra flush command.
}
puts -nonewline "How old are you "
flush stdout
set age [gets stdin]
puts "You are $age years old then"
if {1 == 0} {
Where you have multiple user inputs, you may prefer to
use a proc to read inputs and encapsulate the flush within
it, or you may prefer to run
fconfigure stdout -buffering none
which (technically) turns autoflush mode on rather than
turning buffering off!
}
If you want to comment a whole block of code .... you might like to use my little trick of testing for the impossible - "1 == 0" in the above - which lets you put code aside neatly, cleanly and nested. You'll see that I've even used it to provide documentation for today's entry ...