FIX #1861: floating-point constants for infinity and NaN in via-C
[ghc-hetmet.git] / docs / users_guide / intro.xml
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <chapter id="introduction-GHC">
3   <title>Introduction to GHC</title>
4
5   <para>This is a guide to using the Glasgow Haskell Compiler (GHC):
6   an interactive and batch compilation system for the <ulink
7   url="http://www.haskell.org/">Haskell&nbsp;98</ulink>
8   language.</para>
9
10   <para>GHC has two main components: an interactive Haskell
11   interpreter (also known as GHCi), described in <xref
12   linkend="ghci"/>, and a batch compiler, described throughout <xref
13   linkend="using-ghc"/>.  In fact, GHC consists of a single program
14   which is just run with different options to provide either the
15   interactive or the batch system.</para>
16
17   <para>The batch compiler can be used alongside GHCi: compiled
18   modules can be loaded into an interactive session and used in the
19   same way as interpreted code, and in fact when using GHCi most of
20   the library code will be pre-compiled.  This means you get the best
21   of both worlds: fast pre-compiled library code, and fast compile
22   turnaround for the parts of your program being actively
23   developed.</para>
24
25   <para>GHC supports numerous language extensions, including
26   concurrency, a foreign function interface, exceptions, type system
27   extensions such as multi-parameter type classes, local universal and
28   existential quantification, functional dependencies, scoped type
29   variables and explicit unboxed types.  These are all described in
30   <xref linkend="ghc-language-features"/>.</para>
31
32   <para>GHC has a comprehensive optimiser, so when you want to Really
33   Go For It (and you've got time to spare) GHC can produce pretty fast
34   code.  Alternatively, the default option is to compile as fast as
35   possible while not making too much effort to optimise the generated
36   code (although GHC probably isn't what you'd describe as a fast
37   compiler :-).</para>
38   
39   <para>GHC's profiling system supports &ldquo;cost centre
40   stacks&rdquo;: a way of seeing the profile of a Haskell program in a
41   call-graph like structure.  See <xref linkend="profiling"/> for more
42   details.</para>
43
44   <para>GHC comes with a number of libraries. These are
45   described in separate documentation.</para>
46
47   <sect1 id="mailing-lists-GHC">
48     <title>Meta-information: Web sites, mailing lists, etc.</title>
49
50     <indexterm><primary>mailing lists, Glasgow Haskell</primary></indexterm>
51     <indexterm><primary>Glasgow Haskell mailing lists</primary></indexterm>
52
53     <para>On the World-Wide Web, there are several URLs of likely
54     interest:</para>
55
56     <itemizedlist>
57       <listitem>
58         <para><ulink url="http://www.haskell.org/" >Haskell home
59         page</ulink></para>
60       </listitem>
61
62       <listitem>
63         <para><ulink url="http://www.haskell.org/ghc/">GHC home
64         page</ulink></para>
65       </listitem>
66
67       <listitem>
68         <para><ulink
69         url="http://www.cs.nott.ac.uk/~gmh/faq.html">comp.lang.functional
70         FAQ</ulink></para>
71       </listitem>
72
73     </itemizedlist>
74
75     <para>We run the following mailing lists about Glasgow Haskell.
76     We encourage you to join, as you feel is appropriate.</para>
77
78     <variablelist>
79       <varlistentry>
80         <term>glasgow-haskell-users:</term>
81         <listitem>
82           <para>This list is for GHC users to chat among themselves.
83           If you have a specific question about GHC, please check the
84           <ulink
85           url="http://www.haskell.org/haskellwiki/GHC/FAQ">FAQ</ulink>
86           first.</para>
87
88           <variablelist>
89             <varlistentry>
90               <term>list email address:</term>
91               <listitem>
92                 <para><email>glasgow-haskell-users@haskell.org</email></para>
93               </listitem>
94             </varlistentry>
95
96             <varlistentry>
97               <term>subscribe at:</term> 
98               <listitem>
99                 <para><ulink
100               url="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users"><literal>http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</literal></ulink>.</para>
101               </listitem>
102             </varlistentry>
103
104             <varlistentry>
105               <term>admin email address:</term>
106               <listitem>
107                 <para><email>glasgow-haskell-users-admin@haskell.org</email></para>
108               </listitem>
109             </varlistentry>
110
111             <varlistentry>
112               <term>list archives:</term>
113               <listitem>
114                 <para><ulink
115           url="http://www.haskell.org/pipermail/glasgow-haskell-users/"><literal>http://www.haskell.org/pipermail/glasgow-haskell-users/</literal></ulink></para>
116               </listitem>
117             </varlistentry>
118           </variablelist>
119         </listitem>
120       </varlistentry>
121
122       <varlistentry>
123         <term>cvs-ghc:</term>
124         <listitem>
125           <para>The hardcore GHC developers hang out here.  This list
126           also gets commit message from the GHC darcs repository.  There are
127           other lists for other darcs
128           repositories (most notably <literal>cvs-libraries</literal>).
129           </para>
130           
131           <variablelist>
132             <varlistentry>
133               <term>list email address:</term>
134               <listitem>
135                 <para><email>cvs-ghc@haskell.org</email></para>
136               </listitem>
137             </varlistentry>
138
139             <varlistentry>
140               <term>subscribe at:</term> 
141               <listitem>
142                 <para><ulink
143               url="http://www.haskell.org/mailman/listinfo/cvs-ghc"><literal>http://www.haskell.org/mailman/listinfo/cvs-ghc</literal></ulink>.</para>
144               </listitem>
145             </varlistentry>
146
147             <varlistentry>
148               <term>admin email address:</term>
149               <listitem>
150                 <para><email>cvs-ghc-admin@haskell.org</email></para>
151               </listitem>
152             </varlistentry>
153
154             <varlistentry>
155               <term>list archives:</term>
156               <listitem>
157                 <para><ulink
158           url="http://www.haskell.org/pipermail/cvs-ghc/"><literal>http://www.haskell.org/pipermail/cvs-ghc/</literal></ulink></para>
159               </listitem>
160             </varlistentry>
161           </variablelist>
162         </listitem>
163       </varlistentry>
164     </variablelist>
165
166     <para>There are several other haskell and GHC-related mailing
167     lists served by <literal>www.haskell.org</literal>.  Go to <ulink
168     url="http://www.haskell.org/mailman/listinfo/"><literal>http://www.haskell.org/mailman/listinfo/</literal></ulink>
169     for the full list.</para>
170
171     <para>Some Haskell-related discussion also takes place in the
172     Usenet newsgroup <literal>comp.lang.functional</literal>.</para>
173
174   </sect1>
175
176   <sect1 id="bug-reporting">
177     <title>Reporting bugs in GHC</title>
178     <indexterm><primary>bugs</primary><secondary>reporting</secondary>
179     </indexterm>
180     <indexterm><primary>reporting bugs</primary>
181     </indexterm>
182
183     <para>
184         Glasgow Haskell is a changing system so there are sure to be
185         bugs in it. If you find one, please see
186         <ulink url="http://hackage.haskell.org/trac/ghc/wiki/ReportABug">this wiki page</ulink>
187         for information on how to report it.
188     </para>
189
190   </sect1>
191
192   <sect1 id="version-numbering">
193     <title>GHC version numbering policy</title>
194     <indexterm><primary>version, of ghc</primary></indexterm>
195
196     <para>As of GHC version 6.8, we have adopted the following policy
197     for numbering GHC versions:</para>
198
199     <variablelist>
200       <varlistentry>
201         <term>Stable Releases</term>
202         <listitem>
203           <para>Stable branches are numbered <literal><replaceable>x</replaceable>.<replaceable>y</replaceable></literal>, where
204           <replaceable>y</replaceable> is <emphasis>even</emphasis>.
205           Releases on the stable branch <literal><replaceable>x</replaceable>.<replaceable>y</replaceable></literal> are numbered <literal><replaceable>x</replaceable>.<replaceable>y</replaceable>.<replaceable>z</replaceable></literal>, where
206           <replaceable>z</replaceable> (>= 1) is the patchlevel number.
207           Patchlevels are bug-fix releases only, and never
208           change the programmer interface to any system-supplied code.
209           However, if you install a new patchlevel over an old one you
210           will need to recompile any code that was compiled against the
211           old libraries.</para>
212
213           <para>The value of <literal>__GLASGOW_HASKELL__</literal>
214           (see <xref linkend="c-pre-processor"/>) for a major release
215           <literal><replaceable>x</replaceable>.<replaceable>y</replaceable>.<replaceable>z</replaceable></literal>
216           is the integer <replaceable>xyy</replaceable> (if
217           <replaceable>y</replaceable> is a single digit, then a leading zero
218           is added, so for example in version 6.8.2 of GHC we would have
219           <literal>__GLASGOW_HASKELL__==608</literal>).</para>
220           <indexterm>
221             <primary><literal>__GLASGOW_HASKELL__</literal></primary>
222           </indexterm>
223         </listitem>
224       </varlistentry>
225       
226       <varlistentry>
227         <term>Stable snapshots</term>
228         <listitem>
229           <para>
230       We may make snapshot releases of the current
231       stable branch <ulink url="http://www.haskell.org/ghc/dist/stable/dist/">available for download</ulink>, and the latest sources are available from <ulink url="http://hackage.haskell.org/trac/ghc/wiki/DarcsRepositories">the darcs repositories</ulink>.
232           </para>
233
234           <para>Stable snapshot releases are named
235           <literal><replaceable>x</replaceable>.<replaceable>y</replaceable>.<replaceable>z</replaceable>.<replaceable>YYYYMMDD</replaceable></literal>.
236           where <literal><replaceable>YYYYMMDD</replaceable></literal> is the date of the sources
237           from which the snapshot was built, and <literal><replaceable>x</replaceable>.<replaceable>y</replaceable>.<replaceable>z+1</replaceable></literal> is the next release to be made on that branch.
238           For example, <literal>6.8.1.20040225</literal> would be a
239           snapshot of the <literal>6.8</literal> branch during the development
240       of <literal>6.8.2</literal>.</para>
241
242           <para>The value of <literal>__GLASGOW_HASKELL__</literal>
243           for a snapshot release is the integer
244           <replaceable>xyy</replaceable>.  You should never write any
245           conditional code which tests for this value, however: since
246           interfaces change on a day-to-day basis, and we don't have
247           finer granularity in the values of
248           <literal>__GLASGOW_HASKELL__</literal>, you should only
249           conditionally compile using predicates which test whether
250           <literal>__GLASGOW_HASKELL__</literal> is equal to, later
251           than, or earlier than a given major release.</para>
252           <indexterm>
253             <primary><literal>__GLASGOW_HASKELL__</literal></primary>
254           </indexterm>
255         </listitem>
256       </varlistentry>
257
258       <varlistentry>
259         <term>Unstable snapshots</term>
260         <listitem>
261           <para>
262       We may make snapshot releases of the
263       HEAD <ulink url="http://www.haskell.org/ghc/dist/current/dist/">available for download</ulink>, and the latest sources are available from <ulink url="http://hackage.haskell.org/trac/ghc/wiki/DarcsRepositories">the darcs repositories</ulink>.
264           </para>
265
266           <para>Unstable snapshot releases are named
267           <literal><replaceable>x</replaceable>.<replaceable>y</replaceable>.<replaceable>YYYYMMDD</replaceable></literal>.
268           where <literal><replaceable>YYYYMMDD</replaceable></literal> is the date of the sources
269           from which the snapshot was built.
270           For example, <literal>6.7.20040225</literal> would be a
271           snapshot of the HEAD before the creation of the
272       <literal>6.8</literal> branch.</para>
273
274           <para>The value of <literal>__GLASGOW_HASKELL__</literal>
275           for a snapshot release is the integer
276           <replaceable>xyy</replaceable>.  You should never write any
277           conditional code which tests for this value, however: since
278           interfaces change on a day-to-day basis, and we don't have
279           finer granularity in the values of
280           <literal>__GLASGOW_HASKELL__</literal>, you should only
281           conditionally compile using predicates which test whether
282           <literal>__GLASGOW_HASKELL__</literal> is equal to, later
283           than, or earlier than a given major release.</para>
284           <indexterm>
285             <primary><literal>__GLASGOW_HASKELL__</literal></primary>
286           </indexterm>
287         </listitem>
288       </varlistentry>
289     </variablelist>
290     
291     <para>The version number of your copy of GHC can be found by
292     invoking <literal>ghc</literal> with the
293     <literal>&ndash;&ndash;version</literal> flag (see <xref
294     linkend="options-help"/>).</para>
295   </sect1>
296
297
298 &relnotes;
299
300 </chapter>
301
302 <!-- Emacs stuff:
303      ;;; Local Variables: ***
304      ;;; mode: xml ***
305      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter") ***
306      ;;; End: ***
307  -->