Provide way to build using existing C compiler on Windows.
[ghc.git] / docs / users_guide / 8.4.1-notes.rst
1 .. _release-8-4-1:
2
3 Release notes for version 8.4.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.2.1 release.
9
10
11 Highlights
12 ----------
13
14 The highlights, since the 8.2.1 release, are:
15
16 -  Many, many bug fixes.
17
18 Full details
19 ------------
20
21 Language
22 ~~~~~~~~
23
24 Compiler
25 ~~~~~~~~
26
27 - The ``configure`` script now no longer accepts ``--with-TOOL`` flags (e.g.
28   ``--with-nm``, ``--with-ld``, etc.). Instead, these are taken from environment
29   variables, as is typical in ``autoconf`` scripts. For instance,
30   ``./configure --with-nm=/usr/local/bin/nm`` turns into
31   ``./configure NM=/usr/local/bin/nm``.
32
33 - Derived ``Functor``, ``Foldable``, and ``Traversable`` instances are now
34   optimized when their last type parameters have phantom roles.
35   Specifically, ::
36
37     fmap _ = coerce
38     traverse _ x = pure (coerce x)
39     foldMap _ _ = mempty
40
41   These definitions of ``foldMap`` and ``traverse`` are lazier than the ones we
42   would otherwise derive, as they may produce results without inspecting their
43   arguments at all.
44
45   See also :ref:`deriving-functor`, :ref:`deriving-foldable`, and
46   :ref:`deriving-traversable`.
47
48 - Derived ``Functor``, ``Foldable``, ``Traversable``, ``Generic``, and
49   ``Generic1`` instances now have better, and generally better-documented,
50   behaviors for types with no constructors. In particular, ::
51
52       fmap _ x = case x of
53       foldMap _ _ = mempty
54       traverse _ x = pure (case x of)
55       to x = case x of
56       to1 x = case x of
57       from x = case x of
58       from1 x = case x of
59
60   The new behavior generally leads to more useful error messages than the
61   old did, and lazier semantics for ``foldMap`` and ``traverse``.
62
63 - Derived ``Foldable`` instances now derive custom definitions for ``null``
64   instead of using the default one. This leads to asymptotically better
65   performance for recursive types not shaped like cons-lists, and allows ``null``
66   to terminate for more (but not all) infinitely large structures.
67
68 - Derived instances for types with no constructors now have appropriate
69   arities: they take all their arguments before producing errors. This may not
70   be terribly important in practice, but it seems like the right thing to do.
71   Previously, we generated ::
72
73       (==) = error ...
74
75 Now we generate ::
76
77       _ == _ = error ...
78
79 - Configure on Windows now supports ``--enable-distro-toolchain`` which can be
80   used to build a GHC using compilers on your ``PATH`` instead of using the
81   bundled bindist. See :ghc-ticket:`13792`
82
83 - Lots of other bugs. See `Trac <https://ghc.haskell.org/trac/ghc/query?status=closed&milestone=8.4.1&col=id&col=summary&col=status&col=type&col=priority&col=milestone&col=component&order=priority>`_
84   for a complete list.
85
86 Runtime system
87 ~~~~~~~~~~~~~~
88
89 - Function ``hs_add_root()`` was removed. It was a no-op since GHC-7.2.1
90   where module initialisation stopped requiring a call to ``hs_add_root()``.
91
92 - Proper import library support added to GHC which can handle all of the libraries produced
93   by dlltool. The limitation of them needing to be named with the suffix .dll.a is also removed.
94   See :ghc-ticket:`13606`, :ghc-ticket:`12499`, :ghc-ticket:`12498`
95
96 Template Haskell
97 ~~~~~~~~~~~~~~~~
98
99 ``ghc`` library
100 ~~~~~~~~~~~~~~~
101
102 - hsSyn Abstract Syntax Tree (AST) is now extensible via the mechanism described in `Trees that Grow <http://www.jucs.org/jucs_23_1/trees_that_grow/jucs_23_01_0042_0062_najd.pdf>`_
103
104   The main change for users of the GHC API is that the AST is no longer indexed
105   by the type used as the identifier, but by a specific index type, ::
106
107       type GhcPs   = GhcPass 'Parsed      -- Old 'RdrName' type param
108       type GhcRn   = GhcPass 'Renamed     -- Old 'Name' type param
109       type GhcTc   = GhcPass 'Typechecked -- Old 'Id' type para,
110       type GhcTcId = GhcTc                -- Old 'TcId' type param
111
112   The simplest way to support the current GHC as well as earlier ones is to define ::
113
114       #if MIN_VERSION_ghc(8,3,0)
115       type ParseI     = GhcPs
116       type RenameI    = GhcRn
117       type TypecheckI = GhcTc
118       #else
119       type ParseI     = RdrName
120       type RenameI    = Name
121       type TypecheckI = Var
122       #endif
123
124   and then replace all hardcoded index types accordingly. For polymorphic types,
125   the constraint ::
126
127       #if MIN_VERSION_ghc(8,3,0)
128       -- |bundle up the constraints required for a trees that grow pass
129       type IsPass pass = (DataId pass, OutputableBndrId pass, SourceTextX pass)
130       else
131       type IsPass pass = (DataId pass, OutputableBndrId pass)
132       #endif
133
134   can be used.