summary refs log tree commit diff stats
path: root/web/question.txt
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2008-08-23 11:16:44 +0200
committerAndreas Rumpf <rumpf_a@web.de>2008-08-23 11:16:44 +0200
commit07d5a8085bbcc21a1d9d06a2976ecc00e9c8d55b (patch)
treeb07a53afeb56f4bba917c1a3a843f48dd25b62be /web/question.txt
parent916c25f9a70b68eb7a5e2c45d7cc2e10c6e3a525 (diff)
downloadNim-07d5a8085bbcc21a1d9d06a2976ecc00e9c8d55b.tar.gz
too many changes to list
Diffstat (limited to 'web/question.txt')
-rw-r--r--web/question.txt242
1 files changed, 134 insertions, 108 deletions
diff --git a/web/question.txt b/web/question.txt
index 40f9ea67e..10250d1ac 100644
--- a/web/question.txt
+++ b/web/question.txt
@@ -1,112 +1,138 @@
-===========================================

-         Questions and Answers

-===========================================

-

-`How is Nimrod licensed?`:Q:

-

-The Nimrod compiler is GPL licensed, the runtime library is LGPL licensed. 

-This means that you can use any license for your own programs developed with 

-Nimrod. If I receive enough requests with good arguments, I may change the 

-license of Nimrod to the BSD license.

-

-

-`Why is compilation so slow?`:Q:

-

-*Compilation* is fast. The problem is that Nimrod always

-recompiles **everything**. In the next version, only modules that

-have changed will be recompiled.

-

-Another issue may be that the C compiler that is called by Nimrod is slow.

-Especially GCC's compile times are a bad joke. On Linux you may be able to get

-`Tiny C <http://fabrice.bellard.free.fr/tcc/>`_ to work. TCC has excellent

-compile times. You should not use TCC for producing the release version

-though, as it has no optimizer.

-

-An experimental feature is the *C file cache*. It is not

-activated. To activate, add to your ``nimrod.cfg`` file the following

-line::

-

-  --c_file_cache:on

-

-

-`Which version of Freepascal is needed to compile Nimrod?`:Q:

-

-Version 2.0.0 or later. Earlier development versions like 1.9.6 may work,

-but 1.0.10 won't. Note that I have never compiled Nimrod with FPC's

-optimizer turned on; it may break things due to bugs in FPC.

-

-

-`How do I build a shared library?`:Q:

-

-This is currently not supported. The GC that makes trouble.

-

-

-`How do I use a different C compiler than the default one?`:Q:

-

-Edit the ``config/nimrod.cfg`` file.

-Change the value of the ``cc`` variable to one of the following:

-

-==============  ============================================

-Abbreviation    C/C++ Compiler

-==============  ============================================

-``dmc``         Digital Mars C++

-``wcc``         Watcom C++

-``bcc``         Borland C++ (including Borland C++Builder)

-``vcc``         Microsoft's Visual C++

-``gcc``         Gnu C

-``pcc``         Pelles C

-``lcc``         Lcc-win32

-``tcc``         Tiny C

-``llvm_gcc``    LLVM-GCC compiler

-``icc``         Intel C++ compiler

-``ucc``         Generic UNIX C compiler

-==============  ============================================

-

-If your C compiler is not in the above list, try using the

-*generic UNIX C compiler* (``ucc``). If the C compiler needs

-different command line arguments you have to edit the ``extccomp``

-module to add support for it and recompile the compiler. Please

-contribute a patch in this case.

+===========================================
+         Questions and Answers
+===========================================
+
+General
+=======
+
+`What is Nimrod?`:Q:
+**Nimrod** is a new statically typed, imperative
+programming language, that supports procedural, functional, object oriented and
+generic programming styles while remaining simple and efficient. A special
+feature that Nimrod inherited from Lisp is that Nimrod's abstract syntax tree
+(*AST*) is part of the specification - this allows a powerful macro system which
+can be used to create domain specific languages.
+
+`How is Nimrod licensed?`:Q:
+The Nimrod compiler is GPL licensed, the runtime library is LGPL licensed.
+This means that you can use any license for your own programs developed with
+Nimrod. If I receive enough requests with good arguments, I may change the
+license of Nimrod to the BSD license.
+
+
+Installation
+============
+
+`Is bootstrapping without Python possible?`:Q:
+Yes. You then have to compile by hand. It is not difficult (but it is not
+easy either). Please read the code in the ``koch.py`` script how this is can
+be accomplished (look for the ``cmd_boot`` routine).
+
+
+`A source-based download depending on the platform?`:Q:
+The reason is that the C code *generated* by Nimrod is not
+portable (the compiler itself is, of course!). The generated C
+code is used for the installation, so you have to pick the right package.
+
+
+`Why is compilation so slow?`:Q:
+
+*Compilation* is fast. The problem is that Nimrod always
+recompiles **everything**. In the next version, only modules that
+have changed will be recompiled.
+
+Another issue may be that the C compiler that is called by Nimrod is slow.
+Especially GCC's compile times are a bad joke. On Linux you may be able to get
+`Tiny C <http://fabrice.bellard.free.fr/tcc/>`_ to work. TCC has excellent
+compile times. You should not use TCC for producing the release version
+though, as it has no optimizer.
+
+
+`Which version of Freepascal is needed to compile Nimrod?`:Q:
+
+Version 2.0.0 or later. Earlier development versions like 1.9.6 may work,
+but 1.0.10 won't. Note that I have never compiled Nimrod with FPC's
+optimizer turned on; it may break things due to bugs in FPC (yes, this has
+happend!).
+
+
+`How do I build a shared library?`:Q:
+
+This is currently not supported.
+
+
+`How do I use a different C compiler than the default one?`:Q:
+
+Edit the ``config/nimrod.cfg`` file.
+Change the value of the ``cc`` variable to one of the following:
+
+==============  ============================================
+Abbreviation    C/C++ Compiler
+==============  ============================================
+``dmc``         Digital Mars C++
+``wcc``         Watcom C++ (now unsupported!)
+``bcc``         Borland C++ (including Borland C++Builder)
+``vcc``         Microsoft's Visual C++
+``gcc``         Gnu C
+``pcc``         Pelles C (now unsupported!)
+``lcc``         Lcc-win32 (now unsupported!)
+``tcc``         Tiny C (now unsupported!)
+``llvm_gcc``    LLVM-GCC compiler
+``icc``         Intel C++ compiler
+``ucc``         Generic UNIX C compiler
+==============  ============================================
+
+If your C compiler is not in the above list, try using the
+*generic UNIX C compiler* (``ucc``). If the C compiler needs
+different command line arguments try the ``--passc`` and ``--passl`` switches.
 
 `The linker outputs strange errors about missing symbols`:Q:
 
-I have seen this bug only with the GNU linker. The reason for this unknown. 
+I have seen this bug only with the GNU linker. The reason for this unknown.
 Try recompiling your code with the ``--c_file_cache:off`` command line switch.
-

-

-`Calling the C compiler fails - what's wrong?`:Q:

-

-Many C compilers need special environment variables to work

-properly. Although Nimrod tries hard to set them correctly (see

-``extccomp.pas`` for details), this may fail if you use a

-different version of the C compiler. The solution is to

-ensure that all environment variables are set correctly.

-

-You can set environment variables temporarily by using the

-``@putenv "key" "val"`` directive in the ``config/nimrod.cfg``

-configuration file. There are also ``@append_env`` and

-``@prepend_env`` directives for appending or prepending

-to environment variables.

-

-

-`Calling the C compiler still fails`:Q:

-

-Try to call the C compiler directly by doing the following::

-

-  nimrod --compile_only --gen_script your_path/your_file

-  sh ./your_path/rod_gen/compile_your_file.sh

-

-

-`How to overload the ``in`` operator?`:Q:

-

-The ``in`` and ``not_in`` operators are implemented as templates. The reason is

-that these operators need a reverse unification algorithm (don't ask). See the

-``system.nim`` module for a deeper explanation. The solution is to implement a

-simple ``in_Operator`` proc where the arguments are the other way round::

-

-  proc in_operator(s: string, c: char): bool =

-    for x in items(s):

-      if x == c: return True

-    return False

-    

-  writeln(stdout, 'z' in "abcdz") # now works!

+
+
+`Calling the C compiler fails - what's wrong?`:Q:
+
+First try to edit the path to your C compiler in the
+``config/nimrod.cfg`` file. For the Windows version bundled with
+LLVM search for the line containing ``llvm_gcc.path``. Set this
+variable to the ``bin`` directory of LLVM.
+
+Many C compilers need special environment variables to work
+properly. Although Nimrod tries hard to set them correctly (see
+``extccomp.pas`` for details), this may fail if you use a
+different version of the C compiler. The solution is to
+ensure that all environment variables are set correctly.
+
+You can set environment variables temporarily by using the
+``@putenv "key" "val"`` directive in the ``config/nimrod.cfg``
+configuration file. There are also ``@append_env`` and
+``@prepend_env`` directives for appending or prepending
+to environment variables.
+
+
+`Calling the C compiler still fails`:Q:
+
+Try to call the C compiler directly by doing the following::
+
+  nimrod --compile_only --gen_script your_path/your_file
+  sh ./your_path/rod_gen/compile_your_file.sh
+
+
+Questions about the Nimrod language
+===================================
+
+`How to overload the ``in`` operator?`:Q:
+
+The ``in`` and ``not_in`` operators are implemented as templates. The reason is
+that these operators need a reverse unification algorithm (don't ask). See the
+``system.nim`` module for a deeper explanation. The solution is to implement a
+simple ``in_Operator`` proc where the arguments are the other way round::
+
+  proc in_operator(s: string, c: char): bool =
+    for x in items(s):
+      if x == c: return True
+    return False
+
+  writeln(stdout, 'z' in "abcdz") # now works!