Pro

Strict typing

Pro

Multi paradigm

Pro

Garbage-collected

You don't need to deal with all those manual memory allocations, Nim can take care of it!But also you can use another GC, or tweak it for you real-time application or a game

Pro

Type interferencing

You only need to specify types in your procedures and objects - you don't need to specify type when you're creating a new variable (unless you're creating it without initialization)

Pro

Has built-in unittest module

With built-in "unittest" module you can create test with a very readable code

Pro

Compile-time execution

Nim has built-in VM, which executes macros and some other code at compile time.For example - you can check if you're on Windows, and Nim will generate code only for it

Pro

Has built-in async support

Nim has "asyncdispatch" module, which allows you to write async applications.

Pro

Supports UFCS (Unified Function Call Syntax)

writeLine(stdout, "hello") can be written as stdout.writeLine("hello")proc add(a: int): int = a + 5 can be used like 6.add.echo or 6.add().echo()

Pro

Easy to integrate with another languages

You can use Nim with any language that can be interfaced with C.There's a tool which helps you to create new C and C++ bindings for Nim - c2nimAlso you can use Nim with Objective C or even JavaScript (if you're compiling for these backends)

Pro

Built-in Unicode support

You can use unicode names for variables, there is "unicode" module for operations with unicode

Pro

Easy to read

Nim has a lot of common with Python in terms of syntax.Indentation-based syntax, for/while loops

Pro

Great metaprogramming features

There are generics, templates, macros in Nim. They can allow you to write new DSL for your application, or avoid all boilerplate stuff.