+++ /dev/null
-<?xml version="1.0" encoding="iso-8859-1"?>
-<sect1 id="release-6-14-1">
- <title>Release notes for version 6.14.1</title>
-
- <para>
- The significant changes to the various parts of the compiler are
- listed in the following sections. There have also been numerous bug
- fixes and performance improvements over the 6.12 branch.
- </para>
-
- <sect2>
- <title>Highlights</title>
- <itemizedlist>
- <listitem>
- <para>
- GHC now defaults to the Haskell 2010 language standard.
- </para>
-
- <para>
- Libraries are not quite so straightforward. By default, GHC
- provides access to the <literal>base</literal> package,
- which includes the Haskell 2010 libraries, albeit with a few
- minor differences. For those who want to write strictly
- standards-conforming code we also provide
- the <literal>haskell2010</literal> package which provides
- the precise APIs specified by Haskell 2010, but because the
- module names in this package overlap with those in
- the <literal>base</literal> package it is not possible to
- use both <literal>haskell2010</literal>
- and <literal>base</literal> at the same time (this also
- applies to the <literal>array</literal> package). Hence to use
- the Haskell 2010 libraries you should hide
- the <literal>base</literal> and <literal>array</literal>
- packages, for example with GHCi:
-<screen>
-$ ghci -package haskell2010 -hide-package base -hide-package array
-</screen>
- If you are using Cabal it isn't necessary to
- hide <literal>base</literal> and <literal>array</literal>
- explicitly, just don't include them in your <literal>build-depends</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- On POSIX platforms, there is a new I/O manager based on
- epoll/kqueue/poll, which allows multithreaded I/O code to
- scale to a much larger number (100k+) of threads.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The inliner has been overhauled, which should in general
- give better performance while reducing unnecessary code-size
- explosion.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Large parts of the runtime system have been overhauled, in
- particular the machinery related to blocking and wakeup of
- threads and exception throwing (<literal>throwTo</literal>).
- Several instances of pathological performance have been
- fixed, especially where large numbers of threads are
- involved.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Due to changes in the runtime system, if you are
- using <literal>Control.Parallel.Strategies</literal> from
- the <literal>parallel</literal> package, please upgrade to
- at least version 2 (preferably version 3). The
- implementation of Strategies
- in <literal>parallel-1.x</literal> will lose parallelism
- with GHC 6.14.1.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The full Haskell <literal>import</literal> syntax can now been
- used to bring modules into scope in GHCi, e.g.
- </para>
-<programlisting>
-Prelude> import Data.List as L
-Prelude Data.List> L.length "foo"
-3
-</programlisting>
- </listitem>
-
- <listitem>
- <para>
- GHC now comes with a more recent mingw bundled on Windows,
- which includes a fix for windres on Windows 7.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Language changes</title>
- <itemizedlist>
- <listitem>
- <para>
- GHC now understands the <literal>Haskell98</literal> and
- <literal>Haskell2010</literal> languages.
- </para>
-
- <para>
- These get processed before the language extension pragmas,
- and define the default sets of extensions that are enabled.
- If neither is specified, then the default is
- <literal>Haskell2010</literal> plus the
- <literal>MonoPatBinds</literal> extension.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHC now supports the <literal>DoAndIfThenElse</literal>
- extension, which is part of the Haskell 2010 standard.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Datatype contexts, such as the <literal>Eq a</literal> in
- </para>
-<programlisting>
-data Eq a => Set a = NilSet | ConsSet a (Set a)
-</programlisting>
- <para>
- are now treated as an extension
- <literal>DatatypeContexts</literal> (on by default) by GHC.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHC's support for unicode source has been improved, including
- removing support for U+22EF for the <literal>..</literal>
- symbol. See <xref linkend="unicode-syntax" /> for more details.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Pragmas are now reread after preprocessing. In particular,
- this means that if a pragma is used to turn CPP on, then other
- pragmas can be put in CPP conditionals.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>TypeOperators</literal> extension now allows
- instance heads to use infix syntax.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>PackageImports</literal> extension now understands
- <literal>this</literal> to mean the current package.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>INLINE</literal> and <literal>NOINLINE</literal>
- pragmas can now take a <literal>CONLIKE</literal> modifier,
- which indicates that the right hand side is cheap to compute,
- and can thus be duplicated more freely.
- See <xref linkend="conlike" /> for more details.
- </para>
- </listitem>
-
- <listitem>
- <para>
- A <literal>ForceSpecConstr</literal> annotation on a type, e.g.
- </para>
-<programlisting>
-import SpecConstr
-{-# ANN type SPEC ForceSpecConstr #-}
-</programlisting>
- <para>
- can be used to force GHC to fully specialise argument of that
- type.
- </para>
- </listitem>
-
- <listitem>
- <para>
- A <literal>NoSpecConstr</literal> annotation on a type, e.g.
- </para>
-<programlisting>
-import SpecConstr
-{-# ANN type T NoSpecConstr #-}
-</programlisting>
- <para>
- can be used to prevent SpecConstr from specialising on
- arguments of that type.
- </para>
- </listitem>
-
- <listitem>
- <para>
- There is are two experimental new extensions
- <literal>AlternativeLayoutRule</literal> and
- <literal>AlternativeLayoutRuleTransitional</literal>,
- which are for exploring alternative layout rules in Haskell'.
- The details are subject to change, so we advise against using
- them in real code for now.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>NewQualifiedOperators</literal> extension has
- been deprecated, as it was rejected by the Haskell' committee.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Warnings</title>
- <itemizedlist>
- <listitem>
- <para>
- There is now a warning for missing import lists, controlled
- by the new <literal>-fwarn-missing-import-lists</literal> flag.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHC will now warn about <literal>SPECIALISE</literal> and
- <literal>UNPACK</literal> pragmas that have no effect.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>DLLs</title>
- <itemizedlist>
- <listitem>
- <para>
- Shared libraries are once again supported on Windows.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Shared libraries are now supported on OS X, both on x86 and on
- PowerPC. The new <literal>-dylib-install-name</literal> GHC
- flag is used to set the location of the dynamic library.
- See <xref linkend="finding-shared-libs" /> for more details.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Runtime system</title>
-
- <itemizedlist>
- <listitem>
- <para>
- For security reasons, by default, the only RTS flag that
- programs accept is <literal>+RTS --info</literal>. If you want
- the full range of RTS flags then you need to link with the new
- <literal>-rtsopts</literal> flag. See
- <xref linkend="options-linker" /> for more details.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The RTS now exports a function <literal>setKeepCAFs</literal>
- which is important when loading Haskell DLLs dynamically, as
- a DLL may refer to CAFs that hae already been GCed.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The garbage collector no longer allows you to specify a number
- of steps; there are now always 2. The <literal>-T</literal>
- RTS flag has thus been removed.
- </para>
- </listitem>
-
- <listitem>
- <para>
- A new RTS flag <literal>-H</literal> causes the RTS to use a
- larger nursery, but without exceeding the amount of memory
- that the application is already using. It makes some programs
- go slower, but others go faster.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHC now returns memory to the OS, if memory usage peaks and
- then drops again. This is mainly useful for long running
- processes which normally use very little memory, but
- occasionally need a lot of memory for a short period of time.
- </para>
- </listitem>
-
- <listitem>
- <para>
- On OS X, eventLog events are now available as DTrace probes.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The PAPI support has been improved. The new RTS flag
- <literal>-a#0x40000000</literal> can be used to tell the RTS
- to collect the native PAPI event <literal>0x40000000</literal>.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Compiler</title>
- <itemizedlist>
- <listitem>
- <para>
- GHC now defaults to <literal>--make</literal> mode, i.e. GHC
- will chase dependencies for you automatically by default.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHC now includes an LLVM code generator.
- </para>
- <para>
- This includes a number of new flags:
- a flag to tell GHC to use LLVM, <literal>-fllvm</literal>;
- a flag to dump the LLVM input ,<literal>-ddump-llvm</literal>;
- flags to keep the LLVM intermediate files,
- <literal>-keep-llvm-file</literal> and
- <literal>-keep-llvm-files</literal>;
- flags to set the location and options for the LLVM assembler,
- optimiser and compiler,
- <literal>-pgmla</literal>,
- <literal>-pgmlo</literal>,
- <literal>-pgmlc</literal>,
- <literal>-optla</literal>,
- <literal>-optlo</literal> and
- <literal>-optlc</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- It is now possible to use <literal>-fno-code</literal> with
- <literal>--make</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The new flag <literal>-dsuppress-coercions</literal> controls
- whether GHC prints coercions in core dumps.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The new flag <literal>-dsuppress-module-prefixes</literal>
- controls whether GHC prints module qualification prefixes
- in core dumps.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The inliner has been overhauled. The most significant
- user-visible change is that only saturated functions are
- inlined, e.g.
- </para>
-<programlisting>
-(.) f g x = f (g x)
-</programlisting>
- <para>
- would only be inlined if <literal>(.)</literal> is applied to 3
- arguments, while
- </para>
-<programlisting>
-(.) f g = \x -> f (g x)
-</programlisting>
- <para>
- will be inlined if only applied to 2 arguments.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>-finline-if-enough-args</literal> flag is no
- longer supported.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Column numbers in warnings and error messages now start at 1,
- as is more standard, rather than 0.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHCi now understands most linker scripts. In particular, this
- means that GHCi is able to load the C pthread library.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>ghc --info</literal> output has been updated:
- </para>
- <para>
- It now includes the
- location of the global package database, in the
- <literal>Global Package DB</literal> field.
- </para>
- <para>
- It now includes the build, host and target platforms, in the
- <literal>Build platform</literal>,
- <literal>Host platform</literal> and
- <literal>Target platform</literal> fields.
- </para>
- <para>
- It now includes a <literal>Have llvm code generator</literal>
- field.
- </para>
- <para>
- The <literal>Win32 DLLs</literal> field has been removed.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The registerised via-C backend, and the
- <literal>-fvia-C</literal> flag, have been deprecated. The poor
- floating-point performance in the x86 native code generator
- has now been fixed, so we don't believe there is still any
- reason to use the via-C backend.
- </para>
- </listitem>
-
- <listitem>
- <para>
- There is now a new flag <literal>--supported-extensions</literal>,
- which currently behaves the same as
- <literal>--supported-languages</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GHC progress output such as
- </para>
-<programlisting>
-[ 1 of 5] Compiling Foo ( Foo.hs, Foo.o )
-</programlisting>
- <para>
- is now sent to stdout rather than stderr.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The new flag <literal>-fexpose-all-unfoldings</literal>
- makes GHC put unfoldings for <emphasis>everything</emphasis>
- in the interface file.
- </para>
- </listitem>
-
- <listitem>
- <para>
- There are two new flags, <literal>-fno-specialise</literal>
- and <literal>-fno-float-in</literal>, for disabling the
- specialise and float-in passes.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The new flag <literal>-fstrictness-before=<replaceable>n</replaceable></literal> tells
- GHC to run an additional strictness analysis pass
- before simplifier phase <replaceable>n</replaceable>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- There is a new flag
- <literal>-funfolding-dict-discount</literal>
- for tweaking the optimiser's behaviour.
- </para>
- </listitem>
-
- <listitem>
- <para>
- The <literal>-fspec-inline-join-points</literal> flag has been
- removed.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>GHCi</title>
- <itemizedlist>
- <listitem>
- <para>
- GHCi now understands layout in multi-line commands, so
- this now works:
- </para>
-<programlisting>
-Prelude> :{
-Prelude| let x = 1
-Prelude| y = 2 in x + y
-Prelude| :}
-3
-</programlisting>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>Template Haskell and Quasi-Quoters</title>
- <itemizedlist>
- <listitem>
- <para>
- It is now possible to quasi-quote patterns with
- <literal>[p| ... |]</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- It is no longer to use a <literal>$</literal> before the
- name of a quasi-quoter, e.g. one can now say
- <literal>[expr| ... |]</literal> rather than
- <literal>[$expr| ... |]</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- It is now possible to use a quasi-quoter for types, e.g.
- <literal>f :: [$qq| ... |]</literal>
- </para>
- </listitem>
-
- <listitem>
- <para>
- It is now possible to quasi-quote existentials and GADTs.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2>
- <title>GHC API</title>
- <itemizedlist>
- <listitem>
- <para>
- There are now <literal>Data</literal> and
- <literal>Typeable</literal> instances for the
- HsSyn typed.
- </para>
- </listitem>
-
- <listitem>
- <para>
- As language extensions are not applied until after the base
- language (Haskell98, Haskell2010 or the default) has been
- selected, it is now necessary to tell the GHC API the point
- at which the extension flags should be processed. Normally
- this is done by calling
- <literal>DynFlags.flattenExtensionFlags</literal> once all
- the flags and pragmas have been read.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
-<!--
- <sect2>
- <title>Libraries</title>
-
- <itemizedlist>
- </itemizedlist>
- </sect2>
--->
-</sect1>
-