Nim 0.11.0

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.

Tags nim static-types programming-language macro-programming
License MITL
State stable

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.