diff options
author | Jacek Sieka <arnetheduck@gmail.com> | 2016-08-25 22:59:51 +0800 |
---|---|---|
committer | Jacek Sieka <arnetheduck@gmail.com> | 2016-08-25 22:59:51 +0800 |
commit | db2f96daba9c04db2f24cb783c79fb37799cd9ea (patch) | |
tree | 567beb43c7e4549abfcae1ea66e5232d7525e001 /web/question.rst | |
parent | 3116744c86f37ac4e4e5fec3d6d1635304ed717f (diff) | |
parent | 84a09d2f5b0866491e55fef0fef541e8cc548852 (diff) | |
download | Nim-db2f96daba9c04db2f24cb783c79fb37799cd9ea.tar.gz |
Merge remote-tracking branch 'origin/devel' into initallocator-fix
Diffstat (limited to 'web/question.rst')
-rw-r--r-- | web/question.rst | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/web/question.rst b/web/question.rst new file mode 100644 index 000000000..9de178c90 --- /dev/null +++ b/web/question.rst @@ -0,0 +1,194 @@ +=========================================== + Questions and Answers +=========================================== + + +General FAQ +=========== + + +.. container:: standout + + What is Nim? + ------------ + + Nim (formerly known as "Nimrod") is a statically typed, imperative programming + language that tries to give the programmer ultimate power without compromises + on runtime efficiency. + This means it focuses on compile-time mechanisms in all their + various forms. Beneath a nice infix/indentation based syntax with a + powerful (AST based, hygienic) macro system lies a semantic model that supports + a soft realtime GC on thread local heaps. Asynchronous message passing is used + between threads, so no "stop the world" mechanism is necessary. An unsafe + shared memory heap is also provided for the increased efficiency that results + from that model. + + + +.. .. container:: standout + +.. Why should I use Nim? +.. --------------------- + +.. It's a conservative language in a sense that we stick to features that have +.. proven themselves for larger scale programming. But it's revolutionary by +.. the features which have been laid on top. + +.. One of Nim's goals is to increase developer productivity without sacrificing +.. the produced software's stability. The way that this is done is by providing + +.. Depending on your use case. + +.. Nim is one of the few programming languages in the world which allows you to + + +.. The language inventor describes it as the ultimate programming language +.. with features which make it perfect for just about any problem. + +.. container:: standout + + Why yet another programming language? + ------------------------------------- + + Nim is one of the very few *programmable* statically typed languages, and + one of the even fewer that produces native binaries that require no + runtime or interpreter. + + +.. container:: standout + + What have been the major influences in the language's design? + ------------------------------------------------------------- + + The language borrows heavily from (in order of impact): Modula 3, Delphi, Ada, + C++, Python, Lisp, Oberon. + + +.. container:: standout + + What is Nim's take on concurrency? + ---------------------------------- + + Nim primarily focusses on thread local (and garbage collected) heaps and + message passing between threads. Each thread has its own GC, so no + "stop the world" mechanism is necessary. An unsafe shared memory heap is also + provided. + + Future versions will additionally include a GC "per thread group" + and Nim's type system will be enhanced to accurately model this shared + memory heap. + + +.. container:: standout + + How is Nim licensed? + -------------------- + + The Nim compiler and the library are MIT licensed. + This means that you can use any license for your own programs developed with + Nim. + + +.. container:: standout + + How stable is Nim? + ------------------ + + 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, + minor incompatibilities with older versions of the compiler will be introduced. + + +.. container:: standout + + How fast is Nim? + ---------------- + Benchmarks show it to be comparable to C. Some language features (methods, + closures, message passing) are not yet as optimized as they could and will be. + The only overhead Nim has over C is the GC which has been tuned + for years but still needs some work. + + +.. container:: standout + + What about JVM/CLR backends? + ---------------------------- + + JVM/CLR support is not in the nearest plans. However, since these VMs support FFI to C + it should be possible to create native Nim bridges, that transparenlty generate all the + glue code thanks to powerful metaprogramming capabilities of Nim. + + +.. container:: standout + + What about editor support? + -------------------------- + + - Nim IDE: https://github.com/nim-lang/Aporia + - Visual Studio Code: https://marketplace.visualstudio.com/items?itemName=kosz78.nim + - Emacs: https://github.com/nim-lang/nim-mode + - Vim: https://github.com/zah/nimrod.vim/ + - Scite: Included + - Gedit: The `Aporia .lang file <https://github.com/nim-lang/Aporia/blob/master/share/gtksourceview-2.0/language-specs/nim.lang>`_ + - jEdit: https://github.com/exhu/nimrod-misc/tree/master/jedit + - TextMate: Available in bundle installer (`Repository <https://github.com/textmate/nim.tmbundle>`_) + - Sublime Text: Available via Package Control (`Repository <https://github.com/Varriount/NimLime>`_) + - LiClipse: http://www.liclipse.com/ (Eclipse based plugin) + - Howl: Included + - Notepad++: Available via `plugin <https://github.com/jangko/nppnim/releases>`_ + + +.. container:: standout + + Why is it named ``proc``? + ------------------------- + + *Procedure* used to be the common term as opposed to a *function* which is a + mathematical entity that has no side effects. It is planned to have ``func`` + as syntactic sugar for ``proc {.noSideEffect.}`` and ``func`` is already a + keyword. Naming it ``def`` would not make sense because Nim also provides a + ``iterator`` and ``method`` keywords, whereas ``def`` stands for ``define``. + + +Compilation FAQ +=============== + +.. container:: standout + + Which option to use for the fastest executable? + ----------------------------------------------- + + For the standard configuration file, ``-d:release`` does the trick. + +.. container:: standout + + Which option to use for the smallest executable? + ------------------------------------------------ + + For the standard configuration file, ``-d:quick --opt:size`` does the trick. + +.. container:: standout + + How do I use a different C compiler than the default one? + --------------------------------------------------------- + + Edit the ``config/nim.cfg`` file. + Change the value of the ``cc`` variable to one of the following: + + ================ ============================================ + **Abbreviation** **C/C++ Compiler** + ================ ============================================ + ``vcc`` Microsoft's Visual C++ + ``gcc`` Gnu C + ``llvm_gcc`` LLVM-GCC compiler + ``icc`` Intel C++ compiler + ``clang`` Clang compiler + ``ucc`` Generic UNIX C compiler + ================ ============================================ + + Other C compilers are not officially supported, but might work too. + + 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. |