Skip to content
  • Simon Marlow's avatar
    [project @ 2001-05-18 16:54:04 by simonmar] · d9af408e
    Simon Marlow authored
    I/O library rewrite
    -------------------
    
    This commit replaces the old C/Haskell I/O implementation with a new
    Haskell-only one using the new FFI & hsc2hs.
    
    main points:
    
       - lots of code deleted: we're about 3000 lines of C lighter,
         but the amount of Haskell code is about the same.
    
       - performance is ok: some operations are faster, others are
         slower.  There's still some tuning to do, though.
    
       - the new library is designed to handle read/write streams
         much better: a read/write stream gets a special kind of
         handle internally called a "DuplexHandle", which actually
         contains two separate handles, one for writing and one for
         reading.  The upshot is that you can do simultaneous reading
         and writing to/from a socket or FIFO without any locking
         problems.  The effect is similar to calling socketToHandle
         twice, except that finalization works properly (creating
         two separate Handles could lead to the socket being closed
         too early when one of the Handles is GC'd).
    
       - hConnectTo and withHandleFor are gone (no one responded to
         my mail on GHC users, but we can always bring 'em back if
         necessary).
    
       - I made a half-hearted attempt at keeping the system-specific
         code in one place: see PrelPosix.hsc.
    
       - I've rearranged the I/O tests and added lots more.
         ghc/tests/lib/IO now contains Haskell 98-only IO tests,
         ghc/test/lib/{IOExts, Directory, Time} now contain tests for
         the relevant libraries.  I haven't quite finished in here yet,
         the IO tests work but the others don't yet.
    
       - I haven't done anything about Unicode yet, but now we can
         start to discuss what needs doing here.  The new library
         is using MutableByteArrays for its buffers because that
         turned out to be a *lot* easier (and quicker) than malloc'd
         buffers - I hope this won't cause trouble for unicode
         translations though.
    
    WARNING: Windows users refrain from updating until we've had a chance
    to fix any issues that arise.
    
    Testing: the basic H98 stuff has been pretty thoroughly tested, but
    the new duplex handle stuff is still a little green.
    d9af408e