| ... |
... |
@@ -2,168 +2,59 @@ |
|
2
|
2
|
|
|
3
|
3
|
Version 9.16.1
|
|
4
|
4
|
==============
|
|
5
|
|
-
|
|
6
|
5
|
The significant changes to the various parts of the compiler are listed in the
|
|
7
|
6
|
following sections. See the `migration guide
|
|
8
|
7
|
<https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.16>`_ on the GHC Wiki
|
|
9
|
8
|
for specific guidance on migrating programs to this release.
|
|
10
|
9
|
|
|
11
|
|
-Language
|
|
12
|
|
-~~~~~~~~
|
|
13
|
|
-
|
|
14
|
|
-- Fix a bug introduced in GHC 9.10 where GHC would erroneously accept infix uses
|
|
15
|
|
- of promoted data constructors without enabling :extension:`DataKinds`. As a
|
|
16
|
|
- result, you may need to enable :extension:`DataKinds` in code that did not
|
|
17
|
|
- previously require it.
|
|
18
|
10
|
|
|
19
|
|
-- ``Type`` and ``Constraint`` are now (at last) completely distinct types, just as much
|
|
20
|
|
- as ``Int`` and ``Bool``. For example, you can now
|
|
21
|
|
- write::
|
|
|
11
|
+Compiler
|
|
|
12
|
+~~~~~~~~
|
|
22
|
13
|
|
|
23
|
|
- type family F a
|
|
24
|
14
|
|
|
25
|
|
- type instance F Type = Int
|
|
26
|
|
- type instance F Constraint = Bool
|
|
|
15
|
+Profiling
|
|
|
16
|
+~~~~~~~~~
|
|
27
|
17
|
|
|
28
|
|
- which was previously rejected with "Conflicting family instance declarations".
|
|
29
|
18
|
|
|
30
|
|
-- The extension :extension:`ExplicitNamespaces` now allows namespace-specified
|
|
31
|
|
- wildcards ``type ..`` and ``data ..`` in import and export lists.
|
|
|
19
|
+Native code generator backend
|
|
|
20
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
32
|
21
|
|
|
33
|
|
-Compiler
|
|
34
|
|
-~~~~~~~~
|
|
35
|
22
|
|
|
36
|
|
-- Code coverage's (:ghc-flag:`-fhpc`) treatment of record fields now extends
|
|
37
|
|
- beyond record fields accessed via :extension:`RecordWildCards` and
|
|
38
|
|
- :extension:`NamedFieldPuns`, and also handles access to nested record fields.
|
|
39
|
|
- That is, in a pattern such as ``Foo{bar = Bar{baz = b}}`` both ``bar`` and
|
|
40
|
|
- ``baz`` will now be marked as covered if ``b`` is evaluated. Note that this
|
|
41
|
|
- currently only works when record fields (or values contained within them) are
|
|
42
|
|
- bound to variables. The very similar pattern ``Foo{bar = Bar{baz = 42}}``
|
|
43
|
|
- will will not yet mark ``bar`` or ``baz`` as covered.
|
|
|
23
|
+LLVM backend
|
|
|
24
|
+~~~~~~~~~~~~
|
|
44
|
25
|
|
|
45
|
|
-- Pattern synonyms can now be suggested as valid hole fits (except, of course,
|
|
46
|
|
- if they are unidirectional).
|
|
47
|
26
|
|
|
48
|
|
-- GHC uses the information from the definition of a *closed* type family to
|
|
49
|
|
- generate some extra functional dependencies for type equalities involving
|
|
50
|
|
- that type family. As a consequence:
|
|
51
|
27
|
|
|
52
|
|
- * typechecking will succeed a bit more often (see :ghc-ticket:`23162`)
|
|
53
|
|
- * pattern-match incompleteness checking is a bit smarter, giving fewer false warnings (see :ghc-ticket:`#22652`)
|
|
|
28
|
+JavaScript backend
|
|
|
29
|
+~~~~~~~~~~~~~~~~~~
|
|
54
|
30
|
|
|
55
|
|
-- When multiple ``-msse*`` flags are given, the maximum version takes effect.
|
|
56
|
|
- For example, ``-msse4.2 -msse2`` is now equivalent to ``-msse4.2``.
|
|
57
|
|
- Previously, only the last flag took effect.
|
|
58
|
31
|
|
|
59
|
|
-- Some x86 architecture flags now imply other flags.
|
|
60
|
|
- For example, :ghc-flag:`-mavx` now implies :ghc-flag:`-msse4.2`,
|
|
61
|
|
- and :ghc-flag:`-mavx512f` now implies :ghc-flag:`-mfma`
|
|
62
|
|
- in addition to :ghc-flag:`-mavx2`.
|
|
63
|
|
- Refer to the users' guide for more details about each individual flag.
|
|
|
32
|
+WebAssembly backend
|
|
|
33
|
+~~~~~~~~~~~~~~~~~~~
|
|
64
|
34
|
|
|
65
|
35
|
|
|
66
|
36
|
GHCi
|
|
67
|
37
|
~~~~
|
|
68
|
38
|
|
|
|
39
|
+
|
|
69
|
40
|
Runtime system
|
|
70
|
41
|
~~~~~~~~~~~~~~
|
|
71
|
42
|
|
|
72
|
|
-- Add a new `poll` I/O manager, based on the classic unix `poll()` API. It is
|
|
73
|
|
- available in the single-threaded RTS on posix platforms. The `select` I/O
|
|
74
|
|
- manager remains the default for this combination for now, but this default
|
|
75
|
|
- may change in future releases. The new I/O manager can be selected via the
|
|
76
|
|
- runtime flag :rts-flag:`--io-manager=(name)`.
|
|
77
|
|
-
|
|
78
|
|
- Compared to the `select` I/O manager, this one has slightly less severe
|
|
79
|
|
- restrictions on the number of sockets/pipes that can be waited on, though
|
|
80
|
|
- it still scales poorly for waiting on socket/pipe readiness. It does however
|
|
81
|
|
- scale much better for thread timers (such as `threadDelay`), and improves
|
|
82
|
|
- timer precision on 32bit Linux and 32bit FreeBSD from milliseconds to
|
|
83
|
|
- microseconds.
|
|
84
|
|
-
|
|
85
|
|
- This I/O manager introduces new infrastructure for I/O managers that is
|
|
86
|
|
- intended to be used in future for a new generation of in-RTS I/O managers,
|
|
87
|
|
- using more scalable platform-specific APIs (such as epoll, io_uring and
|
|
88
|
|
- kqueue). This first one, based on `poll()`, is merely intended to be
|
|
89
|
|
- portable.
|
|
90
|
|
-
|
|
|
43
|
+- The default for :rts-flag:`--eventlog-flush-interval=⟨seconds⟩` has changed from being disabled to being enabled with a flush inverval of 5 seconds.
|
|
91
|
44
|
|
|
92
|
|
-Cmm
|
|
93
|
|
-~~~
|
|
94
|
|
-
|
|
95
|
|
-``base`` library
|
|
96
|
|
-~~~~~~~~~~~~~~~~
|
|
97
|
|
-
|
|
98
|
|
-- Updated to `Unicode 17.0.0
|
|
99
|
|
- <https://www.unicode.org/versions/Unicode17.0.0>`_.
|
|
100
|
|
-
|
|
101
|
|
-``ghc-prim`` library
|
|
102
|
|
-~~~~~~~~~~~~~~~~~~~~
|
|
|
45
|
+Build system and packaging
|
|
|
46
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
103
|
47
|
|
|
104
|
48
|
``ghc`` library
|
|
105
|
49
|
~~~~~~~~~~~~~~~
|
|
106
|
50
|
|
|
|
51
|
+
|
|
107
|
52
|
``ghc-heap`` library
|
|
108
|
53
|
~~~~~~~~~~~~~~~~~~~~
|
|
109
|
54
|
|
|
110
|
|
-``ghc-experimental`` library
|
|
111
|
|
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
112
|
|
-
|
|
113
|
|
-- New SIMD primops for bitwise logical operations on 128-wide vectors.
|
|
114
|
55
|
|
|
115
|
|
-``template-haskell`` library
|
|
|
56
|
+``ghc-experimental`` library
|
|
116
|
57
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
117
|
58
|
|
|
118
|
|
-- We have added the ``addDependentDirectory`` function to match
|
|
119
|
|
- ``addDependentFile``, which adds a directory to the list of dependencies that
|
|
120
|
|
- the recompilation checker will look at to determine if a module needs to be
|
|
121
|
|
- recompiled.
|
|
122
|
|
-
|
|
123
|
59
|
Included libraries
|
|
124
|
60
|
~~~~~~~~~~~~~~~~~~ |
|
125
|
|
-
|
|
126
|
|
-The package database provided with this distribution also contains a number of
|
|
127
|
|
-packages other than GHC itself. See the changelogs provided with these packages
|
|
128
|
|
-for further change information.
|
|
129
|
|
-
|
|
130
|
|
-.. ghc-package-list::
|
|
131
|
|
-
|
|
132
|
|
- libraries/array/array.cabal: Dependency of ``ghc`` library
|
|
133
|
|
- libraries/base/base.cabal: Core library
|
|
134
|
|
- libraries/binary/binary.cabal: Dependency of ``ghc`` library
|
|
135
|
|
- libraries/bytestring/bytestring.cabal: Dependency of ``ghc`` library
|
|
136
|
|
- libraries/Cabal/Cabal/Cabal.cabal: Dependency of ``ghc-pkg`` utility
|
|
137
|
|
- libraries/Cabal/Cabal-syntax/Cabal-syntax.cabal: Dependency of ``ghc-pkg`` utility
|
|
138
|
|
- libraries/containers/containers/containers.cabal: Dependency of ``ghc`` library
|
|
139
|
|
- libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library
|
|
140
|
|
- libraries/directory/directory.cabal: Dependency of ``ghc`` library
|
|
141
|
|
- libraries/exceptions/exceptions.cabal: Dependency of ``ghc`` and ``haskeline`` library
|
|
142
|
|
- libraries/filepath/filepath.cabal: Dependency of ``ghc`` library
|
|
143
|
|
- compiler/ghc.cabal: The compiler itself
|
|
144
|
|
- libraries/ghci/ghci.cabal: The REPL interface
|
|
145
|
|
- libraries/ghc-boot/ghc-boot.cabal: Internal compiler library
|
|
146
|
|
- libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library
|
|
147
|
|
- libraries/ghc-compact/ghc-compact.cabal: Core library
|
|
148
|
|
- libraries/ghc-heap/ghc-heap.cabal: GHC heap-walking library
|
|
149
|
|
- libraries/ghc-prim/ghc-prim.cabal: Core library
|
|
150
|
|
- utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable
|
|
151
|
|
- utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable
|
|
152
|
|
- libraries/haskeline/haskeline.cabal: Dependency of ``ghci`` executable
|
|
153
|
|
- libraries/hpc/hpc.cabal: Dependency of ``hpc`` executable
|
|
154
|
|
- libraries/integer-gmp/integer-gmp.cabal: Core library
|
|
155
|
|
- libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library
|
|
156
|
|
- libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library
|
|
157
|
|
- libraries/pretty/pretty.cabal: Dependency of ``ghc`` library
|
|
158
|
|
- libraries/process/process.cabal: Dependency of ``ghc`` library
|
|
159
|
|
- libraries/stm/stm.cabal: Dependency of ``haskeline`` library
|
|
160
|
|
- libraries/template-haskell/template-haskell.cabal: Core library
|
|
161
|
|
- libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library
|
|
162
|
|
- libraries/text/text.cabal: Dependency of ``Cabal`` library
|
|
163
|
|
- libraries/time/time.cabal: Dependency of ``ghc`` library
|
|
164
|
|
- libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
|
|
165
|
|
- libraries/unix/unix.cabal: Dependency of ``ghc`` library
|
|
166
|
|
- libraries/Win32/Win32.cabal: Dependency of ``ghc`` library
|
|
167
|
|
- libraries/xhtml/xhtml.cabal: Dependency of ``haddock`` executable
|
|
168
|
|
- libraries/os-string/os-string.cabal: Dependency of ``filepath`` library
|
|
169
|
|
- libraries/file-io/file-io.cabal: Dependency of ``directory`` library |