9 ms·
Genuinely curious - why should I care about Nim? There are already a plethora of general purpose languages (both compiled and interpreted). Also, is anyone usin
by posharma 5y ago
Genuinely curious - why should I care about Nim? There are already a plethora of general purpose languages (both compiled and interpreted). Also, is anyone using Nim today? What's the adoption?
- goodpoint 5y agoIt's expressive and friendly like Python, but fast, statically typed and with powerful templating and macros. It makes me productive and it's really fun to use.
- winrid 5y agoI think others have covered this question well, but for my $0.02 - I've found it easy to write code in Nim that's half the size of and easily out performs (and has increased predictability, which is the big + for me) than Java/Node/etc. The default runtime also doesn't have stop the world pauses and uses a similar message passing mechanism to Go.
- echelon 5y agoNim seems to be targeting the space between Python and Go, which is wide open for disruption. (Also touches at the edges of managed memory systems-y light languages like Java/C#.) Python is a dynamically typed cowboy land and is painfully slow for many applications. People want types, speed, and fixes for decades of baggage, but they like Python ergonomics. Go until recently lacked generics (it still doesn't have full generics), has bad error handling, and other weird features. Rust and Swift also seem to be interested in this space. Rust can be heavy. Swift too Apple-centric. Nim is doing a good job and is growing at a steady clip.
- kitd 5y agoGo ... has bad error handling, and other weird features. That's just, like, your opinion man ;)
- sp33der89 5y agoFor me it's the intersection of performance like Rust, the readability like Python, the ability to generate native executables without dependencies like Go and a very cool type system. All while delivering fast compile speeds! The adoption isn't like Rust and Go, but Nim is growing: https://github.com/nim-lang/Nim/wiki/Organizations-using-Nim https://github.com/nim-lang/Nim/wiki/Organizations-using-Nim and the community is active across all socials. Some downsides: not a big ecosystem(tho can piggyback off C libraries) and tooling isn't great. Advent of Code would be a great way to dip your toes into a language you might not really care about!
- MrBuddyCasino 5y ago> performance like Rust I've just looked at some benchmarks, and even though Nim claims C-like performance, that never seems to be confirmed by independent tests. It is usually a bit behind C / C++ / Rust / Crystal, and roughly on-par with Golang. Fast enough for sure, but "half the speed of C" would be more honest it seems?
- michaelsbradley 5y agoMaybe so, but sometimes benchmarkers forget to employ compiler options like: nim c -d:danger -d:lto --opt:speed ymmv https://nim-lang.org/faq.html https://nim-lang.org/faq.html https://nim-lang.org/docs/nimc.html https://nim-lang.org/docs/nimc.html Also, --gc:arc and --gc:orc are going to bring a stronger game to the table as they continue to mature (already pretty far along).
- carlmr 5y agoDo these activate -funsafe-math on the underlying C compiler? Because if so that's not a fair comparison, since this breaks a lot of code.
- shirleyquirk 5y agono, -d:danger turns off runtime bounds/overflow checks, assertions, and debug info, and passes '-O3 -fno-ident' to the C compiler
- girvo 5y agoI use it extensively for building firmware for an IoT sensor platform
- formerly_proven 5y agoI was a interested in Nim until I learned that getBlochenAngle and get__B_L_O_C_H_E_N_ANGLE are the same identifier. > https://nim-lang.org/docs/manual.html#lexical-analysis-identifier-equality https://nim-lang.org/docs/manual.html#lexical-analysis-ident...
- rakoo 5y agoMy personal blocker is that identifiers are all imported globally by convention, so when you see that there is a call to a method called "get", you have to get to the top of the file or mouse over the call to see what lib it is from. A "get" from the http lib is not the same as a "get" from the kv store lib.
- nerdponx 5y agoDon't Haskell and Go also do this?
- rakoo 5y agoI have no experience in Haskell, but in Go: - if it's a builtin or in the current package, you usie it directly - if it's in another package the identifier is always prefixed with the package
- benjamin-lee 5y agoThere is some logic as to why that is. Here [1] is an explanation for why it makes sense but the tldr is that you don't want to be manually importing functions such as `$` and `+`. In languages like Python, those are defined as methods on the object being imported (e.g. `.__str__()`) so they come along for free. Not so in Nim. If there's a conflict (same name, same signature), the compiler will warn you but it's extremely rare. [1] https://narimiran.github.io/2019/07/01/nim-import.html https://narimiran.github.io/2019/07/01/nim-import.html
- formerly_proven 5y agoArgument-dependent lookup would solve that in a far less global way.
- gyulai 5y agoSeveral years back, I wanted to know what the hype was about with regard to Rust and started looking into Rust a bit. In the process I also stumbled across Nim and decided that Nim suited those needs that I might have had for Rust even better than Rust did. The killer feature for me is that it transpiles both to C and to JavaScript and I like the clean Python-like syntax. I now use Nim whenever I write a decent chunk of "pure logic". By that, I mean something that does something complex and useful without leaving the confines of its own codebase all too much. In those cases it's nice to have the option of portability between the C ecosystem and JavaScript ecosystem. When I write "glue code" (and, unfortunately, most code that most people write falls into that category) where I basically just put bits of language ecosystem together in a trivial way to achieve something useful, then I use Python because for such tasks the sheer size of the language ecosystem is king.
- DeathArrow 5y agoFast as C, slick as Python. Highly productive with great performance.
- thom 5y agoOf the current crop of new(ish) systems languages, it’s the one that feels most fun to me. It reminds me of Ruby, not necessarily technically (obviously there’s Crystal for that), but in the sense that it’s a breath of fresh air coming from more austere languages. I wouldn’t make a career or company bet on it (compared to Rust which I think is a very sensible choice) but I’m always keen to noodle away at new hobby projects in Nim.
- jokoon 5y agoIf I would pick one, I would pick Zig. The language that is missing is a simple language that can work well with C or C++, compiles fast, is easy to read, has a good lib, etc. There are not enough non-GC languages that are statically compiled. I really, really want a pythonic, statically compiled language. I don't want templates, OOP, abstract stuff, just A C-like language, more readable, with good syntactic sugar. My dream is that there would be as much time money and effort spent on python, than was spent en js engine like v8 and spidermonkey. There are barriers that make python not really viable everywhere, and I wish it would not be the case.
- knuthsat 5y agoI always thought of Python as being a massive language. If it was simple, it should be easy to compile and optimize. I mean, I would feel like an idiot when someone would point out a feature that makes Python code faster. Python classes are quite massive and complicated (with a bunch of tweaks one can do through attributes).
- amedvednikov 5y ago> The language that is missing is a simple language that can work well with C or C++, compiles fast, is easy to read, has a good lib, etc. https://vlang.io https://vlang.io ?
- jokoon 5y agoit has a GC
- dflock 5y agoNim's GC is optional - you can switch it off and do manual memory management, if you want. There's also no need to use any of the language features that you don't want?
- Mikeb85 5y agoWhy do people bother with questions like this? Araq created Nim because he wanted to. Others use it because they want to. Why does it need a raison d'être ? What it has: garbage collection with option to turn off, small binaries, compiles to C (and other languages) as intermediate step so it's easy to integrate into existing codebases, it's very fast without needing much trickery, it has all the features everyone always asks for with more being added all the time, etc... Is it better than Rust, C++, Go, Java, whatever? Probably not in a strict sense. But it's pleasant to write plus above features. It's like Pascal meets Python meets Go but compiles to C and JS.
- pietroppeter 5y ago> why should I care about Nim? it depends a lot on where you are coming from. If you are a Python developer/user (without any other information it is possibly the most likely case nowadays), you might find it solves a lot of current Python pain points (speed, portability, lack of typing, package system) and it has some added bonuses (great macro system, compiles to JS, works great for embedded). If you are not a Python developer/user but you are somehow interested in new languages like Rust, Julia or Zig (you might be both), you might want to hear a different take on how Nim is also able to solve some of the problems they solve (a better C++, a better Python/R/Matlab for scientific computing, a better C - not that those languages reduce to those aspects...). I think that what is happening now with Rust, Julia and Zig is great and I am happy that many people are looking at those languages and growing their ecosystem and their communities. Part of the drive of people there is to be able to make a significant improvement in the evolution of those languages (harder to do that in C, C++, Java, Python, C#, Swift, ...). I just happen to particularly like Nim and love being involved in it so far. A recent article that explains the philosophy of Nim is the Zen of Nim by Araq (Nim's BDFL) [0]. Nim has some universal vision in the sense that it can be really used for everything (from kernel programming to web development, from scientific computing to game development, from embedded to devoping compilers and interpreters, from short throwaway scripts to critical infrastructure). Not necessarily it is for _everyone_. Taste of people varies a lot and that is a good thing. [0]: https://nim-lang.org/blog/2021/11/15/zen-of-nim.html https://nim-lang.org/blog/2021/11/15/zen-of-nim.html
- sdmac99 5y ago> Also, is anyone using Nim today? Sure. I maintain an internal performance dashboard web app that is fully Nim. Backend uses Jester and the frontend uses Karax + Vega-lite for charts.
- sergiotapia 5y agoSuper high level elevator pitch: It's as fast as Rust, nice to look at like Python, easy to write like Python, and compiles to static binaries for any platform you can think of. There are a lot of other great things about the language but this should get anyone excited.
- amw-zero 5y agoIt’s just subtly different than anything else out there. It for the most part feels like a Python-like language, but compiles to C so is very fast. It also has one of the better macro systems out there. I was interested in developing a programming language with macros, and it has a ton of documentation about it. It’s really well thought out. I’m not saying to run a business on it, but there are lots of interesting things out there. Language design is still a very active area of innovation.
- klibertp 5y ago> Genuinely curious - why should I care about Nim? You definitely shouldn't. If you need a reason to care, then Nim is simply not for you. You won't benefit from Nim, and Nim won't benefit from you. It's best to agree to disagree and walk away from each other (assuming Nim can walk). EDIT: I got downvoted a bit here, probably because the above seemed rude and/or dismissive? If so, sorry, that wasn't my intention. What I meant to say is that with languages like Nim it doesn't make sense to be interested in them if you're not already interested in programming languages. It'll be another 10-20 years before Nim becomes something the general populace of programmers should (or, if we're lucky, would have to) care about. So if you don't have a particular reason to be interested in Nim, chances are you won't get such a reason from anything that can be said about Nim at this time. Basically, asking the quoted question already means that there's nothing you'd care about in Nim.
- iffycan 5y agoNim can walk: https://nim-lang.org/docs/os.html#walkDir.i%2Cstring https://nim-lang.org/docs/os.html#walkDir.i%2Cstring
- posharma 5y agoNot sure why I'm getting downvoted for asking a genuine question. The objective is not to deride Nim in any way.