I'm a computational science enthusiast and I've mostly dabbled with Python because of its ease of writing code. But it was lacking the speed I wanted for my simulations (mostly gravitational n-body) so I started looking into other options and I found Nim. And how grateful I am for that! It reads like Python but runs like C, it's magic!
I've started a toy project of mine that I want to be able to do ODE and integration to start with but I have no context of what kind of problems people are solving in the real world and would like to know so I can make it better suited for real use if I choose to eventually release it XD.
TL;DR: What kind of computational problems would you like to use Nim for?
Recently I really got interested in orbits and gravitational n-body, it sounds like you are interested in this as well:
https://github.com/treeform/orbits
I have some simulation code but its not very good. I am only doing simple Euler's method F=MA. I want to look into doing Runge–Kutta next.
https://github.com/treeform/orbits#simulations
Maybe you can help me out?
Your project seems really cool ;-) I really like the simplistic graphics!
The integrators are my favorite part of the simulations :-D It's really interesting to compare the different integrators around. In this simulation that is written in Javascript I have implemented most of the integrators (all except Euler and RK4):
If you click the Physics tab on the right you can choose from a whole range of them and compare them. It's first then you realize how horrible Euler's method is XD. It would be fun helping you in implementing some of those ;-)
Would be interesting to see how much easier it will be to implement in Nim compared to C++.
I already know that some of the run-time errors I had were due to permissive language features of C++ which Nim doesn't allow. For instance, I once used = where I should have used ==.
Alas, a different error (where I forgot a return statement) is allowed, because result is apparently initialized. The Nim compiler didn't even issue a warning in that case, which is a letdown. At least I get a warning if I define result to be of the wrong type.