75645e46902738f9475314cbe3122a58809e461a
[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
18
19 Full details
20 ------------
21
22 Language
23 ~~~~~~~~
24
25 - :extension:`ScopedTypeVariables`: The type variable that a type signature on
26   a pattern can bring into scope can now stand for arbitrary types. Previously,
27   they could only stand in for other type variables, but this restriction was deemed
28   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`.
29
30 - The pattern-match coverage checker now checks for cases that are unreachable
31   due to constructors have strict argument types. For instance, in the
32   following example: ::
33
34     data K = K1 | K2 !Void
35
36     f :: K -> ()
37     f K1 = ()
38
39   ``K2`` cannot be matched on in ``f``, since it is impossible to construct a
40   terminating value of type ``Void``. Accordingly, GHC will not warn about
41   ``K2`` (whereas previous versions of GHC would).
42
43 - ``(!)`` is now a valid type operator: ::
44
45       type family a ! b
46
47 - An existential context no longer requires parenthesization: ::
48
49     class a + b
50     data D1 = forall a b. (a + b) => D1 a b
51     data D2 = forall a b.  a + b  => D2 a b -- now allowed
52
53 - The requirement that kind signatures always be parenthesized has been relaxed.
54   For instance, it is now permissible to write ``Proxy '(a :: A, b :: B)``
55   (previous GHC versions required extra parens: ``Proxy '((a :: A), (b :: B))``).
56
57 Compiler
58 ~~~~~~~~
59
60 - New :ghc-flag:`-keep-hscpp-files` to keep the output of the CPP pre-processor.
61
62 - The :ghc-flag:`-Wcompat` warning group now includes :ghc-flag:`-Wstar-is-type`.
63
64 - The :ghc-flag:`-fllvm-pass-vectors-in-regs` flag is now deprecated as vector
65   arguments are now passed in registers by default.
66
67 Runtime system
68 ~~~~~~~~~~~~~~
69
70 - Add and document new FFI functions ``hs_lock_stable_ptr_table``
71   and ``hs_unlock_stable_ptr_table``. These replace the undocumented
72   functions ``hs_lock_stable_tables`` and ``hs_unlock_stable_tables``,
73   respectively. The latter should now be considered deprecated.
74
75 - Document the heretofore undocumented FFI function
76   ``hs_free_stable_ptr_unsafe``, used in conjunction with manual
77   locking and unlocking.
78
79 - The runtime linker on Windows has been overhauled to properly handle section
80   alignment, lower the amount of wasted memory and lower the amount of in use memory.
81   See :ghc-ticket:`13617`. Note that committed memory may be slightly higher.
82
83 - A new flag ``-xp`` is added on x86_64. When it is passed, the runtime linker
84   can load object files compiled with ``-fPIC -fexternal-dynamic-refs``
85   anywhere in the address space. This used to be restricted to the low 2Gb.
86
87
88 Template Haskell
89 ~~~~~~~~~~~~~~~~
90
91 - Reifying type classes no longer shows redundant class type variables and
92   contexts in the type signature of each class method. For instance,
93   reifying the following class: ::
94
95     class C a where
96       method :: a
97
98   Used to produce the following: ::
99
100     class C a where
101       method :: forall a. C a => a
102
103   Where the ``forall a. C a =>`` part is entirely redundant. This part is no
104   longer included when reifying ``C``. It's possible that this may break some
105   code which assumes the existence of ``forall a. C a =>``.
106
107 - Template Haskell now supports implicit parameters and recursive do.
108
109 ``ghc-prim`` library
110 ~~~~~~~~~~~~~~~~~~~~
111
112 - GHC now exposes a new primop, ``traceBinaryEvent#``. This primop writes
113   eventlog events similar to ``traceBinaryEvent#`` but allows the user to pass
114   the event payload as a binary blob instead of a ``String``.
115
116 - The ``StableName#`` type parameter now has a phantom role instead of
117   a representational one. There is really no reason to care about the
118   type of the underlying object.
119
120 ``ghc`` library
121 ~~~~~~~~~~~~~~~
122
123
124 ``base`` library
125 ~~~~~~~~~~~~~~~~
126
127 - Support the characters from recent versions of Unicode (up to v. 12) in literals
128     (see :ghc-ticket:`5518`).
129
130 - The ``StableName`` type parameter now has a phantom role instead of
131   a representational one. There is really no reason to care about the
132   type of the underlying object.
133
134 Build system
135 ~~~~~~~~~~~~
136
137
138 Included libraries
139 ------------------
140
141 The package database provided with this distribution also contains a number of
142 packages other than GHC itself. See the changelogs provided with these packages
143 for further change information.
144
145 .. ghc-package-list::
146
147     libraries/array/array.cabal:             Dependency of ``ghc`` library
148     libraries/base/base.cabal:               Core library
149     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
150     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
151     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
152     libraries/containers/containers.cabal:   Dependency of ``ghc`` library
153     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
154     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
155     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
156     compiler/ghc.cabal:                      The compiler itself
157     libraries/ghci/ghci.cabal:               The REPL interface
158     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
159     libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library
160     libraries/ghc-compact/ghc-compact.cabal: Core library
161     libraries/ghc-heap/ghc-heap.cabal:       GHC heap-walking library
162     libraries/ghc-prim/ghc-prim.cabal:       Core library
163     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
164     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
165     libraries/integer-gmp/integer-gmp.cabal: Core library
166     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
167     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
168     libraries/process/process.cabal:         Dependency of ``ghc`` library
169     libraries/stm/stm.cabal:                 Dependency of ``haskeline`` library
170     libraries/template-haskell/template-haskell.cabal:     Core library
171     libraries/terminfo/terminfo.cabal:       Dependency of ``haskeline`` library
172     libraries/text/text.cabal:               Dependency of ``Cabal`` library
173     libraries/time/time.cabal:               Dependency of ``ghc`` library
174     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
175     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
176     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
177     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable