Some 8.2.1 release notes for my stuff
[ghc.git] / docs / users_guide / 8.2.1-notes.rst
1 .. _release-8-2-1:
2
3 Release notes for version 8.2.1
4 ===============================
5
6 The significant changes to the various parts of the compiler are listed
7 in the following sections. There have also been numerous bug fixes and
8 performance improvements over the 8.0 branch.
9
10 Highlights
11 ----------
12
13 The highlights since the 8.0 branch are:
14
15 - TODO FIXME
16 - SCC annotations can now be used for declarations.
17 - Heap overflow throws an exception in certain circumstances.
18
19 Full details
20 ------------
21
22 - Heap overflow throws a catchable exception, provided that it was detected
23   by the RTS during a GC cycle due to the program exceeding a limit set by
24   ``+RTS -M``, and not due to an allocation being refused by the operating
25   system.  This exception is thrown to the same thread that receives
26   ``UserInterrupt`` exceptions, and may be caught by user programs.
27
28 Language
29 ~~~~~~~~
30
31 -  TODO FIXME.
32
33 - Pattern synonym signatures can now be applied to multiple patterns, just like
34   value-level binding signatures. See :ref:`patsyn-typing` for details.
35
36 Compiler
37 ~~~~~~~~
38
39 -  TODO FIXME.
40
41 - Old profiling flags ``-auto-all``, ``-auto``, and ``-caf-all`` are deprecated
42   and their usage provokes a compile-time warning.
43
44 - Support for adding cost centres to declarations is added. The same `SCC`
45   syntax can be used, in addition to a new form for specifying the cost centre
46   name. See :ref:`scc-pragma` for examples.
47
48 - It is now possible to explicitly pick a strategy to use when deriving a
49   class instance using the :ghc-flag:`-XDerivingStrategies` language extension
50   (see :ref:`deriving-strategies`).
51
52 - GHC now allows standalone deriving using :ghc-flag:`-XDeriveAnyClass` on
53   any data type, even if its data constructors are not in scope. This is
54   consistent with the fact that this code (in the presence of
55   :ghc-flag:`-XDeriveAnyClass`): ::
56
57       deriving instance C T
58
59   is exactly equivalent to: ::
60
61       instance C T
62
63   and the latter code has no restrictions about whether the data constructors
64   of ``T`` are in scope.
65
66 - :ghc-flag:`-XGeneralizedNewtypeDeriving` now supports deriving type classes
67   with associated type families. See the section on
68   :ref:`GeneralizedNewtypeDeriving and associated type families
69   <gnd-and-associated-types>`.
70
71 - :ghc-flag:`-XGeneralizedNewtypeDeriving` will no longer infer constraints
72   when deriving a class with no methods. That is, this code: ::
73
74       class Throws e
75       newtype Id a = MkId a
76         deriving Throws
77
78   will now generate this instance: ::
79
80       instance Throws (Id a)
81
82   instead of this instance: ::
83
84       instance Throws a => Throws (Id a)
85
86   This change was motivated by the fact that the latter code has a strictly
87   redundant ``Throws a`` constraint, so it would emit a warning when compiled
88   with :ghc-flag:`-Wredundant-constraints`. The latter instance could still
89   be derived if so desired using :ghc-flag:`-XStandaloneDeriving`: ::
90
91       deriving instance Throws a => Throws (Id a)
92
93 - Add warning flag :ghc-flag:`-Wcpp-undef` which passes ``-Wundef`` to the C
94   pre-processor causing the pre-processor to warn on uses of the ``#if``
95   directive on undefined identifiers.
96
97 - GHC will no longer automatically infer the kind of higher-rank type synonyms;
98   you must explicitly explicitly annotate the synonym with a kind signature.
99   For example, given::
100
101     data T :: (forall k. k -> Type) -> Type
102
103   to define a synonym of ``T``, you must write::
104
105     type TSyn = (T :: (forall k. k -> Type) -> Type)
106
107 - The Mingw-w64 toolchain for the Windows version of GHC has been updated. GHC now uses
108   `GCC 6.2.0` and `binutils 2.27`.
109
110 - Previously, :ghc-flag:`-Wmissing-methods` would not warn whenever a type
111   class method beginning with an underscore was not implemented in an instance.
112   For instance, this code would compile without any warnings: ::
113
114      class Foo a where
115        _Bar :: a -> Int
116
117      instance Foo Int
118
119   :ghc-flag:`-Wmissing-methods` will now warn that ``_Bar`` is not implemented
120   in the ``Foo Int`` instance.
121
122 GHCi
123 ~~~~
124
125 -  TODO FIXME.
126
127 - Added :ghc-flag:`-flocal-ghci-history` which uses current directory for `.ghci-history`.
128
129 Template Haskell
130 ~~~~~~~~~~~~~~~~
131
132 -  TODO FIXME.
133
134 -  Reifying types that contain unboxed tuples now works correctly. (Previously,
135    Template Haskell reified unboxed tuples as boxed tuples with twice their
136    appropriate arity.)
137
138 -  Splicing singleton unboxed tuple types (e.g., ``(# Int #)``) now works
139    correctly. Previously, Template Haskell would implicitly remove the
140    parentheses when splicing, which would turn ``(# Int #)`` into ``Int``.
141
142 -  Add support for type signatures in patterns. (:ghc-ticket:`12164`)
143
144 -  Make quoting and reification return the same types.  (:ghc-ticket:`11629`)
145
146 -  More kind annotations appear in the left-hand sides of reified closed
147    type family equations, in order to disambiguate types that would otherwise
148    be ambiguous in the presence of :ghc-flag:`-XPolyKinds`.
149    (:ghc-ticket:`12646`)
150
151 Runtime system
152 ~~~~~~~~~~~~~~
153
154 - TODO FIXME.
155
156 - Added support for *Compact Regions*, which offer a way to manually
157   move long-lived data outside of the heap so that the garbage
158   collector does not have to trace it repeatedly.  Compacted data can
159   also be serialized, stored, and deserialized again later by the same
160   program.  For more details see the :compact-ref:`Data.Compact
161   <Data-Compact.html>` module.
162
163 - There is new support for improving performance on machines with a
164   Non-Uniform Memory Architecture (NUMA).  See :rts-flag:`--numa`.
165   This is supported on Linux and Windows systems.
166
167 - The garbage collector can be told to use fewer threads than the
168   global number of capabilities set by :rts-flag:`-N`.  See
169   :rts-flag:`-qn`, and a `blog post
170   <http://simonmar.github.io/posts/2016-12-08-Haskell-in-the-datacentre.html>`_
171   that describes this.
172
173 - The :ref:`heap profiler <prof-heap>` can now emit heap census data to the GHC
174   event log, allowing heap profiles to be correlated with other tracing events
175   (see :ghc-ticket:`11094`).
176
177 - Some bugs have been fixed in the stack-trace implementation in the
178   profiler that sometimes resulted in incorrect stack traces and
179   costs attributed to the wrong cost centre stack (see :ghc-ticket:`5654`).
180
181 - Added processor group support for Windows. This allows the runtime to allocate
182   threads to all cores in systems which have multiple processor groups.
183   (e.g. > 64 cores, see :ghc-ticket:`11054`)
184
185 Build system
186 ~~~~~~~~~~~~
187
188 -  TODO FIXME.
189
190 Package system
191 ~~~~~~~~~~~~~~
192
193 -  TODO FIXME.
194
195 hsc2hs
196 ~~~~~~
197
198 -  TODO FIXME.
199
200 Libraries
201 ---------
202
203 array
204 ~~~~~
205
206 -  Version number XXXXX (was 0.5.0.0)
207
208
209 .. _lib-base:
210
211 base
212 ~~~~
213
214 See ``changelog.md`` in the ``base`` package for full release notes.
215
216 -  Version number 4.10.0.0 (was 4.9.0.0)
217
218 - ``Data.Either`` now provides ``fromLeft`` and ``fromRight``
219
220 - ``Data.Type.Coercion`` now provides ``gcoerceWith``, which is analogous to
221   ``gcastWith`` from ``Data.Type.Equality``.
222
223 - The ``Read1`` and ``Read2`` classes in ``Data.Functor.Classes`` have new
224   methods, ``liftReadList(2)`` and ``liftReadListPrec(2)``, that are defined in
225   terms of ``ReadPrec`` instead of ``ReadS``. This matches the interface
226   provided in GHC's version of the ``Read`` class, and allows users to write
227   more efficient ``Read1`` and ``Read2`` instances.
228
229 binary
230 ~~~~~~
231
232 -  Version number XXXXX (was 0.7.1.0)
233
234 bytestring
235 ~~~~~~~~~~
236
237 -  Version number XXXXX (was 0.10.4.0)
238
239 Cabal
240 ~~~~~
241
242 -  Version number XXXXX (was 1.18.1.3)
243
244 containers
245 ~~~~~~~~~~
246
247 -  Version number XXXXX (was 0.5.4.0)
248
249 deepseq
250 ~~~~~~~
251
252 -  Version number XXXXX (was 1.3.0.2)
253
254 directory
255 ~~~~~~~~~
256
257 -  Version number XXXXX (was 1.2.0.2)
258
259 filepath
260 ~~~~~~~~
261
262 -  Version number XXXXX (was 1.3.0.2)
263
264 ghc
265 ~~~
266
267 -
268 ghc-boot
269 ~~~~~~~~
270
271 -  This is an internal package. Use with caution.
272
273 -  TODO FIXME.
274
275 ghc-prim
276 ~~~~~~~~
277
278 -  Version number XXXXX (was 0.3.1.0)
279
280 -  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
281
282 -  New function ``noinline`` in ``GHC.Magic`` lets you mark that a function
283    should not be inlined.  It is optimized away after the simplifier runs.
284
285 haskell98
286 ~~~~~~~~~
287
288 -  Version number XXXXX (was 2.0.0.3)
289
290 haskell2010
291 ~~~~~~~~~~~
292
293 -  Version number XXXXX (was 1.1.1.1)
294
295 hoopl
296 ~~~~~
297
298 -  Version number XXXXX (was 3.10.0.0)
299
300 hpc
301 ~~~
302
303 -  Version number XXXXX (was 0.6.0.1)
304
305 integer-gmp
306 ~~~~~~~~~~~
307
308 -  Version number XXXXX (was 0.5.1.0)
309
310 old-locale
311 ~~~~~~~~~~
312
313 -  Version number XXXXX (was 1.0.0.6)
314
315 old-time
316 ~~~~~~~~
317
318 -  Version number XXXXX (was 1.1.0.2)
319
320 process
321 ~~~~~~~
322
323 -  Version number XXXXX (was 1.2.0.0)
324
325 template-haskell
326 ~~~~~~~~~~~~~~~~
327
328 -  Version number XXXXX (was 2.9.0.0)
329
330 -  Added support for unboxed sums :ghc-ticket:`12478`.
331
332 -  Added support for visible type applications :ghc-ticket:`12530`.
333
334 time
335 ~~~~
336
337 -  Version number XXXXX (was 1.4.1)
338
339 unix
340 ~~~~
341
342 -  Version number XXXXX (was 2.7.0.0)
343
344 Win32
345 ~~~~~
346
347 -  Version number XXXXX (was 2.3.0.1)
348
349 Known bugs
350 ----------
351
352 -  TODO FIXME