summary refs log tree commit diff stats
path: root/readme.md
diff options
context:
space:
mode:
Diffstat (limited to 'readme.md')
-rw-r--r--readme.md247
1 files changed, 137 insertions, 110 deletions
diff --git a/readme.md b/readme.md
index 6eb85b0a3..f5dc1d6ab 100644
--- a/readme.md
+++ b/readme.md
@@ -1,146 +1,173 @@
-# <img src="https://raw.githubusercontent.com/nim-lang/assets/master/Art/logo-crown.png" width="36"> Nim [![Build Status](https://travis-ci.org/nim-lang/Nim.svg?branch=devel)](https://travis-ci.org/nim-lang/Nim)
+# ![Logo][image-nim-logo] Nim [![Build Status][badge-nim-travisci]][nim-travisci]
 
-This repo contains the Nim compiler, Nim's stdlib, tools and
-documentation. For more information about Nim, including downloads
-and documentation for the latest release, check out
-[Nim's website](http://nim-lang.org).
+This repository contains the Nim compiler, Nim's stdlib, tools and documentation.
+For more information about Nim, including downloads and documentation for
+the latest release, check out [Nim's website][nim-site].
 
 ## Compiling
-Compiling the Nim compiler is quite straightforward. Because
-the Nim compiler itself is written in the Nim programming language
-the C source of an older version of the compiler are needed to bootstrap the
-latest version. The C sources are available in a separate
-repo [here](http://github.com/nim-lang/csources).
-
-The compiler currently supports the following platform and architecture
-combinations:
+The compiler currently officially supports the following platform and
+architecture combinations:
 
   * Windows (Windows XP or greater) - x86 and x86_64
   * Linux (most, if not all, distributions) - x86, x86_64, ppc64 and armv6l
-  * Mac OS X 10.04 or higher - x86, x86_64 and ppc64
+  * Mac OS X (10.04 or greater) - x86, x86_64 and ppc64
 
-In reality a lot more are supported, however they are not tested regularly.
+More platforms are supported, however they are not tested regularly and they
+may not be as stable as the above-listed platforms.
 
-To build from source you will need:
+Compiling the Nim compiler is quite straightforward. First, the C source of
+an older version of the Nim compiler is needed to bootstrap the latest 
+version because the Nim compiler itself is written in the Nim programming
+language. Those C sources are available within the 
+[``nim-lang/csources``][csources-repo] repository.
 
-  * gcc 3.x or later recommended. Other alternatives which may work
-    are: clang, Visual C++, Intel's C++ compiler
-  * git or wget
+Next, to build from source you will need:
 
-**Note:** When installing ``gcc`` on Ubuntu (and likely other distros) ensure
-that the ``build-essentials`` package is installed also.
+  * A C compiler such as ``gcc`` 3.x/later or an alternative such as ``clang``,
+    ``Visual C++`` or ``Intel C++``. It is recommended to use ``gcc`` 3.x or
+    later.
+  * Either ``git`` or ``wget`` to download the needed source repositories.
+  * The ``build-essentials`` package when using ``gcc`` on Ubuntu (and likely
+    other distros as well). 
 
-If you are on a fairly modern *nix system, the following steps should work:
+Then, if you are on a \*nix system or Windows, the following steps should compile
+Nim from source using ``gcc``, ``git`` and the ``koch`` build tool (in the place
+of ``sh build.sh`` you should substitute ``build.bat`` on x86 Windows or
+``build64.bat`` on x86_64 Windows):
 
 ```
 $ git clone https://github.com/nim-lang/Nim.git
 $ cd Nim
-$ git clone --depth 1 https://github.com/nim-lang/csources
-$ cd csources && sh build.sh
-$ cd ..
+$ git clone --depth 1 https://github.com/nim-lang/csources.git
+$ cd csources
+$ sh build.sh
+$ cd ../
 $ bin/nim c koch
 $ ./koch boot -d:release
 ```
 
-You should then add the ``bin`` directory to your PATH, to make it easily
-executable on your system.
+Finally, once you have finished the build steps (on Windows, Mac or Linux) you
+should add the ``bin`` directory to your PATH.
 
-The above steps can be performed on Windows in a similar fashion, the
-``build.bat`` and ``build64.bat`` (for x86_64 systems) are provided to be used
-instead of ``build.sh``.
+## Koch
+``koch`` is the build tool used to build various parts of Nim and to generate
+documentation and the website, among other things. The ``koch`` tool can also
+be used to run the Nim test suite. 
 
-The ``koch`` tool is the Nim build tool, more ``koch`` related options are
-documented in [doc/koch.rst](doc/koch.rst).
+Assuming that you added Nim's ``bin`` directory to your PATH, you may execute
+the tests using ``./koch tests``. The test suite takes a while to run, but you
+can run a subset of tests by specifying a category (for example 
+``./koch tests cat async``).
 
+For more information on the ``koch`` build tool please see the documentation
+within the [doc/koch.rst](doc/koch.rst) file.
 
 ## Nimble
-[Nimble](https://github.com/nim-lang/nimble) is Nim's package manager. For the
-source based installations, where you added Nim's ``bin`` directory to your PATH,
-the easiest way of installing Nimble is via:
-
-```
-$ koch nimble
-```
+[Nimble][nimble-repo] is Nim's package manager. Assuming that you added Nim's
+``bin`` directory to your PATH, you may install Nimble by running ``koch nimble``
+within the root of the cloned repository.
 
 ## Community
-[![Join the Chat at irc.freenode.net#nim](https://img.shields.io/badge/IRC-join_chat_in_%23nim-blue.svg)](https://webchat.freenode.net/?channels=nim)
-[![Join the Gitter channel](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/nim-lang/Nim)
-[![Get help](https://img.shields.io/badge/Forum-get%20help-4eb899.svg)](http://forum.nim-lang.org)
-[![Stackoverflow](https://img.shields.io/badge/stackoverflow-use_%23nim_tag-yellow.svg)](http://stackoverflow.com/questions/tagged/nim?sort=newest&pageSize=15)
-[![Follow @nim_lang!](https://img.shields.io/twitter/follow/nim_lang.svg?style=social)](https://twitter.com/nim_lang)
-
-* The [forum](http://forum.nim-lang.org/) - the best place to ask questions and to discuss Nim.
-* [IRC (Freenode#nim)](https://webchat.freenode.net/?channels=nim) - a place to discuss
-  Nim in real-time, this is also where most development decision get made!
-* [Gitter](https://gitter.im/nim-lang/Nim) allows to discuss Nim from your browser, one click to join.
-  There is a bridge between Gitter and IRC channels.
-* [Stackoverflow](http://stackoverflow.com/questions/tagged/nim)
+[![Join the IRC chat][badge-nim-irc]][nim-irc]
+[![Join the Gitter chat][badge-nim-gitter]][nim-gitter]
+[![Get help][badge-nim-forum-gethelp]][nim-forum]
+[![View Nim posts on Stack Overflow][badge-nim-stackoverflow]][nim-stackoverflow-newest]
+[![Follow @nim_lang on Twitter][badge-nim-twitter]][nim-twitter]
+
+* The [forum][nim-forum] - the best place to ask questions and to discuss Nim.
+* [#nim IRC Channel (Freenode)][nim-irc] - a place to discuss Nim in real-time.
+  Also where most development decisions get made.
+* [Gitter][nim-gitter] - an additional place to discuss Nim in real-time. There
+  is a bridge between Gitter and the IRC channel.
+* [Stack Overflow][nim-stackoverflow] - a popular Q/A site for programming related
+  topics that includes posts about Nim.
 
 ## Contributing
+[![Contribute to Nim via Gratipay][badge-nim-gratipay]][nim-gratipay]
+[![Setup a bounty via Bountysource][badge-nim-bountysource]][nim-bountysource]
+[![Donate Bitcoins][badge-nim-bitcoin]][nim-bitcoin]
 
-[![Contribute to Nim via Gratipay!](https://img.shields.io/gratipay/team/nim.svg)](https://gratipay.com/nim/)
-[![Bountysource](https://img.shields.io/bountysource/team/nim/activity.svg)](https://www.bountysource.com/teams/nim)
-
-We welcome everyone's contributions to Nim. No matter how small or large
-the contribution is, anything from small spelling fixes to large modules
-intended to be included in the standard library are accepted. Before
-you get started, you should know the following about this repositories
-structure:
+We welcome everyone's contributions to Nim independent of how small or how large
+they are. Anything from small spelling fixes to large modules intended to
+be included in the standard library are welcome and appreciated. Before you get
+started contributing, you should familiarize yourself with the repository structure:
 
 * ``bin/``, ``build/`` - these directories are empty, but are used when Nim is built.
-* ``compiler/`` - the compiler source code, all the Nim source code files in this
-  directory implement the compiler. This also includes nimfix, and plugins
-  which live in ``compiler/nimfix`` and ``compiler/plugins``
-  respectively. Nimsuggest used to live in the ``compiler`` directory also,
-  but was moved to https://github.com/nim-lang/nimsuggest.
+* ``compiler/`` - the compiler source code. Also includes nimfix, and plugins within
+  ``compiler/nimfix`` and ``compiler/plugins`` respectively. Nimsuggest was moved to
+  the [``nim-lang/nimsuggest``][nimsuggest-repo] repository, though it previously also 
+  lived within the ``compiler/`` directory.
 * ``config/`` - the configuration for the compiler and documentation generator.
 * ``doc/`` - the documentation files in reStructuredText format.
-* ``lib/`` - where the standard library lives.
+* ``lib/`` - the standard library, including:
     * ``pure/`` - modules in the standard library written in pure Nim.
-    * ``impure/`` - modules in the standard library written in pure Nim which
-      depend on libraries written in other languages.
-    * ``wrappers/`` - modules which wrap libraries written in other languages.
-* ``tests/`` - contains tests for the compiler and standard library, organised by
-    category.
-* ``tools/`` - the tools including ``niminst`` and ``nimweb``, most of these are invoked
-    via ``koch``.
-* ``web/`` - the Nim website (http://nim-lang.org).
-* ``koch.nim`` - tool used to bootstrap Nim, generate C sources, build the website, documentation
-  and more.
-
-Most importantly, the ``koch`` tool can be used to run the test suite. To do so compile it first
-by executing ``nim c koch``, then execute ``./koch tests``. The test suite takes a while to run,
-but you can run specific tests by specifying a category to run, for example ``./koch tests cat async``.
-
-Make sure that the tests all pass before
-[submitting your pull request](https://help.github.com/articles/using-pull-requests/).
-If you're short on time, you can
-just run the tests specific to your change. Just run the category which corresponds to the change
-you've made. When you create your pull request, Travis CI will verify that all the tests pass
-anyway.
-
-If you're looking for things to do, take a look at our
-[issue tracker](https://github.com/nim-lang/Nim/issues). There is always plenty of issues
-labelled [``Easy``](https://github.com/nim-lang/Nim/labels/Easy), these should be a good
-starting point if this is your first contribution to Nim.
-
-You can also help with the development of Nim by making donations. You can do so
-in many ways:
-
-* [Gratipay](https://gratipay.com/nim/)
-* [Bountysource](https://www.bountysource.com/teams/nim)
-* Bitcoin - 1BXfuKM2uvoD6mbx4g5xM3eQhLzkCK77tJ
-
-Finally, if you have any questions feel free to submit a question on the issue tracker,
-on the [Nim forum](http://forum.nim-lang.org), or on IRC.
+    * ``impure/`` - modules in the standard library written in pure Nim with
+    dependencies written in other languages.
+    * ``wrappers/`` - modules which wrap dependencies written in other languages.
+* ``tests/`` - contains categorized tests for the compiler and standard library.
+* ``tools/`` - the tools including ``niminst`` and ``nimweb`` (mostly invoked via
+  ``koch``).
+* ``web/`` - [the Nim website][nim-site].
+* ``koch.nim`` - tool used to bootstrap Nim, generate C sources, build the website,
+  and generate the documentation.
+
+If you are not familiar with making a pull request using GitHub and/or git, please
+read [this guide][pull-request-instructions].
+
+Ideally you should make sure that all tests pass before submitting a pull request.
+However, if you are short on time, you can just run the tests specific to your
+changes by only running the corresponding categories of tests. Travis CI verifies
+that all tests pass before allowing the pull request to be accepted, so only
+running specific tests should be harmless.
+
+If you're looking for ways to contribute, please look at our [issue tracker][nim-issues].
+There are always plenty of issues labelled [``Easy``][nim-issues-easy]; these should
+be a good starting point for an initial contribution to Nim.
+
+You can also help with the development of Nim by making donations. Donations can be
+made using:
+
+* [Gratipay][nim-gratipay]
+* [Bountysource][nim-bountysource]
+* [Bitcoin][nim-bitcoin]
+
+If you have any questions feel free to submit a question on the
+[Nim forum][nim-forum], or via IRC on [the \#nim channel][nim-irc].
 
 ## License
-The compiler and the standard library are licensed under the MIT license,
-except for some modules where the documentation suggests otherwise. This means
-that you can use any license for your own programs developed with Nim,
-allowing you to create commercial applications.
-
-Read copying.txt for more details.
-
-Copyright (c) 2006-2017 Andreas Rumpf.
-All rights reserved.
+The compiler and the standard library are licensed under the MIT license, except
+for some modules which explicitly state otherwise. As a result you may use any
+compatible license (essentially any license) for your own programs developed with
+Nim. You are explicitly permitted to develop commercial applications using Nim.
+
+Please read the copying.txt file for more details.
+
+Copyright © 2006-2017 Andreas Rumpf, all rights reserved.
+
+[nim-site]: https://nim-lang.org
+[nim-forum]: https://forum.nim-lang.org
+[nim-issues]: https://github.com/nim-lang/Nim/issues
+[nim-issues-easy]: https://github.com/nim-lang/Nim/labels/Easy
+[nim-irc]: https://webchat.freenode.net/?channels=nim
+[nim-travisci]: https://travis-ci.org/nim-lang/Nim
+[nim-twitter]: https://twitter.com/nim_lang
+[nim-stackoverflow]: https://stackoverflow.com/questions/tagged/nim
+[nim-stackoverflow-newest]: https://stackoverflow.com/questions/tagged/nim?sort=newest&pageSize=15
+[nim-gitter]: https://gitter.im/nim-lang/Nim
+[nim-gratipay]: https://gratipay.com/nim/
+[nim-bountysource]: https://www.bountysource.com/teams/nim
+[nim-bitcoin]: https://blockchain.info/address/1BXfuKM2uvoD6mbx4g5xM3eQhLzkCK77tJ
+[nimble-repo]: https://github.com/nim-lang/nimble
+[nimsuggest-repo]: https://github.com/nim-lang/nimsuggest
+[csources-repo]: https://github.com/nim-lang/csources
+[badge-nim-travisci]: https://img.shields.io/travis/nim-lang/Nim/devel.svg?style=flat-square
+[badge-nim-irc]: https://img.shields.io/badge/chat-on_irc-blue.svg?style=flat-square
+[badge-nim-gitter]: https://img.shields.io/badge/chat-on_gitter-blue.svg?style=flat-square
+[badge-nim-forum-gethelp]: https://img.shields.io/badge/Forum-get%20help-4eb899.svg?style=flat-square
+[badge-nim-twitter]: https://img.shields.io/twitter/follow/nim_lang.svg?style=social
+[badge-nim-stackoverflow]: https://img.shields.io/badge/stackoverflow-nim_tag-yellow.svg?style=flat-square
+[badge-nim-gratipay]: https://img.shields.io/gratipay/team/nim.svg?style=flat-square
+[badge-nim-bountysource]: https://img.shields.io/bountysource/team/nim/activity.svg?style=flat-square
+[badge-nim-bitcoin]: https://img.shields.io/badge/bitcoin-1BXfuKM2uvoD6mbx4g5xM3eQhLzkCK77tJ-D69134.svg?style=flat-square
+[image-nim-logo]: https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?url=https://raw.githubusercontent.com/nim-lang/assets/master/Art/logo-crown.png&container=focus&resize_w=36&refresh=21600
+[pull-request-instructions]: https://help.github.com/articles/using-pull-requests/