[project @ 2000-05-22 13:43:53 by rrt]
[ghc-hetmet.git] / ghc / docs / users_guide / 4-07-notes.sgml
1 <sect1 id="release-4-07">
2   <title>Release notes for version 4.07 (May 2000)</title>
3
4   <sect2>
5     <title>User-visible compiler changes</title>
6
7     <itemizedlist>
8       <listitem>
9         <para>New profiling subsystem, based on cost-centre stacks.
10         See <xref linkend="profiling">.</para>
11       </listitem>
12
13       <listitem>
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>
20
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>
25       </listitem>
26
27       <listitem>
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>.
33         </para>
34       </listitem>
35
36       <listitem>
37         <para>New <literal>DEPRECATED</literal> pragma for marking
38         outdated interfaces as deprecated.</para>
39       </listitem>
40
41       <listitem>
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
45         module.</para>
46       </listitem>
47
48       <listitem>
49         <para>New &ldquo;package&rdquo; system for libraries.  See
50         <xref linkend="packages"> for the details.</para>
51       </listitem>
52
53       <listitem>
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>
57       </listitem>
58
59       <listitem>
60         <para>Trying to put into a full <link
61         linkend="sec-MVars"><literal>MVar</literal></link> will now
62         raise a <link
63         linkend="PutFullMVar"><literal>PutFullMVar</literal></link>
64         exception.</para>
65       </listitem>
66
67       <listitem>
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>
72         exception.</para>
73       </listitem>
74
75       <listitem>
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>
79       </listitem>
80
81       <listitem>
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>
89       </listitem>
90
91       <listitem>
92         <para>Result type signatures now work.</para>
93       </listitem>
94
95       <listitem>
96         <para>A truckload of bugfixes.</para>
97       </listitem>
98       
99     </itemizedlist>
100   </sect2>
101
102   <sect2>
103     <title>User-visible library changes</title>
104
105     <itemizedlist>
106       <listitem>
107         <para>The FFI has been revised and expanded; see <xref
108         linkend="sec-Foreign"> and <xref linkend="sec-CTypes">.</para>
109       </listitem>
110
111       <listitem>
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>
115       </listitem>
116
117       <listitem>
118         <para>The <literal>QuickCheck</literal> library for performing
119         functional testing has been added to the
120         <literal>util</literal> package.</para>
121       </listitem>
122
123       <listitem>
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> 
128
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>
133       </listitem>
134
135       <listitem>
136         <para>New function: <link
137         linkend="tryTakeMVar"><literal>tryTakeMVar</literal></link>.</para>
138       </listitem>
139
140       <listitem>
141         <para><literal>MutableArray</literal> has gone away, use
142         <literal>STArray</literal> (see <xref linkend="sec-ST">)
143         instead.</para>
144       </listitem>
145
146       <listitem>
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>
156       </listitem>
157     </itemizedlist>
158   </sect2>
159
160   <sect2>
161     <title>Internal changes</title>
162
163     <itemizedlist>
164       <listitem>
165         <para><literal>Con</literal> is gone; the
166         <literal>CoreExpr</literal> type is simpler.</para>
167       </listitem>
168
169       <listitem>
170         <para><literal>NoRepLits</literal> have gone.</para>
171       </listitem>
172
173       <listitem>
174         <para>Better usage info in interface files, which means less
175         recompilation.</para>
176       </listitem>
177
178       <listitem>
179         <para>CCall primop is tidied up.</para>
180       </listitem>
181
182       <listitem>
183         <para>Constant folding is now done by Rules.</para>
184       </listitem>
185
186       <listitem>
187         <para>Lots of hackery in the simplifier.</para>
188       </listitem>
189
190       <listitem>
191         <para>Improvements in CPR and strictness analysis.</para>
192       </listitem>
193   
194     </itemizedlist>
195
196   </sect2>
197
198 </sect1>
199
200 <!-- Emacs stuff:
201      ;;; Local Variables: ***
202      ;;; mode: sgml ***
203      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter" "sect1") ***
204      ;;; End: ***
205  -->