[Haskell-cafe] Re: OCaml list sees abysmal Language Shootout
results
Peter Simons
simons at cryp.to
Thu Oct 7 15:42:02 EDT 2004
Ketil Malde writes:
> Couldn't readFile et al. provide the standard interface,
> but use hGetBuf tricks (e.g. from your 'wc' entry) behind
> the curtains?
No amount of hGetBuf'ing will speed the program up if the
problem is the algorithm. I/O comes _sequentially_, and
every program that doesn't process the input sequentially
will require some form of buffering. Lazy I/O provides a
great general-purpose buffering mechanism, but it simply
can't be as fast of as efficient as hand-written code.
IMHO, a good I/O API forces you to write a stateful callback
function (that's how I implemented it in BlockIO), so _if_
you want to buffer something, you can use your state for
that. But the I/O driver doesn't buffer, what has been read
and processed is gone. Then the I/O part will _always_ be as
fast as possible, and the design encourages you to process
the data sequentially without looking forward/backward too
much.
It simply means writing a
Char -> StateT st IO () -- stream processor
or String -> StateT st IO () -- line oriented
function to handle a _part_ of the input every time, rather
than a
String -> IO ()
function that handles the entire input at once.
Peter
More information about the Haskell-Cafe
mailing list