[cvs-nhc98] patch applied (hat): A big re-organisation of I/O. Two
main changes:
Malcolm Wallace
Malcolm.Wallace at cs.york.ac.uk
Tue Oct 10 06:59:55 EDT 2006
Wed Oct 18 05:43:27 PDT 2000 malcolm
* A big re-organisation of I/O. Two main changes:
(1) Foreign functions of IO type (going via the primitive FFI) are now
handled via wrapper functions _mkIOokN (where N is the arity) rather
than by the special bytecode MKIORETURN.
(2) The internal runtime system representations of file handles and
ForeignObjs have been made simpler. ForeignObjs are now the basic
mechanism, with file handles as just one instance of a ForeignObj.
Between them, these solve several bugs:
* a shared IO computation was only executed once
* an IO CAF (i.e. zero-arity) was only executed once whether shared or not
* tracing of foreign IO was also suspect for the same reasons
* hClose'd files were not being deallocated quickly enough, leading to
some I/O-intensive programs hitting the file allocation limit
unnecessarily
* it was too difficult for users to get hold of a file handle as an
ordinary value to use in foreign functions
M ./src/compiler98/Case.hs -1 +1
M ./src/compiler98/DbgDataTrans.hs -22 +10
M ./src/compiler98/DbgTrans.hs -2
M ./src/compiler98/Extract.hs -2 +1
A ./src/compiler98/FFITrans.hs
M ./src/compiler98/Foreign.hs -23 +27
M ./src/compiler98/Main.hs -14 +47
M ./src/compiler98/Makefile -1 +1
M ./src/compiler98/Need.hs +2
M ./src/compiler98/PPSyntax.hs -1 +1
M ./src/compiler98/Parse.hs -11 +9
M ./src/compiler98/ParseLex.hs -1 +2
M ./src/compiler98/PosCode.hs -1 +2
M ./src/compiler98/SccModule.hs -8 +10
M ./src/compiler98/StrPos.hs -1 +1
M ./src/compiler98/Syntax.hs -5 +8
M ./src/compiler98/TokenId.hs -2 +7
M ./src/compiler98/TokenInt.hs -3 +7
M ./src/compiler98/Type.hs -113 +209
M ./src/old/runtime/io.c -10 +9
More information about the Cvs-nhc98
mailing list