As it's FAQ page explains, Nim is an imperative programming language, that tries to give the users ultimate power without compromises in runtime efficiency; and it delivers.
Go version 0.14.2 was used for running the tests.
How fast does the compiler takes to generate the binary.
$ time nim c --boundChecks:off --floatChecks:off --opt:speed -d:release nimrb.nim real 0m0.623s user 0m0.576s sys 0m0.028s
Even though Nim compiles to C and then passes thru GCC, compilation time is very fast.
$ time ./nimrb real 1m53.320s user 1m52.236s sys 0m0.144s
Impressive!, running times are comparable to C, even a bit faster.
Just for the record, without any changes to the source code, the C implementation can beat this time when using the -Ofast compiler flag.
Line count: 132 code, 45 blank, 177 total.
File size: 5138 bytes.
Less than half the line count of C, and almost reaches the compactness of OCaml. File size-wise, this implementation is less than 300 bytes behind OCaml.
I like this language, it offers some very flexible string interpolation options, and the compiler is very efficient. It even gives you hints on unused variables and functions.
It supports type inference, similar to OCaml, for tuples. You can create new tuples whenever you want, but if you try to pass it to a function or assign it to a typed variable, it will complain if members are missing (unlike Go).
One very cool feature is that you can write operator overloading; that helps a lot with expressiveness. The language also has many ways for calling functions, and supports polymorphism.
Code blocks are delimited by indentation, but unlike python, vim (using the nim.vim extension) behaved very well.
One thing I didn't like, was having to cast and/or specify the precision of every float number declaration, which is a bit verbose (float32() for casting and 'f32 for literals). I tried avoiding those declarations, defaulting to float64, but the code would run slower.
Anyway, Nim is a great language, and I am very impressed with the expressiveness and more than anything else, it's speed. Too bad it hasn't reached v1.0 yet, as some things are prone to change, or are still in a experimental state.
You can follow the development of this project on GitHub: https://github.com/niofis/raybench