summaryrefslogtreecommitdiff
path: root/docs/users_guide/intro.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/users_guide/intro.rst')
-rw-r--r--docs/users_guide/intro.rst177
1 files changed, 177 insertions, 0 deletions
diff --git a/docs/users_guide/intro.rst b/docs/users_guide/intro.rst
new file mode 100644
index 0000000000..281c04a211
--- /dev/null
+++ b/docs/users_guide/intro.rst
@@ -0,0 +1,177 @@
+.. _introduction-GHC:
+
+Introduction to GHC
+===================
+
+This is a guide to using the Glasgow Haskell Compiler (GHC): an
+interactive and batch compilation system for the
+`Haskell 2010 <http://www.haskell.org/>`__ language.
+
+GHC has two main components: an interactive Haskell interpreter (also
+known as GHCi), described in :ref:`ghci`, and a batch compiler,
+described throughout :ref:`using-ghc`. In fact, GHC consists of a single
+program which is just run with different options to provide either the
+interactive or the batch system.
+
+The batch compiler can be used alongside GHCi: compiled modules can be
+loaded into an interactive session and used in the same way as
+interpreted code, and in fact when using GHCi most of the library code
+will be pre-compiled. This means you get the best of both worlds: fast
+pre-compiled library code, and fast compile turnaround for the parts of
+your program being actively developed.
+
+GHC supports numerous language extensions, including concurrency, a
+foreign function interface, exceptions, type system extensions such as
+multi-parameter type classes, local universal and existential
+quantification, functional dependencies, scoped type variables and
+explicit unboxed types. These are all described in
+:ref:`ghc-language-features`.
+
+GHC has a comprehensive optimiser, so when you want to Really Go For It
+(and you've got time to spare) GHC can produce pretty fast code.
+Alternatively, the default option is to compile as fast as possible
+while not making too much effort to optimise the generated code
+(although GHC probably isn't what you'd describe as a fast compiler :-).
+
+GHC's profiling system supports "cost centre stacks": a way of seeing
+the profile of a Haskell program in a call-graph like structure. See
+:ref:`profiling` for more details.
+
+GHC comes with a number of libraries. These are described in separate
+documentation.
+
+.. _getting:
+
+Obtaining GHC
+-------------
+
+Go to the `GHC home page <http://www.haskell.org/ghc/>`__ and follow the
+"download" link to download GHC for your platform.
+
+Alternatively, if you want to build GHC yourself, head on over to the
+:ghc-wiki:`GHC Building Guide <Building>` to find out how to get the sources,
+and build it on your system. Note that GHC itself is written in Haskell, so you
+will still need to install GHC in order to build it.
+
+.. _mailing-lists-GHC:
+
+Meta-information: Web sites, mailing lists, etc.
+------------------------------------------------
+
+.. index::
+ single: mailing lists, Glasgow Haskell
+ single: Glasgow Haskell mailing lists
+
+On the World-Wide Web, there are several URLs of likely interest:
+
+- `GHC home page <http://www.haskell.org/ghc/>`__
+
+- `GHC Developers Home <http://ghc.haskell.org/trac/ghc/>`__ (developer
+ documentation, wiki, and bug tracker)
+
+We run the following mailing lists about GHC. We encourage you to join,
+as you feel is appropriate.
+
+``glasgow-haskell-users``
+ This list is for GHC users to chat among themselves. If you have a
+ specific question about GHC, please check the
+ `FAQ <http://www.haskell.org/haskellwiki/GHC/FAQ>`__ first.
+
+ Subscribers can post to the list by sending their message to
+ glasgow-haskell-users@haskell.org. Further information can be found
+ on the
+ `Mailman page <http://www.haskell.org/mailman/listinfo/glasgow-haskell-users>`__.
+
+``ghc-devs``
+ The GHC developers hang out here. If you are working with the GHC API
+ or have a question about GHC's implementation, feel free to chime in.
+
+ Subscribers can post to the list by sending their message to
+ ghc-devs@haskell.org. Further information can be found on the
+ `Mailman page <http://www.haskell.org/mailman/listinfo/ghc-devs>`__.
+
+There are several other Haskell and GHC-related mailing lists served by
+``www.haskell.org``. Go to http://www.haskell.org/mailman/listinfo/
+for the full list.
+
+.. _bug-reporting:
+
+Reporting bugs in GHC
+---------------------
+
+.. index::
+ single: bugs; reporting
+ single: reporting bugs
+
+Glasgow Haskell is a changing system so there are sure to be bugs in it.
+If you find one, please see :ghc-wiki:`this wiki page <ReportABug>` for
+information on how to report it.
+
+.. _version-numbering:
+
+GHC version numbering policy
+----------------------------
+
+.. index::
+ single: version, of ghc
+
+As of GHC version 6.8, we have adopted the following policy for
+numbering GHC versions:
+
+ Stable branches are numbered ``x.y``, where ⟨y⟩ is *even*. Releases
+ on the stable branch ``x.y`` are numbered ``x.y.z``, where ⟨z⟩ (>=
+ 1) is the patchlevel number. Patchlevels are bug-fix releases only,
+ and never change the programmer interface to any system-supplied
+ code. However, if you install a new patchlevel over an old one you
+ will need to recompile any code that was compiled against the old
+ libraries.
+
+ The value of ``__GLASGOW_HASKELL__`` (see :ref:`c-pre-processor`)
+ for a major release ``x.y.z`` is the integer ⟨xyy⟩ (if ⟨y⟩ is a
+ single digit, then a leading zero is added, so for example in
+ version 6.8.2 of GHC we would have ``__GLASGOW_HASKELL__==608``).
+
+ .. index::
+ single: __GLASGOW_HASKELL__
+
+ We may make snapshot releases of the current stable branch
+ `available for
+ download <http://www.haskell.org/ghc/dist/stable/dist/>`__, and the
+ latest sources are available from
+ :ghc-wiki:`the git repositories <Repositories>`.
+
+ Stable snapshot releases are named ``x.y.z.YYYYMMDD``. where
+ ``YYYYMMDD`` is the date of the sources from which the snapshot was
+ built, and ``x.y.z+1`` is the next release to be made on that
+ branch. For example, ``6.8.1.20040225`` would be a snapshot of the
+ ``6.8`` branch during the development of ``6.8.2``.
+
+ The value of ``__GLASGOW_HASKELL__`` for a snapshot release is the
+ integer ⟨xyy⟩. You should never write any conditional code which
+ tests for this value, however: since interfaces change on a
+ day-to-day basis, and we don't have finer granularity in the values
+ of ``__GLASGOW_HASKELL__``, you should only conditionally compile
+ using predicates which test whether ``__GLASGOW_HASKELL__`` is equal
+ to, later than, or earlier than a given major release.
+
+ We may make snapshot releases of the HEAD `available for
+ download <http://www.haskell.org/ghc/dist/current/dist/>`__, and the
+ latest sources are available from
+ :ghc-wiki:`the git repositories <Repositories>`.
+
+ Unstable snapshot releases are named ``x.y.YYYYMMDD``. where
+ ``YYYYMMDD`` is the date of the sources from which the snapshot was
+ built. For example, ``6.7.20040225`` would be a snapshot of the HEAD
+ before the creation of the ``6.8`` branch.
+
+ The value of ``__GLASGOW_HASKELL__`` for a snapshot release is the
+ integer ⟨xyy⟩. You should never write any conditional code which
+ tests for this value, however: since interfaces change on a
+ day-to-day basis, and we don't have finer granularity in the values
+ of ``__GLASGOW_HASKELL__``, you should only conditionally compile
+ using predicates which test whether ``__GLASGOW_HASKELL__`` is equal
+ to, later than, or earlier than a given major release.
+
+The version number of your copy of GHC can be found by invoking ``ghc``
+with the ``--version`` flag (see :ref:`options-help`).
+