**bpr:** _I doubt that that's the biggest problem._ The context here is people _transitioning from other languages_. In this regard, OOP is probably the single biggest impedance mismatch. The point I'm getting at is that Nim supports pretty much all other major features that you typically find in mainstream languages such as Java, C#, Ruby, and Python. OOP is the big exception as far as language semantics are concerned.
**bpr:** _Lots of people familiar with Javascript, even the pre-ES6 variant. Go has caught on, w/o classes, and both Rust and Julia have a number of people looking at them. Clojure too._ Javascript's hackish protoype-based OO was enough of a pain point that popular JS dialects such as Typescript and Coffeescript tried to at least approximate traditional OO before ES6. And then, of course, ES6. For all the rhetoric, Go's object system is a pretty traditional one. Its one unusual feature is that it allows for structural subtyping, but that's hardly unique and (importantly) less of a constraint than nominal subtyping. Note that the absence of a "class" keyword as such does not mean anything. You could do OOP in C++ by using `struct` instead of `class`, too (which only affects visibility rules). We'll see where Rust goes; in many ways, it's too radical a language to have seen much adoption outside of its core niche (programming close to the metal where automatic memory management is not an option), but the borrow checker is probably a much bigger pain point here than anything else. Julia has its own domain (mathematics), which has different needs from a general purpose language and also a ready-made audience that's willing to trade a learning curve for a language that's well-suited to its domain.