**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.

Reply via email to