9a38299739f44d7d481490c88c2d313307ce02aa
[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 - GHC is now much more particular about :ghc-flag:`-XDefaultSignatures`. The
49   type signature for a default method of a type class must now be the same as
50   the corresponding main method's type signature modulo differences in the
51   signatures' contexts. Otherwise, the typechecker will reject that class's
52   definition. See :ref:`class-default-signatures` for further details.
53
54 - It is now possible to explicitly pick a strategy to use when deriving a
55   class instance using the :ghc-flag:`-XDerivingStrategies` language extension
56   (see :ref:`deriving-strategies`).
57
58 - GHC now allows standalone deriving using :ghc-flag:`-XDeriveAnyClass` on
59   any data type, even if its data constructors are not in scope. This is
60   consistent with the fact that this code (in the presence of
61   :ghc-flag:`-XDeriveAnyClass`): ::
62
63       deriving instance C T
64
65   is exactly equivalent to: ::
66
67       instance C T
68
69   and the latter code has no restrictions about whether the data constructors
70   of ``T`` are in scope.
71
72 - :ghc-flag:`-XGeneralizedNewtypeDeriving` now supports deriving type classes
73   with associated type families. See the section on
74   :ref:`GeneralizedNewtypeDeriving and associated type families
75   <gnd-and-associated-types>`.
76
77 - :ghc-flag:`-XGeneralizedNewtypeDeriving` will no longer infer constraints
78   when deriving a class with no methods. That is, this code: ::
79
80       class Throws e
81       newtype Id a = MkId a
82         deriving Throws
83
84   will now generate this instance: ::
85
86       instance Throws (Id a)
87
88   instead of this instance: ::
89
90       instance Throws a => Throws (Id a)
91
92   This change was motivated by the fact that the latter code has a strictly
93   redundant ``Throws a`` constraint, so it would emit a warning when compiled
94   with :ghc-flag:`-Wredundant-constraints`. The latter instance could still
95   be derived if so desired using :ghc-flag:`-XStandaloneDeriving`: ::
96
97       deriving instance Throws a => Throws (Id a)
98
99 - Add warning flag :ghc-flag:`-Wcpp-undef` which passes ``-Wundef`` to the C
100   pre-processor causing the pre-processor to warn on uses of the ``#if``
101   directive on undefined identifiers.
102
103 - GHC will no longer automatically infer the kind of higher-rank type synonyms;
104   you must explicitly explicitly annotate the synonym with a kind signature.
105   For example, given::
106
107     data T :: (forall k. k -> Type) -> Type
108
109   to define a synonym of ``T``, you must write::
110
111     type TSyn = (T :: (forall k. k -> Type) -> Type)
112
113 - The Mingw-w64 toolchain for the Windows version of GHC has been updated. GHC now uses
114   `GCC 6.2.0` and `binutils 2.27`.
115
116 - Previously, :ghc-flag:`-Wmissing-methods` would not warn whenever a type
117   class method beginning with an underscore was not implemented in an instance.
118   For instance, this code would compile without any warnings: ::
119
120      class Foo a where
121        _Bar :: a -> Int
122
123      instance Foo Int
124
125   :ghc-flag:`-Wmissing-methods` will now warn that ``_Bar`` is not implemented
126   in the ``Foo Int`` instance.
127
128 - A new flag :ghc-flag:`-ddump-json` has been added. This flag dumps compiler
129   output as JSON documents. It is experimental and will be refined depending
130   on feedback from tooling authors for the next release.
131
132 GHCi
133 ~~~~
134
135 -  TODO FIXME.
136
137 - Added :ghc-flag:`-flocal-ghci-history` which uses current directory for `.ghci-history`.
138
139 Template Haskell
140 ~~~~~~~~~~~~~~~~
141
142 -  TODO FIXME.
143
144 -  Reifying types that contain unboxed tuples now works correctly. (Previously,
145    Template Haskell reified unboxed tuples as boxed tuples with twice their
146    appropriate arity.)
147
148 -  Splicing singleton unboxed tuple types (e.g., ``(# Int #)``) now works
149    correctly. Previously, Template Haskell would implicitly remove the
150    parentheses when splicing, which would turn ``(# Int #)`` into ``Int``.
151
152 -  Add support for type signatures in patterns. (:ghc-ticket:`12164`)
153
154 -  Make quoting and reification return the same types.  (:ghc-ticket:`11629`)
155
156 -  More kind annotations appear in the left-hand sides of reified closed
157    type family equations, in order to disambiguate types that would otherwise
158    be ambiguous in the presence of :ghc-flag:`-XPolyKinds`.
159    (:ghc-ticket:`12646`)
160
161 -  Quoted type signatures are more accurate with respect to implicitly
162    quantified type variables. Before, if you quoted this: ::
163
164      [d| id :: a -> a
165          id x = x
166        |]
167
168    then the code that Template Haskell would give back to you would actually be
169    this instead: ::
170
171      id :: forall a. a -> a
172      id x = x
173
174    That is, quoting would explicitly quantify all type variables, even ones
175    that were implicitly quantified in the source. This could be especially
176    harmful if a kind variable was implicitly quantified. For example, if
177    you took this quoted declaration: ::
178
179      [d| idProxy :: forall proxy (b :: k). proxy b -> proxy b
180          idProxy x = x
181        |]
182
183    and tried to splice it back in, you'd get this instead: ::
184
185      idProxy :: forall k proxy (b :: k). proxy b -> proxy b
186      idProxy x = x
187
188    Now ``k`` is explicitly quantified, and that requires turning on
189    :ghc-flag:`-XTypeInType`, whereas the original declaration did not!
190
191    Template Haskell quoting now respects implicit quantification in type
192    signatures, so the quoted declarations above now correctly leave the
193    type variables ``a`` and ``k`` as implicitly quantified.
194    (:ghc-ticket:`13018` and :ghc-ticket:`13123`)
195
196 - Looking up type constructors with symbol names (e.g., ``+``) now works
197   as expected (:ghc-ticket:`11046`)
198
199
200 Runtime system
201 ~~~~~~~~~~~~~~
202
203 - TODO FIXME.
204
205 - Added support for *Compact Regions*, which offer a way to manually
206   move long-lived data outside of the heap so that the garbage
207   collector does not have to trace it repeatedly.  Compacted data can
208   also be serialized, stored, and deserialized again later by the same
209   program.  For more details see the :compact-ref:`Data.Compact
210   <Data-Compact.html>` module.
211
212 - There is new support for improving performance on machines with a
213   Non-Uniform Memory Architecture (NUMA).  See :rts-flag:`--numa`.
214   This is supported on Linux and Windows systems.
215
216 - The garbage collector can be told to use fewer threads than the
217   global number of capabilities set by :rts-flag:`-N`.  See
218   :rts-flag:`-qn`, and a `blog post
219   <http://simonmar.github.io/posts/2016-12-08-Haskell-in-the-datacentre.html>`_
220   that describes this.
221
222 - The :ref:`heap profiler <prof-heap>` can now emit heap census data to the GHC
223   event log, allowing heap profiles to be correlated with other tracing events
224   (see :ghc-ticket:`11094`).
225
226 - Some bugs have been fixed in the stack-trace implementation in the
227   profiler that sometimes resulted in incorrect stack traces and
228   costs attributed to the wrong cost centre stack (see :ghc-ticket:`5654`).
229
230 - Added processor group support for Windows. This allows the runtime to allocate
231   threads to all cores in systems which have multiple processor groups.
232   (e.g. > 64 cores, see :ghc-ticket:`11054`)
233
234 Build system
235 ~~~~~~~~~~~~
236
237 -  TODO FIXME.
238
239 Package system
240 ~~~~~~~~~~~~~~
241
242 -  TODO FIXME.
243
244 hsc2hs
245 ~~~~~~
246
247 -  TODO FIXME.
248
249 Libraries
250 ---------
251
252 array
253 ~~~~~
254
255 -  Version number XXXXX (was 0.5.0.0)
256
257
258 .. _lib-base:
259
260 base
261 ~~~~
262
263 See ``changelog.md`` in the ``base`` package for full release notes.
264
265 -  Version number 4.10.0.0 (was 4.9.0.0)
266
267 - ``Data.Either`` now provides ``fromLeft`` and ``fromRight``
268
269 - ``Data.Type.Coercion`` now provides ``gcoerceWith``, which is analogous to
270   ``gcastWith`` from ``Data.Type.Equality``.
271
272 - The ``Read1`` and ``Read2`` classes in ``Data.Functor.Classes`` have new
273   methods, ``liftReadList(2)`` and ``liftReadListPrec(2)``, that are defined in
274   terms of ``ReadPrec`` instead of ``ReadS``. This matches the interface
275   provided in GHC's version of the ``Read`` class, and allows users to write
276   more efficient ``Read1`` and ``Read2`` instances.
277
278 - Add ``type family AppendSymbol (m :: Symbol) (n :: Symbol) :: Symbol`` to
279   ``GHC.TypeLits``
280
281 binary
282 ~~~~~~
283
284 -  Version number XXXXX (was 0.7.1.0)
285
286 bytestring
287 ~~~~~~~~~~
288
289 -  Version number XXXXX (was 0.10.4.0)
290
291 Cabal
292 ~~~~~
293
294 -  Version number XXXXX (was 1.18.1.3)
295
296 containers
297 ~~~~~~~~~~
298
299 -  Version number XXXXX (was 0.5.4.0)
300
301 deepseq
302 ~~~~~~~
303
304 -  Version number XXXXX (was 1.3.0.2)
305
306 directory
307 ~~~~~~~~~
308
309 -  Version number XXXXX (was 1.2.0.2)
310
311 filepath
312 ~~~~~~~~
313
314 -  Version number XXXXX (was 1.3.0.2)
315
316 ghc
317 ~~~
318
319 -
320 ghc-boot
321 ~~~~~~~~
322
323 -  This is an internal package. Use with caution.
324
325 -  TODO FIXME.
326
327 ghc-prim
328 ~~~~~~~~
329
330 -  Version number XXXXX (was 0.3.1.0)
331
332 -  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
333
334 -  New function ``noinline`` in ``GHC.Magic`` lets you mark that a function
335    should not be inlined.  It is optimized away after the simplifier runs.
336
337 haskell98
338 ~~~~~~~~~
339
340 -  Version number XXXXX (was 2.0.0.3)
341
342 haskell2010
343 ~~~~~~~~~~~
344
345 -  Version number XXXXX (was 1.1.1.1)
346
347 hoopl
348 ~~~~~
349
350 -  Version number XXXXX (was 3.10.0.0)
351
352 hpc
353 ~~~
354
355 -  Version number XXXXX (was 0.6.0.1)
356
357 integer-gmp
358 ~~~~~~~~~~~
359
360 -  Version number XXXXX (was 0.5.1.0)
361
362 old-locale
363 ~~~~~~~~~~
364
365 -  Version number XXXXX (was 1.0.0.6)
366
367 old-time
368 ~~~~~~~~
369
370 -  Version number XXXXX (was 1.1.0.2)
371
372 process
373 ~~~~~~~
374
375 -  Version number XXXXX (was 1.2.0.0)
376
377 template-haskell
378 ~~~~~~~~~~~~~~~~
379
380 -  Version number XXXXX (was 2.9.0.0)
381
382 -  Added support for unboxed sums :ghc-ticket:`12478`.
383
384 -  Added support for visible type applications :ghc-ticket:`12530`.
385
386 time
387 ~~~~
388
389 -  Version number XXXXX (was 1.4.1)
390
391 unix
392 ~~~~
393
394 -  Version number XXXXX (was 2.7.0.0)
395
396 Win32
397 ~~~~~
398
399 -  Version number XXXXX (was 2.3.0.1)
400
401 Known bugs
402 ----------
403
404 -  TODO FIXME