1 <sect1 id="release-4-07">
2 <title>Release notes for version 4.07 (May 2000)</title>
5 <title>User-visible compiler changes</title>
9 <para>New profiling subsystem, based on cost-centre stacks.
10 See <xref linkend="profiling">.</para>
14 <para>The x86 native code generator has been reworked
15 considerably, and now works reliably. Using the NCG rather
16 than compiling via C reduces compilation times by roughly a
17 half while having minimal effect on the run-time of the
18 compiled program (about 2-4% slower, worse for floating-point
19 intensive programs).</para>
21 <para>The NCG is used by default for non-optimising compiles.
22 You can use it with <option>-O</option> by adding the
23 <option>-fasm-x86</option> flag to GHC's command
24 line, <emphasis>after</emphasis> <option>-O</option>.</para>
28 <para>Implicit parameters. This Haskell extension gives a
29 statically-typed version of dynamic scoping that avoids the
30 worst problems of dynamic scoping in lisp. See the
31 <ulink url="http://www.cse.ogi.ed/~jlewis/implicit.ps.gz">POPL paper</ulink>
32 for more details. It is enabled by <option>-fglasgow-exts</option>.
37 <para>New <literal>DEPRECATED</literal> pragma for marking
38 outdated interfaces as deprecated.</para>
42 <para>New flag: <option>-fdump-minimal-imports</option>, which
43 dumps a file <literal>M.imports</literal> that contains the
44 (allegedly) minimal bunch of imports needed by the current
49 <para>New “package” system for libraries. See
50 <xref linkend="packages"> for the details.</para>
54 <para>The long-standing bug that caused some programs which
55 used <link linkend="trace"><literal>trace</literal></link> to
56 exit with a deadlock error has been fixed.</para>
60 <para>Trying to put into a full <link
61 linkend="sec-MVars"><literal>MVar</literal></link> will now
63 linkend="PutFullMVar"><literal>PutFullMVar</literal></link>
68 <para>If a thread is about to be garbage collected, because it
69 is waiting on an <literal>MVar</literal> that no other thread
70 has access to, then it will now be sent the <link
71 linkend="BlockedOnDeadMVar"><literal>BlockedOnDeadMVar</literal></link>
76 <para>A thread that is found to be blocked against itself
77 (i.e. is black holed) is now sent a
78 <literal>NonTermination</literal> exception.</para>
82 <para>Operations which may <emphasis>block</emphasis>, such as
83 <literal>takeMVar</literal>, <literal>raiseInThread</literal>,
84 and several I/O operations, may now receive asynchronous
85 exceptions even in the scope of a
86 <literal>blockAsyncExceptions</literal>. These are called
87 <firstterm>interruptible</firstterm> operations. See <xref
88 linkend="interruptible-operations"> for more details.</para>
92 <para>Result type signatures now work.</para>
96 <para>A truckload of bugfixes.</para>
103 <title>User-visible library changes</title>
107 <para>The FFI has been revised and expanded; see <xref
108 linkend="sec-Foreign"> and <xref linkend="sec-CTypes">.</para>
112 <para>HaXml, a library for parsing and generating XML, has
113 been added to the <literal>text</literal> package (<xref
114 linkend="sec-haxml">).</para>
118 <para>The <literal>QuickCheck</literal> library for performing
119 functional testing has been added to the
120 <literal>util</literal> package.</para>
124 <para>Two new experimental interfaces to arrays:
125 <literal>IArray</literal> for immutable arrays (<xref
126 linkend="sec-iarray">), and <literal>MArray</literal> for
127 mutable arrays (<xref linkend="sec-marray">).</para>
129 <para>Comments on these interfaces are welcome; eventually
130 we'd like them to replace <literal>ByteArray</literal>,
131 <literal>STArray</literal> and
132 <literal>IOArray</literal>.</para>
136 <para>New function: <link
137 linkend="tryTakeMVar"><literal>tryTakeMVar</literal></link>.</para>
141 <para><literal>MutableArray</literal> has gone away, use
142 <literal>STArray</literal> (see <xref linkend="sec-ST">)
147 <para><literal>hPutBuf</literal>,
148 <literal>hPutBufBA</literal>, <literal>hGetBuf</literal>, and
149 <literal>hGetBufBA</literal>, have been renamed to
150 <literal>hPutBufFull</literal>,
151 <literal>hPutBufBAFull</literal>,
152 <literal>hGetBufFull</literal>, and
153 <literal>hGetBufBAFull</literal>. Functions with the old
154 names still exist, but have slightly different semantics. See
155 <xref linkend="sec-bulk-transfers"> for more details.</para>
161 <title>Internal changes</title>
165 <para><literal>Con</literal> is gone; the
166 <literal>CoreExpr</literal> type is simpler.</para>
170 <para><literal>NoRepLits</literal> have gone.</para>
174 <para>Better usage info in interface files, which means less
175 recompilation.</para>
179 <para>CCall primop is tidied up.</para>
183 <para>Constant folding is now done by Rules.</para>
187 <para>Lots of hackery in the simplifier.</para>
191 <para>Improvements in CPR and strictness analysis.</para>
201 ;;; Local Variables: ***
203 ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter" "sect1") ***