[MLton-user] StreamIOExtra.anon.first.doit
Scott Cruzen
sic@lerp.com
Wed, 23 Feb 2005 12:14:07 -0800
--HcAYCG3uE/tztfnV
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
If the attached program is invoked as tail and given a file that does
not grow, it constantly allocates memory. I think it's a general
problem that inputN at the end of a file allocates memory.
I ran it under the profiler and see that StreamIOExtra.anon.first.doit
is allocating the most.
I think this is around line 501 of stream-io.fun in inputN
I'm not sure if it's a bug exactly. If not, any suggestions for
fixing readline.sml?
Thanks,
Scott
--HcAYCG3uE/tztfnV
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="readline.sml"
fun tailf f stream =
let
val (s, stream') =
case TextIO.StreamIO.inputLine stream of
SOME s => s
| NONE =>
(OS.Process.sleep (Time.fromSeconds 1)
; TextIO.StreamIO.inputN (stream, 1))
in
(f s; tailf f stream')
end
fun cat f stream =
case TextIO.StreamIO.inputLine stream of
SOME (s,stream') => (f s; cat f stream')
| NONE => ()
val _ =
let
val x =
if String.isSuffix "tail" (CommandLine.name()) then
tailf
else
cat
val args = CommandLine.arguments()
val streams =
if List.null args then
[TextIO.getInstream TextIO.stdIn]
else
map (TextIO.getInstream o TextIO.openIn) args
in
map (x print) streams
end
--HcAYCG3uE/tztfnV--