summaryrefslogtreecommitdiff
path: root/ghc/docs/users_guide/6.0-notes.xml
blob: e07bc890f24d61c933a62a167dbe8ad07dae2fea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
<?xml version="1.0" encoding="iso-8859-1"?>
<sect1 id="release-6-0">
  <title>Release notes for version 6.0</title>

  <sect2>
    <title>User-visible compiler changes</title>
    <itemizedlist>
      <listitem>
	<para>Template Haskell, a new feature for compile-time
	metaprogramming has been introduced.  See <xref
	linkend="template-haskell"/>.</para>
      </listitem>
      <listitem>
	<para>INLINE pragmas on methods in class or instance
	declarations now work properly.</para>
      </listitem>
      <listitem>
	<para>Recursive do-notation (aka <literal>mdo</literal>) is
	now supported.  See <xref linkend="mdo-notation"/>.</para>
      </listitem>
      <listitem>
	<para>There is now a native code generator for PowerPC
	platforms.</para>
      </listitem>
      <listitem>
	<para>Profiling: the <option>-xt</option> RTS option enables
	inclusion of thread stacks in a heap profile.  See <xref
	linkend="rts-options-heap-prof"/>.</para>
      </listitem>
      <listitem>
	<para>Non-blocking I/O is now supported on Windows.</para>
      </listitem>
      <listitem>
	<para>The <ulink url="../libraries/base/Data.Dynamic.html#Typeable"><literal>Typeable</literal></ulink> class can now be
	derived, and the implementation of <literal>Typeable</literal>
	is now more efficient.</para>
      </listitem>
    </itemizedlist>
  </sect2>
  
  <sect2>
    <title>User-visible interpreter (GHCi) changes</title>
    <itemizedlist>
      <listitem>
	<para>Loading a <literal>Main</literal> module that does not
	define <literal>main</literal> is no longer an error, although
	GHCi will still emit a warning in this case.</para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>User-visible library changes</title>
    <itemizedlist>
      <listitem>
	<para>Hierarchical libraries are now available without needing
	to specify an explicit <option>-package</option> flag.  There
	are some exceptions to this rule (see <xref
	linkend="using-packages"/>), but if you stick to GHCi and
	<option>--make</option> mode then there will normally be no
	need to specify <option>-package</option> options at
	all.</para>

	<para>Non-hierarchical libraries
	(i.e. <literal>hslibs</literal> libraries) still need to be
	explicitly requested with <option>-package</option>
	options.</para>
      </listitem>

      <listitem>
	<para>The <literal>Posix</literal> library has been rewritten.
	It is now a hierarchical library rooted at
	<literal>System.Posix</literal>, and has some additions aimed
	at supporting the latest revision of the POSIX standard (IEEE
	Std 1003.1-2001).  See the <ulink
	url="../libraries/unix/index.html"><literal>unix</literal>
	package</ulink> for details.</para>

	<para>The old <literal>posix</literal> package is still
	available for backwards compatibility, but is deprecated and
	will be removed in a future release.</para>
      </listitem>

      <listitem>
	<para><ulink url="../libraries/base/Data.IORef.html"><literal>Data.IORef</literal></ulink>: Added <literal>atomicModifyIORef</literal>.</para>
      </listitem>

      <listitem>
	<para><ulink url="../libraries/base/System.Cmd.html"><literal>System.Cmd</literal></ulink>: Added <literal>rawSystem</literal>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/System.Environment.html"><literal>System.Environment</literal></ulink>:
	Added <literal>withArgs</literal> and <literal>withProgName</literal>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/network/Network.Socket.html"><literal>Network.Socket</literal></ulink>:
	Added <literal>sendFd</literal> and <literal>recvFd</literal>.</para>
      </listitem>

      <listitem>
	<para>The <literal>Readline</literal> library has moved to
	<ulink
	url="../libraries/readline/System.Console.Readline.html"><literal>System.Console.Readline</literal></ulink>,
	and is in a package of its own
	(<literal>readline</literal>).</para>
      </listitem>

      <listitem>
	<para>The non-hierarchical versions of the FFI libraries are
	now all available without needing to specify <literal>-package
	lang</literal> (they are actually now in the
	<literal>haskell98</literal> package, which is available by
	default).</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/network/Network.BSD.html"><literal>Network.BSD</literal></ulink>:
	<literal>symlink</literal> and <literal>readline</literal> are
	now deprecated; use
	<literal>System.Posix.createSymbolicLink</literal> and
	<literal>System.Posix.readSymbolicLink</literal>
	respectively.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Control.Exception.html"><literal>Control.Exception</literal></ulink>:
	Added <literal>mapException</literal>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Data.Dynamic.html"><literal>Data.Dynamic</literal></ulink>:
	various changes to make the implementation of
	<literal>Typeable</literal> more efficient.  This entails some
	changes to the interface, and affects how instances of
	<literal>Typeable</literal> are defined.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Data.Tree.html"><literal>Data.Tree</literal></ulink>
	is a new library for trees.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Data.Graph.html"><literal>Data.Graph</literal></ulink>
	is a new library for graphs.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/System.IO.html"><literal>System.IO</literal></ulink>:
	Removed <literal>bracket</literal> and
	<literal>bracket_</literal> (use the versions from
	<literal>Control.Exception</literal> instead).</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/System.IO.html"><literal>System.IO</literal></ulink>:
	The <literal>IOError</literal> type is now a synonym for
	<literal>IOException</literal>, whereas previously it was a
	synonym for <literal>Exception</literal>.  This has various
	consequences, one of which is that the types of
	<literal>System.IO.catch</literal> and
	<literal>Control.Exception.catch</literal> are now different
	(useful, because they do different things).</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/System.IO.Error.html"><literal>System.IO.Error</literal></ulink>:
	added <literal>annotateIOError</literal>,
	<literal>modifyIOError</literal>, and <literal>ioeSet{ErrorType,ErrorString,Handle,FileName}</literal>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Text.ParserCombinators.ReadP.html"><literal>Text.ParserCombinators.ReadP</literal></ulink>:
	lots of updates.</para>
      </listitem>

      <listitem>
	<para><literal>Control.Monad.Monoid</literal> is now <ulink url="../libraries/base/Data.Monoid.html"><literal>Data.Monoid</literal></ulink>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Data.PackedString.html"><literal>Data.PackedString</literal></ulink>:
	added <literal>joinPS</literal>, <literal>unwordsPS</literal>
	and <literal>unlinesPS</literal>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Data.HashTable.html"><literal>Data.HashTable</literal></ulink>
	is a new dynamic hash-table implementation.</para>
      </listitem>

      <listitem>
	<para>Added <ulink
	url="../libraries/unix/System.Sendfile.html"><literal>System.Sendfile</literal></ulink>.</para>
      </listitem>

      <listitem>
	<para>Added <ulink
	url="../libraries/base/Foreign.Marshal.Pool.html"><literal>Foreign.Marshal.Pool</literal></ulink>.</para>
      </listitem>

      <listitem>
	<para><ulink
	url="../libraries/base/Data.Bits.html"><literal>Data.Bits</literal></ulink>:
	<literal>shiftL</literal>, <literal>shiftR</literal>,
	<literal>rotateL</literal>, and <literal>rotateR</literal> are
	now methods of the <literal>Bite</literal> class.</para>
      </listitem>

      <listitem>
	<para>The FFI libraries now conform to the latest version of
	the FFI spec:</para>
	<itemizedlist>
	  <listitem>
	    <para>Added <ulink
	    url="../libraries/base/Foreign.ForeignPtr.html#mallocForeignPtr"><literal>Foreign.ForeignPtr.mallocForeignPtr</literal></ulink>
	    and friends.</para>
	  </listitem>
	  <listitem>
	    <para>Finalizers added to a <literal>ForeignPtr</literal>
	    with <literal>addForeignPtrFinalizer</literal> are now run
	    in strict order; namely the reverse of the order they were
	    added.</para>
	  </listitem>
	  <listitem>
	    <para><literal>Foreign.C.TypesISO</literal> has been
	    merged into <ulink
	    url="../libraries/base/Foreign.C.Types.html"><literal>Foreign.C.Types</literal></ulink>.</para>
	  </listitem>
	</itemizedlist>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Experimental features</title>
    <itemizedlist>
      <listitem>
	<para>The <literal>Data</literal> class provides for generic
	data traversals and folds; see <ulink
	url="../libraries/base/Data.Generics.html"><literal>Data.Generics</literal></ulink>.
	<literal>Data</literal> can be derived for arbitrary
	datatypes.  The <literal>Data</literal> class is still
	experimental, so its contents may change in the future.</para>
      </listitem>
      <listitem>
	<para>Several bugs have been fixed in the threaded RTS, and it
	should now be rather more robust (it should still be
	considered experimental, however).</para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Internal changes</title>
    <itemizedlist>
      <listitem>
	<para>Sweeping changes to the compiler and runtime system to
	change the evaluation model from <quote>push/enter</quote> to
	<quote>eval/apply</quote>.  The bottom line is that the
	compiler is now more portable and some of the complexity is
	now more centralised, while performance and binary sizes
	remain about the same.</para>
	
	<para>A paper describing these changes can be found <ulink
	url="http://research.microsoft.com/~simonpj/papers/eval-apply">here</ulink>.</para>
      </listitem>
      <listitem>
	<para>The test suite is now driven by a Python script and is
	rather more flexible and robust.  It now supports building
	tests several different "ways", and as a result we now run
	each test with optimisation, profiling, native code
	generation, and GHCi in addition to the vanilla way.</para>
      </listitem>
      <listitem>
	<para>The build system now supports bootstrapping the compiler
	in a single build tree.  By default, typing
	<literal>make</literal> at the top level will bootstrap the
	compiler once to create a stage-2 compiler.  See the Building
	Guide for more details.</para>
      </listitem>
      <listitem>
	<para>The RTS debugging flags are no longer represented by a
	bitfield and now have single-character names.  For example, to
	turn on scheduler debugging output, use <literal>-Ds</literal>
	rather than <literal>-D1</literal>.</para>
      </listitem>
      <listitem>
	<para>The compiler no longer requires any packages from
	<literal>hslibs</literal> to bootstrap.  It is enough to
	compile <literal>fptools/libraries</literal> before building
	the stage 2 compiler.</para>
      </listitem>
    </itemizedlist>
  </sect2>

</sect1>

<!-- Emacs stuff:
     ;;; Local Variables: ***
     ;;; mode: xml ***
     ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter" "sect1") ***
     ;;; End: ***
 -->