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:

  * Types, even requiring to explicitly dismiss fn() if return is not used, 
nice.
  * Flexible syntax - everything is expression and ability to use obj.fn(v) or 
fn(obj, v) and even omit parenthesis - ending up in very clean and nice code.
  * Function override - nice.
  * Constants, even function argument constants - nice.
  * There are some projects written in Nim - nim site using forum written in 
nim himself.
  * And also many others, nice docs etc. in general - positive impression, 
looks nice and pleasant to use.



Minuses:

  * Proc are not dynamically dispatched. Red flag. There are some methods etc. 
And even for methods you need to supply special command line argument to enable 
multiple dispatch. Huge red flag. That feels like this (extremely important in 
my opinion) feature - multiple dispatch is not actively promoted. Also - extra 
complexity - I should think if I want it to be multiple dispatched or not. 
Feels too complicated, don't like it.
  * No clean docs about null-safety I don't know if Nim support it or not.
  * Even there are some real projects, like Nim forum, still not much real 
projects done with Nim.
  * Unclear what's the multicore performance.
  * Extra complexities about pointers. I never used pointers in TypeScript and 
in Java not sure if they should be mentioned at all in beginner-level 
tutorials. Maybe it's good for performance but the cost is - simplicity, it 
adds complexity and I'm not sure if I ever need it.



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.

Reply via email to