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.
