[project @ 2001-02-20 15:44:26 by simonpj]
[ghc-hetmet.git] / ghc / docs / users_guide / 4-08-notes.sgml
1 <sect1 id="release-4-08">
2   <title>Release notes for version 4.08 (July 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>-ddump-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">, <xref linkend="sec-CTypes">, and <xref
109         linkend="sec-CTypesISO"> .</para>
110       </listitem>
111
112       <listitem>
113         <para>HaXml, a library for parsing and generating XML, has
114         been added to the <literal>text</literal> package (<xref
115         linkend="sec-haxml">).</para>
116       </listitem>
117
118       <listitem>
119         <para>The <literal>QuickCheck</literal> library for performing
120         functional testing has been added to the
121         <literal>util</literal> package (<xref
122         linkend="sec-quickcheck">).</para>
123       </listitem>
124
125       <listitem>
126         <para>Two new experimental interfaces to arrays:
127         <literal>IArray</literal> for immutable arrays (<xref
128         linkend="sec-iarray">), and <literal>MArray</literal> for
129         mutable arrays (<xref linkend="sec-marray">). Comments on
130         these interfaces are welcome; eventually we'd like them to
131         replace <literal>ByteArray</literal>,
132         <literal>MutableArray</literal>, <literal>IOArray</literal>,
133         and <literal>STArray</literal>.</para>
134       </listitem>
135
136       <listitem>
137         <para>New function: <link
138         linkend="tryTakeMVar"><literal>tryTakeMVar</literal></link>.</para>
139       </listitem>
140
141       <listitem>
142         <para><literal>hPutBuf</literal>,
143         <literal>hPutBufBA</literal>, <literal>hGetBuf</literal>, and
144         <literal>hGetBufBA</literal>, have been renamed to
145         <literal>hPutBufFull</literal>,
146         <literal>hPutBufBAFull</literal>,
147         <literal>hGetBufFull</literal>, and
148         <literal>hGetBufBAFull</literal>.  Functions with the old
149         names still exist, but have slightly different semantics.  See
150         <xref linkend="sec-bulk-transfers"> for more details.</para>
151       </listitem>
152     </itemizedlist>
153   </sect2>
154
155   <sect2>
156     <title>Internal changes</title>
157
158     <itemizedlist>
159       <listitem>
160         <para><literal>Con</literal> is gone; the
161         <literal>CoreExpr</literal> type is simpler.</para>
162       </listitem>
163
164       <listitem>
165         <para><literal>NoRepLits</literal> have gone.</para>
166       </listitem>
167
168       <listitem>
169         <para>Better usage info in interface files, which means less
170         recompilation.</para>
171       </listitem>
172
173       <listitem>
174         <para>CCall primop is tidied up.</para>
175       </listitem>
176
177       <listitem>
178         <para>Constant folding is now done by Rules.</para>
179       </listitem>
180
181       <listitem>
182         <para>Lots of hackery in the simplifier.</para>
183       </listitem>
184
185       <listitem>
186         <para>Improvements in CPR and strictness analysis.</para>
187       </listitem>
188   
189     </itemizedlist>
190
191   </sect2>
192
193 </sect1>
194
195 <!-- Emacs stuff:
196      ;;; Local Variables: ***
197      ;;; mode: sgml ***
198      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter" "sect1") ***
199      ;;; End: ***
200  -->