1 <Sect1 id="release-4-04">
2 <Title>Release notes for version 4.04—7/99
11 <Literal>Weak</Literal> library changes:
16 ``Finalise'' is now spelt ``finalize'' in all function names.
22 <Function>finalize</Function> now runs the finalizer immediately, and
23 waits for it to complete before returning.
29 <Function>mkWeak</Function> now takes a <Literal>Maybe (IO ())</Literal> for the finalizer,
30 and <Function>mkWeakNoFinalizer</Function> is removed.
36 A weak pointer whose key is itself a weak pointer will now do the right
47 Changed representation of <Literal>Integer</Literal> type to speed up
48 computations on small integers. The performance of <Literal>Integer</Literal> is now
49 only slightly slower than <Literal>Int</Literal> for values between <Constant>minBound::Int</Constant>
50 and <Constant>maxBound::Int</Constant>.
56 On Win32 platforms, added support for using (and producing) dynamic
57 link libraries (DLLs) containing ghc-compiled code.
63 Added <Option>-funbox-strict-fields</Option> for unboxing/unpacking strict
70 GHC now has a license! See <XRef LinkEnd="License">.
76 Added CPR analysis, which reduces allocation by unboxing function results
77 (thanks to Kevin Glynn <Email>keving@cs.mu.oz.au</Email>).
83 UsageSP analysis added, but not yet functional.
89 Added a simple common sub-expression analysis pass.
95 Implemented update-in-place for certain very restricted cases.
101 Replaced GHC's old and worn yacc/lex parser with a new one based on Happy.
102 Fixed several Haskell 98 non-conformance issues in the process.
108 Added <Function>Concurrent.yield :: IO ()</Function>.
114 Added <Literal>RULES</Literal> pragma—transformation rules for Haskell source.
115 This is used for list fusion: now intermediate lists between map,
116 foldr, list comprehensions are removed automatically.
122 Unregisterised/unmangled builds now work.
128 Much performance tuning: GHC 4.04 produces faster code than all previous
135 GHC now defines <Literal>__HASKELL98__</Literal> when compiling files with <Option>-cpp</Option>.
141 <Literal>hppa1.1-hp-hpux</Literal> port reinstated.
147 New operations for unsafely thawing byte arrays:
148 <Function>unsafeThaw{Byte,ST,IO}Array</Function>.
154 <Command>mkdependHS</Command> now lives in GHC's lib directory, not the
155 binary directory. It isn't intended to be run standalone, only via
156 <Command>ghc -M</Command>.
162 Asynchronous exceptions are now supported (see the libary documentation for Concurrent Haskell). New operations:
163 <!-- Want to add external ref here -->
169 <Function>Exception.killThread</Function> now raises an exception
170 (<Function>AsyncException.KilledThread</Function>) in the killed thread.
176 <Function>Exception.raiseInThread</Function> allows a thread to raise an
177 exception in another thread.
183 <Function>Concurrent.myThreadId</Function> returns the <Literal>ThreadId</Literal> of the calling thread.
189 Stack overflow results in <Constant>AsyncException.StackOverflow</Constant>
190 being raised in the offending thread.
201 Assertion failures now raise an <Constant>AssertionFailed</Constant> exception.
207 Added simple high-level interface to the Regex library, see the libraries manual.
213 <Function>forkIO</Function> now handles any uncaught exceptions cleanly.
219 <Function>integer2Int#</Function> isn't sign preserving any longer, but modulo <Constant>(maxBound::Int + 1) * 2</Constant>.
225 <Option>-ddump-rdr</Option> is now called <Option>-ddump-parsed</Option>.
231 Signal handling with the <Literal>Posix</Literal> library now works.
237 Many, many bugs fixed.