Hello, everyone!
I'm trying to pick up a new programming language for new projects. And, it seems, there are enough of them to choose from: D, Nimrod, Rust and maybe even Ada 2012. All these languages introduce fresh ideas and try to efficiently mix different programming idioms to solve the common problems.
As I'm involved into programming performance critical real-time applications, I need the direct compilation into native machine code from one side (to manually allocate and control pool of shared buffers, SIMD and etc.) and lightweight expressive scripting capability from another.
I practice D for about a 6 months and then I've read about Nimrod. What stops me from continuing with D is two things: 1) «stop the world» garbage collector; 2) absence of runtime modular handling (via dynamic shared libs or extensive metaprogramming).
From what I've read on Nimrod site, its GC is more intelligent. But I couldn't find info about modularity by the first run.
As far as I could understand, Nimrod position itself as improved and extended C with Python syntax, though I prefer to use tabs, not spaces. Maybe you can give me more exact advices and directions, how to perceive and to experience Nimrod. Thank you.
Welcome Andrsar!
If you mean DLL/lib*.so support, we have that and the GC should work across DLL boundaries if you follow these instructions: http://nimrod-code.org/nimrodc.html#dll-generation
Unfortunately I don't think thread support works across DLL boundaries yet and getting it to work is not of high priority right now. Also I'm still working on exposing the evaluation engine/interpreter within the Nimrod compiler as a library for scripting.
However, accessing things like SIMD and special C++ compiler's intrinsics is much easier than in Rust/D as Nimrod gives you lots of control over its generated C code. Even mixing languages in a dirty way is supported via the 'emit' directive but I strongly encourage you to use the ordinary FFI features first.
As for tabs: Just make your editor produce spaces when you press a TAB key. Problem solved. ;-)
More useful links about C/C++ interoperability:
http://nimrod-code.org/manual.html#foreign-function-interface
http://nimrod-code.org/c2nim.html
http://nimrod-code.org/manual.html#reference-and-pointer-types
http://nimrod-code.org/nimrodc.html#emit_579166034
And last but not least the index:
http://nimrod-code.org/theindex.html