**Libman:** _This is very impressive, given that Crystal is a 3-year-old 
newcomer that we've watched take its first steps, while Nim is still fighting 
its way into the top 100..._

First, keep in mind that the Tiobe index is of somewhat questionable quality. 
You'll get a lot of esoteric sites about "programming crystals" when searching 
for `+"crystal programming"` on Google, for example, which have nothing to do 
with either programming (in the IT sense) or the programming language. Crystal 
still does get more genuine hits than Nim, but it's difficult to get an 
accurate comparison with other languages.

**Libman:** _Promoting Nim to Python programmers (ex), on the other hand, has 
been a lot more difficult...)_

That's because other than the syntax, Nim and Python don't have a whole lot in 
common other than the syntax.

**Libman:** _I still think that Nim has a lot of potential for mainstream 
popularity, but the problem is that most programmers out there don't instantly 
like its syntax._

If syntax were an issue, Go would never have become popular. I think syntax is 
in general a red herring, and having multiple syntax skins would just create a 
"Tower of Babel" effect where people have difficulty reading each other's code.

If I had to guess, I think the biggest problem with Nim is its really unclear 
approach to OOP. No matter how much forum warrioring goes on about OOP, the 
reality is that traditional class-based OOP (or a reasonable facsimile thereof) 
is present in most popular high-level programming languages and (more 
importantly) virtually every programmer is familiar with it.

Currently, Nim has the following problems with OOP:

  * The multi-method approach is unfamiliar to lots of people, multi-methods 
are verbose, and to use something that looks more familiar, you have to 
basically roll your own macros.
  * The future of multi-methods is uncertain.
  * Multiple dispatch can be inefficient if you have a large number of 
subclasses.
  * The vtref approach is not yet implemented.
  * Even when implemented, it'd again be different from what people were used 
to.
  * Using vtrefs has different tradeoffs compared to more traditional OOP.



Overall, OOP feels like an unloved feature that exists as a checkbox on a 
feature list more than anything else. And if you want to transition from Ruby 
or Python, it's likely to be a much bigger deal than syntax, given how 
prominent a role OOP plays in both languages. Same goes for C++/C# or most top 
20 languages of whatever programming ranking you prefer.

Reply via email to