General
What is Nimrod?
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. Nimrod does not sacrifice flexibility for speed. You get both.
Why is it named Nimrod?
You have to find out for yourself. If you don't find a tongue-in-cheek interpretation you will have to look harder.
How is Nimrod licensed?
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.
How stable is Nimrod?
The compiler is in development and some important features are still missing. However, the compiler is quite stable already: It is able to compile itself and a substantial body of other code. Until version 1.0.0 is released, incompatibilities with older versions of the compiler will be introduced. The semantic details of overloading, macros/templates/generics and iterators and their interactions are subject to change.
How fast is Nimrod?
Benchmarks have not been ported yet and support for threads is missing. But in the worst case, you can get the same performance as in C if you decide to write as low-level Nimrod code as C requires you to do. That said the only overhead Nimrod has over C is the GC which has been tuned for years.
What about JVM/CLR backends?
A JVM backend is almost impossible. The JVM is not expressive enough. It has never been designed as a general purpose VM anyway. A CLR backend is possible but would require much work.
Compilation
Which option to use for the fastest executable?
For the standard configuration file, -d:release does the trick.
Which option to use for the smallest executable?
For the standard configuration file, -d:quick --opt:size does the trick.
Execution of GCC fails (Windows)
On Windows the configuration file config\nimrod.cfg assumes that GCC is in $nimrod\dist\mingw\bin: This is where the Windows installer puts GCC. If you delete the line gcc.path = r"$nimrod\dist\mingw\bin", Nimrod uses the GCC from your PATH environment variable.
If you cannot modify $nimrod\config\nimrod.cfg, copy $nimrod\config\nimrod.cfg to %APPDATA%\nimrod.cfg and modify %APPDATA%\nimrod.cfg instead. To determine what %APPDATA% means for your Windows account, use the shell command:
echo %APPDATA%
How do I use a different C compiler than the default one?
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++ (now unsupported!) |
| vcc | Microsoft's Visual C++ |
| gcc | Gnu C |
| pcc | Pelles C (now unsupported!) |
| lcc | Lcc-win32 (now unsupported!) |
| 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 try the --passc and --passl switches. Unsupported compilers contain serious bugs that keep them from bootstrapping Nimrod.