Revert "Batch merge"
[ghc.git] / docs / users_guide / 8.8.1-notes.rst
1 .. _release-8-8-1:
2
3 Release notes for version 8.8.1
4 ===============================
5
6 The significant changes to the various parts of the compiler are listed in the
7 following sections. There have also been numerous bug fixes and performance
8 improvements over the 8.6.1 release.
9
10
11 Highlights
12 ----------
13
14 The highlights, since the 8.6.1 release, are:
15
16 - Many, many bug fixes.
17 - A new code layout algorithm for x86.
18
19
20 Full details
21 ------------
22
23 Language
24 ~~~~~~~~
25
26 - :extension:`ScopedTypeVariables`: The type variable that a type signature on
27   a pattern can bring into scope can now stand for arbitrary types. Previously,
28   they could only stand in for other type variables, but this restriction was deemed
29   unnecessary in `GHC proposal #29 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0029-scoped-type-variables-types.rst>`__. Also see :ghc-ticket:`15050`.
30
31 - The pattern-match coverage checker now checks for cases that are unreachable
32   due to constructors have strict argument types. For instance, in the
33   following example: ::
34
35     data K = K1 | K2 !Void
36
37     f :: K -> ()
38     f K1 = ()
39
40   ``K2`` cannot be matched on in ``f``, since it is impossible to construct a
41   terminating value of type ``Void``. Accordingly, GHC will not warn about
42   ``K2`` (whereas previous versions of GHC would).
43
44 - ``(!)`` is now a valid type operator: ::
45
46       type family a ! b
47
48 - An existential context no longer requires parenthesization: ::
49
50     class a + b
51     data D1 = forall a b. (a + b) => D1 a b
52     data D2 = forall a b.  a + b  => D2 a b -- now allowed
53
54 - ``{-# UNPACK #-}`` annotation no longer requires parenthesization: ::
55
56     data T = MkT1 { a :: {-# UNPACK #-} (Maybe Int && Bool) }
57            | MkT2 { a :: {-# UNPACK #-}  Maybe Int && Bool  } -- now allowed
58
59     data G where
60       MkG1 :: {-# UNPACK #-} (Maybe Int && Bool) -> G
61       MkG2 :: {-# UNPACK #-}  Maybe Int && Bool  -> G  -- now allowed
62
63 - The requirement that kind signatures always be parenthesized has been relaxed.
64   For instance, it is now permissible to write ``Proxy '(a :: A, b :: B)``
65   (previous GHC versions required extra parens: ``Proxy '((a :: A), (b :: B))``).
66
67 - :ghc-flag:`-Woverflowed-literals` checks all literals. Previously, it would
68   only inspect boxed expression literals.
69
70 - :ghc-flag:`-Wempty-enumerations` now also works for ``Numeric.Natural``.
71
72 Compiler
73 ~~~~~~~~
74
75 - New :ghc-flag:`-keep-hscpp-files` to keep the output of the CPP pre-processor.
76
77 - The :ghc-flag:`-Wcompat` warning group now includes :ghc-flag:`-Wstar-is-type`.
78
79 - The :ghc-flag:`-fllvm-pass-vectors-in-regs` flag is now deprecated as vector
80   arguments are now passed in registers by default.
81
82 - The :ghc-flag:`-fblock-layout-cfg` flag enables a new code layout algorithm on x86.
83   This is enabled by default at  :ghc-flag:`-O` and :ghc-flag:`-O2`.
84
85 - The deprecated ghc-flag ``-Wamp`` has been removed.
86
87 - Add new :ghc-flag:`-Wmissing-deriving-strategies` flag that warns users when they are not
88   taking advantage of :extension:`DerivingStrategies`. The warning is supplied at each
89   ``deriving`` site.
90
91 Runtime system
92 ~~~~~~~~~~~~~~
93
94 - Add and document new FFI functions ``hs_lock_stable_ptr_table``
95   and ``hs_unlock_stable_ptr_table``. These replace the undocumented
96   functions ``hs_lock_stable_tables`` and ``hs_unlock_stable_tables``,
97   respectively. The latter should now be considered deprecated.
98
99 - Document the heretofore undocumented FFI function
100   ``hs_free_stable_ptr_unsafe``, used in conjunction with manual
101   locking and unlocking.
102
103 - The runtime linker on Windows has been overhauled to properly handle section
104   alignment, lower the amount of wasted memory and lower the amount of in use memory.
105   See :ghc-ticket:`13617`. Note that committed memory may be slightly higher.
106
107 - The output filename used for :ref:`eventlog output <rts-eventlog>` can now be
108   specified with the :rts-flag:`-ol` flag.
109
110 - Add support for generating a new type of output: extended interfaces files.
111   Generation of these files, which sport a ``.hie`` suffix, is enabled via the
112   ``-fwrite-ide-info`` flag. See :ref:`hie-options` for more information.
113
114 Template Haskell
115 ~~~~~~~~~~~~~~~~
116
117 - Reifying type classes no longer shows redundant class type variables and
118   contexts in the type signature of each class method. For instance,
119   reifying the following class: ::
120
121     class C a where
122       method :: a
123
124   Used to produce the following: ::
125
126     class C a where
127       method :: forall a. C a => a
128
129   Where the ``forall a. C a =>`` part is entirely redundant. This part is no
130   longer included when reifying ``C``. It's possible that this may break some
131   code which assumes the existence of ``forall a. C a =>``.
132
133 - Template Haskell now supports implicit parameters and recursive do.
134
135 ``ghc-prim`` library
136 ~~~~~~~~~~~~~~~~~~~~
137
138 - GHC now exposes a new primop, ``traceBinaryEvent#``. This primop writes
139   eventlog events similar to ``traceBinaryEvent#`` but allows the user to pass
140   the event payload as a binary blob instead of a ``String``.
141
142 - The ``StableName#`` type parameter now has a phantom role instead of
143   a representational one. There is really no reason to care about the
144   type of the underlying object.
145
146 ``ghc`` library
147 ~~~~~~~~~~~~~~~
148
149
150 ``base`` library
151 ~~~~~~~~~~~~~~~~
152
153 - Support the characters from recent versions of Unicode (up to v. 12) in literals
154     (see :ghc-ticket:`5518`).
155
156 - The ``StableName`` type parameter now has a phantom role instead of
157   a representational one. There is really no reason to care about the
158   type of the underlying object.
159
160 - The functions ``zipWith3`` and ``zip3`` in ``Prelude`` can now fuse,
161   together with ``zipWith4`` to ``zipWith7`` as well as their
162   tuple counterparts in ``Data.List``.
163
164 Build system
165 ~~~~~~~~~~~~
166
167 - Configure: Add ALEX and HAPPY variables to explicitly set the alex and happy
168   programs to use.
169 - Configure: Deprecate --with-ghc=ARG in favour of the GHC variable.
170
171 Included libraries
172 ------------------
173
174 The package database provided with this distribution also contains a number of
175 packages other than GHC itself. See the changelogs provided with these packages
176 for further change information.
177
178 .. ghc-package-list::
179
180     libraries/array/array.cabal:             Dependency of ``ghc`` library
181     libraries/base/base.cabal:               Core library
182     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
183     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
184     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
185     libraries/containers/containers.cabal:   Dependency of ``ghc`` library
186     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
187     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
188     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
189     compiler/ghc.cabal:                      The compiler itself
190     libraries/ghci/ghci.cabal:               The REPL interface
191     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
192     libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library
193     libraries/ghc-compact/ghc-compact.cabal: Core library
194     libraries/ghc-heap/ghc-heap.cabal:       GHC heap-walking library
195     libraries/ghc-prim/ghc-prim.cabal:       Core library
196     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
197     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
198     libraries/integer-gmp/integer-gmp.cabal: Core library
199     libraries/libiserv/libiserv.cabal:       Internal compiler library
200     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
201     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
202     libraries/process/process.cabal:         Dependency of ``ghc`` library
203     libraries/stm/stm.cabal:                 Dependency of ``haskeline`` library
204     libraries/template-haskell/template-haskell.cabal:     Core library
205     libraries/terminfo/terminfo.cabal:       Dependency of ``haskeline`` library
206     libraries/text/text.cabal:               Dependency of ``Cabal`` library
207     libraries/time/time.cabal:               Dependency of ``ghc`` library
208     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
209     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
210     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
211     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable