[project @ 2002-08-13 10:13:40 by simonmar]
[ghc-hetmet.git] / ghc / docs / users_guide / sooner.sgml
index 54ad5f1..767de16 100644 (file)
@@ -1,5 +1,5 @@
 <Chapter id="sooner-faster-quicker">
-<Title>Advice on: sooner, faster, smaller, stingier
+<Title>Advice on: sooner, faster, smaller, thriftier
 </Title>
 
 <Para>
@@ -33,10 +33,10 @@ GHC is surprisingly zippy for normal compilations without <Option>-O</Option>!
 <ListItem>
 <Para>
 Within reason, more memory for heap space means less garbage
-collection for GHC, which means less compilation time.  If you use
-the <Option>-Rgc-stats</Option> option, you'll get a garbage-collector report.
-(Again, you can use the cheap-and-nasty <Option>-optCrts-Sstderr</Option> option to
-send the GC stats straight to standard error.)
+collection for GHC, which means less compilation time.  If you use the
+<Option>-Rghc-timing</Option> option, you'll get a garbage-collector
+report.  (Again, you can use the cheap-and-nasty <Option>+RTS -Sstderr
+-RTS</Option> option to send the GC stats straight to standard error.)
 </Para>
 
 <Para>
@@ -128,8 +128,8 @@ individually with <Option>-fno-strictness</Option>.
 
 <Para>
 To figure out which part of the compiler is badly behaved, the
-<Option>-dshow-passes</Option><IndexTerm><Primary>-dshow-passes option</Primary></IndexTerm> option is your
-friend.
+<option>-v2</option><indexterm><primary><option>-v</option></primary>
+</indexterm> option is your friend.
 </Para>
 
 <Para>
@@ -141,19 +141,14 @@ allocator to founder.  Bring on <Option>-fvia-C</Option><IndexTerm><Primary>-fvi
 </ListItem>
 </VarListEntry>
 <VarListEntry>
-<Term>Avoid the consistency-check on linking:</Term>
-<ListItem>
-<Para>
-Use <Option>-no-link-chk</Option><IndexTerm><Primary>-no-link-chk</Primary></IndexTerm>; saves effort.  This is
-probably safe in a I-only-compile-things-one-way setup.
-</Para>
-</ListItem>
-</VarListEntry>
-<VarListEntry>
 <Term>Explicit <Literal>import</Literal> declarations:</Term>
 <ListItem>
 <Para>
-Instead of saying <Literal>import Foo</Literal>, say <Literal>import Foo (...stuff I want...)</Literal>.
+Instead of saying <Literal>import Foo</Literal>, say <Literal>import
+Foo (...stuff I want...)</Literal> You can get GHC to tell you the
+minimal set of required imports by using the
+<option>-ddump-minimal-imports</option> option (see <xref
+linkend="hi-options">).
 </Para>
 
 <Para>
@@ -227,15 +222,15 @@ At present, <Option>-O2</Option> is nearly indistinguishable from <Option>-O</Op
 <Term>Compile via C and crank up GCC:</Term>
 <ListItem>
 <Para>
-Even with <Option>-O</Option>, GHC tries to
-use a native-code generator, if available.  But the native
-code-generator is designed to be quick, not mind-bogglingly clever.
-Better to let GCC have a go, as it tries much harder on register
-allocation, etc.
-</Para>
+The native code-generator is designed to be quick, not mind-bogglingly
+clever.  Better to let GCC have a go, as it tries much harder on
+register allocation, etc.</para>
+
+<para>At the moment, if you turn on <option>-O</option> you get GCC
+instead.  This may change in the future.</para>
 
 <Para>
-So, when we want very fast code, we use: <Option>-O -fvia-C -O2-for-C</Option>.
+So, when we want very fast code, we use: <Option>-O -fvia-C</Option>.
 </Para>
 </ListItem>
 </VarListEntry>
@@ -456,7 +451,7 @@ types.
 </ListItem>
 </VarListEntry>
 <VarListEntry>
-<Term>Use <Function>&lowbar;ccall&lowbar;s</Function> (a GHC extension) to plug into fast libraries:</Term>
+<Term>Use <Literal>foreign import</Literal> (a GHC extension) to plug into fast libraries:</Term>
 <ListItem>
 <Para>
 This may take real work, but&hellip; There exist piles of
@@ -465,18 +460,19 @@ to compete with it, but link with it.
 </Para>
 
 <Para>
-<XRef LinkEnd="glasgow-ccalls"> says a little about how to use C calls.
+<XRef LinkEnd="ffi"> describes the foreign function interface.
 </Para>
 </ListItem>
 </VarListEntry>
+
 <VarListEntry>
 <Term>Don't use <Literal>Float</Literal>s:</Term>
 <ListItem>
 <Para>
-We don't provide specialisations of Prelude functions for <Literal>Float</Literal>
-(but we do for <Literal>Double</Literal>).  If you end up executing overloaded
-code, you will lose on performance, perhaps badly.
-</Para>
+If you're using <literal>Complex</literal>, definitely use
+<literal>Complex Double</literal> rather than <literal>Complex
+Float</literal> (the former is specialised heavily, but the latter
+isn't).</para>
 
 <Para>
 <Literal>Floats</Literal> (probably 32-bits) are almost always a bad idea, anyway,
@@ -525,7 +521,7 @@ Decrease the &ldquo;go-for-it&rdquo; threshold for unfolding smallish
 expressions.  Give a
 <Option>-funfolding-use-threshold0</Option><IndexTerm><Primary>-funfolding-use-threshold0
 option</Primary></IndexTerm> option for the extreme case. (&ldquo;Only unfoldings with
-zero cost should proceed.&rdquo;)  Warning: except in certain specialiised
+zero cost should proceed.&rdquo;)  Warning: except in certain specialised
 cases (like Happy parsers) this is likely to actually
 <Emphasis>increase</Emphasis> the size of your program, because unfolding
 generally enables extra simplifying optimisations to be performed.
@@ -541,8 +537,8 @@ Use <Literal>strip</Literal> on your executables.
 
 </Sect1>
 
-<Sect1 id="stingier">
-<Title>Stingier: producing a program that gobbles less heap space
+<Sect1 id="thriftier">
+<Title>Thriftier: producing a program that gobbles less heap space
 </Title>
 
 <Para>