Nim (formerly Nimrod) is an imperative and statically-typed programming
language with an expressive infix and indendation syntax and macros.
Its compiler generates native code, still provides lean heaps through
non-tracing garbage collection, and is still suitable for system
programming. Nim also provides overhead-free iterators, cross-module
inlining, dynamic method binding, high-level types like strings, sets
and squences, local type inference, tuples, generics, operator overloading,
and bindings for various system, graphics, database and toolkit libraries
exist.
Homepage
Download
Recent Releases
0.11.002 May 2015 01:05
major feature:
Parameter names are finally properly gensym'ed.
Tuple field names are not ignored anymore.
nim idetools has been replaced by a separate tool nimsuggest.
Arrow like operators are not right associative anymore and are required to
end with either - , or = , not just .
The 'addr' and 'type' operators are now parsed as unary function
application.
The inc, dec, +=, -= builtins now produce OverflowError exceptions.
Concept is now a keyword and is used instead of generic.
Negative indexing for slicing does not work anymore!
The split method in module re has changed.
For empty case object branches discard can finally be used instead of nil.
Ordinary parameters can follow after a varargs parameter.
Overloading by 'var T' is now possible.
Array and seq indexing can now use the builtin operator to access things
from backwards: a 1 is like Python's a -1 .
Interoperability with C++ improved tremendously; C++'s templates and
operators can be wrapped directly.
reversed proc added to the unicode module.
Added multipart param to httpclient's post and postContent together with a
newMultipartData proc.
Added * operator for JSON.
Many language and compiler bugfixes.
0.10.229 Dec 2014 14:46
major feature:
Changes affecting backwards compatibility:
The language has been renamed from Nimrod to Nim. The name of the compiler changed from nimrod to nim too.
system.fileHandle has been renamed to system.getFileHandle to prevent name conflicts with the new type FileHandle.
Comments are now not part of the AST anymore, as such you cannot use them in place of discard.
Large parts of the stdlib got rid of the T/P type prefixes. Instead most types now simply start with an uppercased letter. The so called "partial case sensitivity" rule is now active allowing for code like var foo: Foo in more contexts.
String case (or any non-ordinal case) statements without 'else' are deprecated.
Recursive tuple types are not allowed anymore. Use object instead.
The PEGS module returns nil instead of "" when an optional capture fails to match.
The re module returns nil instead of "" when an optional capture fails to match.
The "symmetric set difference" operator (-+-) never worked and has been removed.
defer is a keyword now.
func is a keyword now.
The using language feature now needs to be activated via the new .experimental. pragma that enables experimental language features.
Destructors are now officially experimental.
Standalone except and finally statements are deprecated now. The standalone finally can be replaced with defer, standalone except requires an explicit try.
Operators ending in are considered as "arrow like" and have their own priority level and are right associative. This means that the = and - operators from the future module work better.
Field names in tuples are now ignored for type comparisons. This allows for greater interoperability between different modules.
Statement lists are not converted to an implicit do block anymore. This means the confusing nnkDo nodes when working with macros are gone for good.
Language Additions:
The new concurrency model has been implemented including locks sections, lock levels and object field guards.
The parallel statement has been i
0.9.620 Oct 2014 02:45
minor bugfix:
spawn now uses an elaborate self-adapting thread pool and as such has been
moved into its own module. So to use it, you now have to import threadpool.
The symbol binding rules in generics changed: bar in foo.bar is now
considered for implicit early binding.
c2nim moved into its own repository and is now a Babel package.
pas2nim moved into its own repository and is now a Babel package.
system. for floating point types now produces a human friendly string
representation.
uri.TUrl as well as the parseurl module are now deprecated in favour of the
new TUri type in the uri module.
The destructor pragma has been deprecated. Use the override pragma instead.
The destructor's name has to be destroy now.
lambda is not a keyword anymore.
system.defined has been split into system.defined and system.declared. You
have to use --symbol to declare new conditional symbols that can be set via
--define.
--threadanalysis:on is now the default.
This version introduces the new deprecated pragma statement that is used to
handle the upcoming massive amount of symbol renames.
spawn can now wrap proc that have a return value. It then returns a flow
variable of the wrapped return type.
Added module cpuinfo.
Added module threadpool.
sequtils.distnct has been renamed to sequtils.deduplicate.
Added algorithm.reversed
Added uri.combine and uri.parseUri.
Some sockets procedures now support a SafeDisconn flag which causes them to
handle disconnection errors and not raise them.