I'm looking for a language that I can use on both server and client, it should be simple, productive and robust (help me with catching errors). I'm currently using TypeScript mostly. Also in past used Ruby (Ruby on Rails) and Java.
Pluses:
Minuses:
So far the impression - feels like Nim trying to find a balance between simplicity and performance. In my personal preferences - I would like to shift it in the side of simplicity. It looks good, but as for me - I never needed advanced performance in the past and probably never need it in the future, so I don't want to sacrifice simplicity for performance I never need.
Thanks for this feedback. However, the issues that you bring up cannot be changed much.
Proc are not dynamically dispatched.
Static binding should be the default and many modern languages actually agree on this, see C#, Rust, etc.
No clean docs about null-safety I don't know if Nim support it or not.
We have "not nil" annotations but these are still under-developed. We're slowing getting there though.
Unclear what's the multicore performance.
It's not any more unclear than what Nim's "single core performance" is. And the very next paragraph you say that you don't care about speed much anyway. ;-)
Extra complexities about pointers.
Pointer semantics are the foundation for TypeScript and Java too as they only give you pointers/references to objects. Pointers are also essential for interop with other native languages and for "systems programming". Again, this is not something that can be simplified, even Go makes this distinction.
Thanks for the reply. I guessed that most of Nim decisions are probably have good reasons behind.
Static binding should be the default and many modern languages actually agree on this, see C#, Rust, etc.
There are system languages and application languages. Rust is a system language and performance has higher priority than simlicity. C# universal, and seems also valuing performance more.
It's not any more unclear than what Nim's "single core performance" is. And the very next paragraph you say that you don't care about speed much anyway. ;-)
Ha-ha, you caught me. I don't care about best possible performance, it's ok to be 3-5 times slower than C. But multicore is kinda must nowadays.
Pointer semantics are the foundation for TypeScript and Java too
Yes. What I meant is there's no strict distinction between pointers and values. But maybe it's ok, it's just me not being used to that.
You are not forced to use all the things you mention, for the use case you mention.
...at least initially :)
Ha-ha, you caught me. I don't care about best possible performance, it's ok to be 3-5 times slower than C. But multicore is kinda must nowadays.
Nim is as fast as C, this post has plenty of examples from scientific computing, raytracing and multithreaded runtime: https://forum.nim-lang.org/t/5157#32409.
Regarding multicore performance as shown by my experiments in Project Picasso, nothing prevents Nim to reach competitive or even better performance than OpenMP or Intel TBB, but it still needs some refactoring to make it production ready.
Currently you can use:
Also regarding your feedback in general, unfortunately people comes to Nim with very different backgrounds. Many comes from C or C++ as evidenced by the number of game developers. Static dispatch, stack allocation, control over memory and pointers are very important there.
Ultimately, the best way forward is to have a "Nim for the Typescript developer" wiki similar to what we have for C, or Python
A third-party threadpool like https://github.com/yglukhov/threadpools
do you really think that newcomers on Nim will be using a package with not even a simple readme file ? when I find something like that on Github, I don't even look at the code or search for anything more, I go away..!
But lots of packages has the Docs built-in as documentation comments, including runnableExamples.
so you think that a simple - even small - readme file telling what the package is or can do is not necessary ? why would I take time to look at the code if there's not even a few words telling me what I could find there.... sorry but more generally in that case there's no more doc inside the code.