43e7ba97e3842d670b7b562768d6fd963d8cd50d
[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>Add the <option>-fasm-x86</option> flag to GHC's command
22         line to enable it.</para>
23       </listitem>
24
25       <listitem>
26         <para>Implicit parameters.  This Haskell extension gives a
27         statically-typed version of dynamic scoping that avoids the
28         worst problems of dynamic scoping in lisp.  See the
29         <ulink url="http://www.cse.ogi.ed/~jlewis/implicit.ps.gz">POPL paper</ulink>
30         for more details.  It is enabled by <option>-fglasgow-exts</option>.
31         </para>
32       </listitem>
33
34       <listitem>
35         <para>New <literal>DEPRECATED</literal> pragma for marking
36         outdated interfaces as deprecated.</para>
37       </listitem>
38
39       <listitem>
40         <para>New flag: <option>-fdump-minimal-imports</option>, which
41         dumps a file <literal>M.imports</literal> that contains the
42         (allegedly) minimal bunch of imports needed by the current
43         module.</para>
44       </listitem>
45
46       <listitem>
47         <para>New &ldquo;package&rdquo; system for libraries.  See
48         <xref linkend="packages"> for the details.</para>
49       </listitem>
50
51       <listitem>
52         <para>The long-standing bug that caused some programs which
53         used <link linkend="trace"><literal>trace</literal></link> to
54         exit with a deadlock error has been fixed.</para>
55       </listitem>
56
57       <listitem>
58         <para>Trying to put into a full <link
59         linkend="sec-MVars"><literal>MVar</literal></link> will now
60         raise a <link
61         linkend="PutFullMVar"><literal>PutFullMVar</literal></link>
62         exception.</para>
63       </listitem>
64
65       <listitem>
66         <para>If a thread is about to be garbage collected, because it
67         is waiting on an <literal>MVar</literal> that no other thread
68         has access to, then it will now be sent the <link
69         linkend="BlockedOnDeadMVar"><literal>BlockedOnDeadMVar</literal></link>
70         exception.</para>
71       </listitem>
72
73       <listitem>
74         <para>A thread that is found to be blocked against itself
75         (i.e. is black holed) is now sent a
76         <literal>NonTermination</literal> exception.</para>
77       </listitem>
78
79       <listitem>
80         <para>Operations which may <emphasis>block</emphasis>, such as
81         <literal>takeMVar</literal>, <literal>raiseInThread</literal>,
82         and several I/O operations, may now receive asynchronous
83         exceptions even in the scope of a
84         <literal>blockAsyncExceptions</literal>.  These are called
85         <firstterm>interruptible</firstterm> operations.  See <xref
86         linkend="interruptible-operations"> for more details.</para>
87       </listitem>
88
89       <listitem>
90         <para>Result type signatures now work.</para>
91       </listitem>
92
93       <listitem>
94         <para>A truckload of bugfixes.</para>
95       </listitem>
96       
97     </itemizedlist>
98   </sect2>
99
100   <sect2>
101     <title>User-visible library changes</title>
102
103     <itemizedlist>
104       <listitem>
105         <para>The FFI has been revised and expanded; see <xref
106         linkend="sec-Foreign"> and <xref linkend="sec-CTypes">.</para>
107       </listitem>
108
109       <listitem>
110         <para>HaXml, a library for parsing and generating XML, has
111         been added to the <literal>text</literal> package (<xref
112         linkend="sec-haxml">).</para>
113       </listitem>
114
115       <listitem>
116         <para>The <literal>QuickCheck</literal> library for performing
117         functional testing has been added to the
118         <literal>util</literal> package.</para>
119       </listitem>
120
121       <listitem>
122         <para>Two new experimental interfaces to arrays:
123         <literal>IArray</literal> for immutable arrays (<xref
124         linkend="sec-iarray">), and <literal>MArray</literal> for
125         mutable arrays (<xref linkend="sec-marray">).</para> 
126
127         <para>Comments on these interfaces are welcome; eventually
128         we'd like them to replace <literal>ByteArray</literal>,
129         <literal>STArray</literal> and
130         <literal>IOArray</literal>.</para>
131       </listitem>
132
133       <listitem>
134         <para>New function: <link
135         linkend="tryTakeMVar"><literal>tryTakeMVar</literal></link>.</para>
136       </listitem>
137
138       <listitem>
139         <para><literal>MutableArray</literal> has gone away, use
140         <literal>STArray</literal> (see <xref linkend="sec-ST">)
141         instead.</para>
142       </listitem>
143
144       <listitem>
145         <para><literal>hPutBuf</literal>,
146         <literal>hPutBufBA</literal>, <literal>hGetBuf</literal>, and
147         <literal>hGetBufBA</literal>, have been renamed to
148         <literal>hPutBufFull</literal>,
149         <literal>hPutBufBAFull</literal>,
150         <literal>hGetBufFull</literal>, and
151         <literal>hGetBufBAFull</literal>.  Functions with the old
152         names still exist, but have slightly different semantics.  See
153         <xref linkend="sec-bulk-transfers"> for more details.</para>
154       </listitem>
155     </itemizedlist>
156   </sect2>
157
158   <sect2>
159     <title>Internal changes</title>
160
161     <itemizedlist>
162       <listitem>
163         <para><literal>Con</literal> is gone; the
164         <literal>CoreExpr</literal> type is simpler.</para>
165       </listitem>
166
167       <listitem>
168         <para><literal>NoRepLits</literal> have gone.</para>
169       </listitem>
170
171       <listitem>
172         <para>Better usage info in interface files, which means less
173         recompilation.</para>
174       </listitem>
175
176       <listitem>
177         <para>CCall primop is tidied up.</para>
178       </listitem>
179
180       <listitem>
181         <para>Constant folding now done by Rules.</para>
182       </listitem>
183
184       <listitem>
185         <para>Lots of hackery in the simplifier.</para>
186       </listitem>
187
188       <listitem>
189         <para>Improvements in CPR and strictness analysis.</para>
190       </listitem>
191   
192     </itemizedlist>
193
194   </sect2>
195
196 </sect1>
197
198 <!-- Emacs stuff:
199      ;;; Local Variables: ***
200      ;;; mode: sgml ***
201      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter" "sect1") ***
202      ;;; End: ***
203  -->