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.
Nim (formerly
named Nimrod) is an imperative, multi-paradigm, compiled programming language designed and developed by Andreas
Rumpf.
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.
Nim
is efficient
- Native code generation (currently via compilation to
C), not dependent on a virtual machine: Nim produces small executables without dependencies for easy
redistribution.
- A fast non-tracing garbage collector
that supports soft real-time systems (like games).
- System programming features: Ability to manage your
own memory and access the hardware directly. Pointers to garbage collected
memory are distinguished from pointers to manually managed memory.
- Zero-overhead iterators.
- Cross-module inlining.
- Dynamic method binding with inlining and without
virtual method table.
- Compile time evaluation of user-defined functions.
- Whole program dead code elimination: Only used functions are included in the
executable.
- Value-based datatypes: For instance, objects and
arrays can be allocated on the stack.
Nim
is expressive
- The Nim compiler
and all of the standard libraries are implemented in Nim.
- Built-in high level datatypes: strings, sets,
sequences, etc.
- Modern type system with local type inference,
tuples, variants, generics, etc.
- User-defineable operators; code with new operators
is often easier to read than code which overloads built-in operators. For
example, a =~ operator is defined in the remodule.
- Macros can modify the abstract syntax tree at
compile time.
Nim
is elegant
- Macros can use the imperative paradigm to construct
parse trees. Nim does not require a different coding style for meta
programming.
- Macros cannot change Nim's syntax because there is
no need for it. Nim's syntax is flexible enough.
- Statements are grouped by indentation but can span
multiple lines. Indentation must not contain tabulators so the compiler
always sees the code the same way as you do.
Nim
plays nice with others
- The Nim Compiler runs on Windows, Linux, BSD and Mac
OS X. Porting to other platforms is easy.
- The Nim Compiler
can also generate C++ or Objective C for easier interfacing.
- There are lots of bindings: for example, bindings to
GTK2, the Windows API, the POSIX API, OpenGL, SDL, Cairo, Python, Lua,
TCL, X11, libzip, PCRE, libcurl, mySQL and SQLite are included in the
standard distribution or can easily be obtained via the Nimble package manager.
No comments:
Post a Comment