In this small blog post, I will talk about Nim, a systems programming language that I fell in love with a few years ago, why I still use it, and its disadvantages.

What is Nim?

Nim is a statically-typed, compiled systems language. It is inspired by Python, Ada and Modula. It combines a Pythonic syntax with statically typed variables, deterministic memory management similar to Rust, and 4 backends (C, C++, Obj-C, JavaScript) that allows you to write Nim for every situation possible, including frontend, backend and systems development.

Why Nim?

For me, it is because of the flexibility. Nim is really simple at its core, but it’s hard to master. Which is what it makes it great. A Python developer like myself could easily write Nim code in minutes. I can’t really say that about other systems languages, which take a while to get used to (Take Rust for example).

As for general reasons, the support for multiple backends, the excellent C interop, and having multiple memory management backends (including none!) while having a rock-solid deterministic memory management system by default makes this language great to use.

Hurdles while using Nim

Of course, there are hurdles that I (and most others) may go to while using Nim. The main hurdle is usually the small community, resulting in less libraries to use and less likelyhood to find someone that has had the same issue. Though this issue becomes less so when you get used to the quirks of the language, it still is a pain.

Conclusion

Overall, I believe Nim is a language that everyone (especially people that like Pythonic languages) should try.