What do you think about the programming language NIM?


While looking for different benchmarks I’ve found

It’s supposed to be faster than Julia for many operations, though it doesn’t have so many libraries:



It’s supposed to be faster than Julia for many operations

I highly doubt that :wink:
If you’re referring to the quoted Matrix multiplication benchmark, that’s just a pretty niche special case were Julia doesn’t have an optimized implementation.

Also, I just tried the Julia benchmark from the gist, and it already looks like one could optimize it a bit further, and more importantly, the benchmarking method is highly doubtful since It’s just taking one sample for comparison. I just executed the code a couple of times and already got a range of 0.02s to 0.06 seconds for Julia - so there is lots of noise, making it insufficient to take one sample and conclude any speed up :wink:

Besides that, NIM looks pretty cool :slight_smile: I don’t really like the syntax as much and I haven’t looked into how one would structure high level code with it … mainly because I’m already suffering from Julia being a young language, so I’m not too excited to look into an even younger language right now :wink:


It looks quite a lot like julia, bar some basic syntax differences, and julia is open source… so it kind of begs the question
The 40kb Hello world benchmark is pretty nice, I thought it was Mb at first glance


Nim quotes inspiration from Python, so the similarities are from Python. Also the fact that Nim can compile to C, Objective-C, and Javascript blows my mind.


I know it’s good to have alternatives and competition but it’s sad to see most people prefer to start new projects instead of collaborating on already existing ones. It’s the same situation than with Linux, thousands of people creating new distros instead of collaborating.
Union make force.


This is something I’ve read before.
Don’t all programming languages compile to machine assembler?


That is indeed super cool :slight_smile:


Python doesn’t have dot operators, multiple dispatch or getindex [ ] overloading though?
I think it might be a bit more julia inspired than they admit


NIM is older than Julia https://en.wikipedia.org/wiki/Nim_(programming_language), first appeared 2008 vs 2012 for Julia.


I agree but the evolution doesn’t work that way. Unless you pay salary people are free to develop whatever they prefer themselves.


And this is what people said/have been saying about Julia for years. If the creators of Julia had thought like that, we might have had a slightly faster Python, or, more likely, more people disagreeing over some design issue.

A small number of people with a new idea can make a far bigger impact by building something of their own, than by joining the large group of people already pulling one thing in every different direction.

I think this may have an analogy in the concept of the punctuated equilibrium theory in biological evolution (please don’t quote me on that, though…)


Where would you have drawn the line then? At Fortran? At C? At C++? At Ada? At CommonLisp?

In the end, programming languages are tools. If a group of people do not like the types of screwdrivers they can buy (because someone gave them torx screws, and they can only buy phillips drivers), then they’ll give up on the task or invent the tools they need.


My biology knowledge is shaky, but this quote spoke to me (from here):

Allopatric speciation suggests that species with large central populations are stabilized by their large volume and the process of gene flow. New and even beneficial mutations are diluted by the population’s large size (…)
Smaller populations on the other hand, which are isolated from the parental stock, are decoupled from the homogenizing effects of gene flow. In addition, pressure from natural selection is especially intense, as peripheral isolated populations exist at the outer edges of ecological tolerance.


This is a very important point. Also, the impact does not have to be direct: there are examples of projects which did not become mainstream for various reasons, but explored ideas that subsequent ones could build on.

That’s why I don’t find simple “X is a bit faster than Y for some very simple Z” discussions very useful. There is so much more to a language than a couple of heavily optimized microbenchmarks. To be in a position to evaluate Nim, Julia, or any other modern language, one has to program in it for a couple of months and develop at least one medium-sized project.


I also agree.


To be fair nim is also open source (mostly?)
Even the forum looks rather familiar though - https://forum.nim-lang.org/


Lots of familiar thread titles :grinning: And they even have a guy with a name eerily similar to “Stefan Karpinski” :face_with_raised_eyebrow:



I think i like our error messages a bit more,
[GCASSERT] decRef: interiorPtr Traceback (most recent call last) threadpool.nim(337) slave main.nim(272) inspectWrapper main.nim(251) inspect main.nim(103) register parsecfg.nim(588) setSectionKey tables.nim(807) []= tableimpl.nim(90) []= tables.nim(621) enlarge gc.nim(289) unsureAsgnRef gc.nim(116) decRef Error: execution of an external program failed: '../test.exe '


A curious difference in the forums though is that, given that nim compiles to javascript, they actually rewrote a lightweight version of discourse in nim and use it for their forum :slight_smile:

It’d be really cool to be able to do something like this in Julia.


I’m sure you could, I don’t think it would be too trivial in either language though. Plus we already have a forum =)

mildly suspicious - https://forum.nim-lang.org/t/1926 /much prefer the term ‘borrowing’